finish order features table, create order from agenda based on the user type, commandes list, commande create , commande update, commande delete, wip tarif

This commit is contained in:
Tiavina 2025-02-06 16:28:58 +03:00
parent 7b088618d3
commit 8901c0a7cb
35 changed files with 264 additions and 36 deletions

View File

@ -146,6 +146,7 @@ return [
//thanato
['name' => 'page#getThanatoTypeList', 'url' => '/thanato/type', 'verb' => 'PROPFIND'],
['name' => 'page#getThanatosByType', 'url' => '/thanatos/type/{thanatoType}', 'verb' => 'PROPFIND'],
//relation of user and thanato
['name' => 'page#getUsersNotLinkedToThanato','url' => '/user/getUsersNotLinkedToThanato', 'verb' => 'PROPFIND'],
@ -153,5 +154,6 @@ return [
//order
['name' => 'order#getOrdersWithDetails','url' => '/order/list', 'verb' => 'PROPFIND'],
['name' => 'order#createDefaultOrder','url' => '/order/createDefaultOrder', 'verb' => 'POST'],
['name' => 'order#updateOrderDate','url' => '/order/{orderId}/updateDate', 'verb' => 'PUT'],
]
];

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -120,4 +120,19 @@ class OrderController extends Controller {
return null;
}
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*/
public function updateOrderDate($orderId,$orderDate) {
try{
$this->orderService->updateOrderDate($orderId,$orderDate);
return true;
}
catch(Exception $e){
var_dump($e->getMessage());
return null;
}
}
}

View File

@ -2804,4 +2804,18 @@ class PageController extends Controller {
return json_encode([]);
}
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*
*/
public function getThanatosByType($thanatoType){
try{
return $this->myDb->getThanatosByType($thanatoType);
}
catch(Exception $e) {
return json_encode([]);
}
}
}

View File

@ -3,6 +3,7 @@ namespace OCA\Gestion\Db;
use OCA\Gestion\Constants\BddConstant;
use OCA\Gestion\Constants\DevisMentionConstant;
use OCA\Gestion\Constants\ThanatoTypeConstant;
use OCA\Gestion\Helpers\DateHelpers;
use OCA\Gestion\Helpers\VCalendarHelpers;
use OCP\IDBConnection;
@ -35,8 +36,12 @@ class Bdd {
"drainage", "drainage_qte", "drainage_etat", "ponction", "ponction_qte", "cavite", "cavite_qte", "desinfection", "lavage",
"rasage", "presentation_cosmetique", "presentation_sur", "hypodermiques", "hypodermiques_sur", "local", "local_sur", "contenu",
"commentaire", "designation", "hypodermiques_text1", "hypodermiques_text2", "qte", "endroit",
"fk_thanato_type_key","thanato_email","fk_user_uuid");
$this->whiteTable = array("client", "lieu", "trajet", "devis", "produit_devis", "facture", "produit", "configuration", "ligne_trajet", "thanato", "article", "defunt", "article_devis", "bibliotheque", "bijou_defunt", "obs_defunt", "hypo_defunt");
"fk_thanato_type_key","thanato_email","fk_user_uuid",
"fk_defunt_id","fk_lieu_id","fk_client_id","fk_thanato_id");
$this->whiteTable = array("client", "lieu", "trajet", "devis", "produit_devis", "facture", "produit",
"configuration", "ligne_trajet", "thanato", "article", "defunt", "article_devis",
"bibliotheque", "bijou_defunt", "obs_defunt", "hypo_defunt",
"orders");
$this->tableprefix = '*PREFIX*' ."gestion_";
$this->pdo = $db;
$this->l = $l;
@ -478,7 +483,9 @@ class Bdd {
.$this->tableprefix."devis.user_id as user_id
FROM ".$this->tableprefix."defunt
LEFT JOIN ".$this->tableprefix."devis ON ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
WHERE ".$this->tableprefix."devis.id_defunt IS NULL
LEFT JOIN ".$this->tableprefix."orders ON ".$this->tableprefix."defunt.id = ".$this->tableprefix."orders.fk_defunt_id
WHERE ".$this->tableprefix."devis.id_defunt IS NULL AND "
.$this->tableprefix."orders.fk_defunt_id IS NULL
ORDER BY ".$this->tableprefix."defunt.id DESC;";
return $this->execSQL($sql, array());
}
@ -973,7 +980,8 @@ class Bdd {
} else if(strcmp($table, "ligne_trajet")==0 && (strcmp($column, "id_devis")==0 || strcmp($column, "date")==0 || strcmp($column, "id_lieu")==0 || strcmp($column, "rang")==0)) {
$ligne_trajet = json_decode($this->getOneTrajetdetails($id, $idNextcloud))[0];
$this->update_lieu_date_devis_rang_ligneTrajet($ligne_trajet, $column, htmlentities(rtrim($data)), $idNextcloud);
} else {
}
else {
$sql = "UPDATE ".$this->tableprefix.$table." SET $column = ? WHERE `id` = ?";
$this->execSQLNoData($sql, array(trim($data), $id));
}
@ -2806,4 +2814,13 @@ class Bdd {
}
}
public function getThanatosByType($thanatoType = ThanatoTypeConstant::THANATO_TYPE_EMPLOYEE){
$thanatoType = $thanatoType ?? ThanatoTypeConstant::THANATO_TYPE_EMPLOYEE;
$sql = "SELECT * FROM ".$this->tableprefix."thanato as thanato
WHERE thanato.fk_thanato_type_key = ?
";
return $this->execSQL($sql,[$thanatoType]);
}
}

View File

@ -212,4 +212,31 @@ class OrderBdd {
)
);
}
private function updateOrderNumber($orderId,$datetime){
$lastOrderNumber = $this->getLastOrderNumber();
$currentOrderNumber = $lastOrderNumber + 1;
$currentOrderFullNumber = OrderHelpers::GetFullOrderNumberByDateAndOrderNumber($datetime,$currentOrderNumber);
$sql = "UPDATE ".$this->orderTablePrefix."orders as orders
SET orders.order_number = ?,orders.order_full_number = ?
WHERE orders.id = ?
";
$this->execSQLNoData($sql,[$currentOrderNumber,$currentOrderFullNumber,$orderId]);
}
private function updateOrderDate($orderId,$orderDate){
$sql = "UPDATE ".$this->orderTablePrefix."orders as orders
SET orders.order_date = ?
WHERE orders.id = ?
";
$this->execSQLNoData($sql,[$orderDate,$orderId]);
}
public function updateOrderDateAndSetNewOrderNumber($orderId,$date){
$this->updateOrderDate($orderId,$date);
$datetime = new Datetime($date);
$this->updateOrderNumber($orderId,$datetime);
}
}

View File

@ -63,4 +63,8 @@ class OrderService {
public function createDefaultOrder($idNextcloud){
$this->orderBdd->createDefaultOrder($idNextcloud);
}
public function updateOrderDate($orderId,$date){
$this->orderBdd->updateOrderDateAndSetNewOrderNumber($orderId,$date);
}
}

View File

@ -0,0 +1,2 @@
export const ThanatoEmployeeTypeKey = "EMPLOYEE";
export const ThanatoSubcontractorTypeKey = "SUBCONTRACTOR";

View File

@ -15,6 +15,7 @@ import { Article } from "../objects/article.mjs";
import { Defunt } from "../objects/defunt.mjs";
import { Bibliotheque } from "../objects/bibliotheque.mjs";
import { Order } from "../objects/order.mjs";
import { ThanatoEmployeeTypeKey,ThanatoSubcontractorTypeKey } from "../constants/thanatoTypeConstant";
var choose_folder = t('gestion', 'Choose work folder');
@ -116,9 +117,6 @@ document.body.addEventListener('click', e => {
} else if("genererDefunt" == e.target.id) {
genererDefunts();
}
else if("createDefaultOrder" === e.target.id){
Order.createDefaultOrder(new DataTable('.tabledt'));
}
});
document.body.addEventListener('keydown', e => {
@ -234,6 +232,7 @@ $('body').on('click', '.deleteItem', function () {
if (modifier === "article") { Article.loadArticleDT(dt); }
if (modifier === "defunt") { Defunt.loadDefuntDT(dt); }
if (modifier === "bibliotheque") { Bibliotheque.loadBibliothequeDT(dt); }
if (modifier === "orders") { Order.loadOrderDatatable(dt); }
});
$('body').on('change', '.listClient,.listDevis', function () {

View File

@ -0,0 +1,24 @@
import DataTable from "datatables.net";
import { Order } from "../objects/order.mjs";
import { updateOrderDate } from "../modules/order/orderAjaxRequest.mjs";
import { Thanatopracteur } from "../objects/thanatopracteur.mjs";
import { ThanatoSubcontractorTypeKey } from "../constants/thanatoTypeConstant";
$('body').on('change', '.orderInputDate', function () {
var dt = new DataTable('.tabledt');
var id = $(this).data('id');
var val = this.value;
updateOrderDate(id,val);
Order.loadOrderDatatable(dt);
})
document.body.addEventListener('click', e => {
if(e.target.className.includes("getThanatosSubcontractor")){
Thanatopracteur.loadThanatosListedByTypeIntoSelect(e,ThanatoSubcontractorTypeKey);
return;
}
if("createDefaultOrder"=== e.target.id){
Order.createDefaultOrder(new DataTable('.tabledt'));
return;
}
});

View File

@ -816,4 +816,5 @@ export function exportCareCertificate(defuntIdPayload) {
showMessage(t('gestion', 'There is an error'));
error(response);
});
};

View File

@ -0,0 +1,26 @@
import { showSuccess, showError } from "@nextcloud/dialogs";
import { translate as t, translatePlural as n } from '@nextcloud/l10n'
import { baseUrl } from "../mainFunction.mjs";
/**
* Update order date
* @param orderId
* @param dateValue
*/
export function updateOrderDate(orderId,dateValue) {
var payload = {
orderDate: dateValue
};
$.ajax({
url: baseUrl + '/order/'+orderId+'/updateDate',
type: 'PUT',
async: false,
contentType: 'application/json',
data: JSON.stringify(payload)
}).done(function (response, code) {
showSuccess(t('gestion', 'Succès'));
}).fail(function (response, code) {
showError(t('gestion', 'Erreur dans la mise à jour de la date du commande'));
});
}

View File

@ -1,6 +1,5 @@
import { showError } from "@nextcloud/dialogs";
import { baseUrl, checkSelectPurJs, LoadDT, showDone } from "../modules/mainFunction.mjs";
import { updateDB } from "../modules/ajaxRequest.mjs";
import { OrderStatusOrdered,OrderStatusNew,OrderStatusCanceled } from "../constants/orderConstant.js";
export class Order {
@ -13,10 +12,8 @@ export class Order {
this.orderDate = ((myresp.order_date == null || myresp.order_date.length === 0) ? '-' : myresp.order_date);
this.orderFullNumber = ((myresp.order_full_number == null || myresp.order_full_number.length === 0) ? '-' : myresp.order_full_number);
this.defuntName = ((myresp.defunt_nom == null || myresp.defunt_nom.length === 0) ? '-' : myresp.defunt_nom);
this.thanatoName = ((myresp.thanato_nom == null || myresp.thanato_nom.length === 0) ? '-' : myresp.thanato_nom);
this.thanatoLastName = ((myresp.thanato_prenom == null || myresp.thanato_prenom.length === 0) ? '-' : myresp.thanato_prenom);
this.clientName = ((myresp.client_nom == null || myresp.client_nom.length === 0) ? '-' : myresp.client_nom);
this.clientLastName = ((myresp.client_prenom == null || myresp.client_prenom.length === 0) ? '-' : myresp.client_prenom);
this.thanatoFullName = Order.getThanatoFullname(myresp);
this.clientFullName = Order.getClientFullname(myresp);
this.locationName = ((myresp.lieu_nom == null || myresp.lieu_nom.length === 0) ? '-' : myresp.lieu_nom);
this.statusLabel = ((myresp.order_status_label == null || myresp.order_status_label.length === 0) ? '-' : myresp.order_status_label);
this.defuntId = ((myresp.fk_defunt_id == null || myresp.fk_defunt_id.length === 0) ? '-' : myresp.fk_defunt_id);
@ -24,6 +21,43 @@ export class Order {
this.clientId = ((myresp.fk_client_id == null || myresp.fk_client_id.length === 0) ? '-' : myresp.fk_client_id);
this.locationId = ((myresp.fk_lieu_id == null || myresp.fk_lieu_id.length === 0) ? '-' : myresp.fk_lieu_id);
this.statusKey = ((myresp.fk_order_status_key == null || myresp.fk_order_status_key.length === 0) ? '-' : myresp.fk_order_status_key);
this.productReferences = ((myresp.product_references == null || myresp.product_references.length === 0) ? '-' : myresp.product_references);
}
static getClientFullname(myresp){
let clientPrenom = '';
let clientNom = '';
let clientFullName = '';
if(myresp.client_nom != null && myresp.client_nom.length != 0){
clientNom = myresp.client_nom;
clientFullName += clientNom;
}
if(myresp.client_prenom != null && myresp.client_prenom.length != 0){
clientPrenom = myresp.client_prenom;
if(clientNom.length > 0 && clientPrenom.length > 0){
clientFullName += ' '
}
clientFullName += clientPrenom;
}
return (clientFullName.length === 0) ? '-' : clientFullName;
}
static getThanatoFullname(myresp){
let thanatoPrenom = '';
let thanatoNom = '';
let thanatoFullName = '';
if(myresp.thanato_nom != null && myresp.thanato_nom.length != 0){
thanatoNom = myresp.thanato_nom;
thanatoFullName += thanatoNom;
}
if(myresp.thanato_prenom != null && myresp.thanato_prenom.length != 0){
thanatoPrenom = myresp.thanato_prenom;
if(thanatoNom.length > 0 && thanatoPrenom.length > 0){
thanatoFullName += ' '
}
thanatoFullName += thanatoPrenom;
}
return (thanatoFullName.length === 0) ? '-' : thanatoFullName;
}
static getComandStatusCssSytle(orderStatusKey){
@ -47,12 +81,13 @@ export class Order {
let orderRow = [
'<input class="orderToExport" data-id= '+ this.id + ' type="checkbox" name="orderToExport" value="' + this.id + '"/>',
'<div>' + this.id + '</div>',
'<input style="margin:0;padding:0;" class="inputDate" type="date" value=' + this.orderDate + ' data-table="orders" data-column="order_date" data-id="' + this.id + '"/>',
'<input style="margin:0;padding:0;" class="orderInputDate" type="date" value=' + this.orderDate + ' data-id="' + this.id + '"/>',
'<div>' + this.orderFullNumber + '</div>',
'<div class="loadSelect_listdefunt" data-table="orders" data-column="fk_defunt_id" data-id="' + this.id + '" data-current="' + this.defuntId + '">'+ this.defuntName + '</div>',
'<div class="loadSelect_listclient" data-table="orders" data-column="fk_client_id" data-id="' + this.id + '" data-current="' + this.clientId + '">'+ this.clientLastName + ' ' +this.clientName + '</div>',
'<div class="loadSelect_listthanato" data-table="orders" data-column="fk_thanato_id" data-id="' + this.id + '" data-current="' + this.thanatoId + '">'+ this.thanatoLastName + ' ' + this.thanatoName + '</div>',
'<div class="loadSelect_listclient" data-table="orders" data-column="fk_client_id" data-id="' + this.id + '" data-current="' + this.clientId + '">'+ this.clientFullName + '</div>',
'<div class="getThanatosSubcontractor" data-table="orders" data-column="fk_thanato_id" data-id="' + this.id + '" data-current="' + this.thanatoId + '">'+ this.thanatoFullName + '</div>',
'<div class="loadSelect_listlieu" data-table="orders" data-column="fk_lieu_id" data-id="' + this.id + '" data-current="' + this.locationId + '">'+ this.locationName + '</div>',
'<div>' + this.productReferences + '</div>',
'<div style="'+ Order.getComandStatusCssSytle(this.statusKey) +'">' + this.statusLabel + '</div>',
'<div data-modifier="orders" data-id=' + this.id + ' data-table="orders" style="display:inline-block;margin-right:0px;" class="deleteItem icon-delete"></div>'
];

View File

@ -108,6 +108,20 @@ export class Thanatopracteur {
oReq.send();
}
static getThanatoByType(thanatoType,callback){
var oReq = new XMLHttpRequest();
oReq.open('PROPFIND', baseUrl + '/thanatos/type/'+thanatoType, true);
oReq.setRequestHeader("Content-Type", "application/json");
oReq.onload = function(e){
if (this.status == 200) {
callback(JSON.parse(this.response));
}else{
showError(this.response);
}
};
oReq.send();
}
static getUsersNotLinkedToThanato(callback){
var oReq = new XMLHttpRequest();
oReq.open('PROPFIND', baseUrl + '/user/getUsersNotLinkedToThanato', true);
@ -265,4 +279,50 @@ export class Thanatopracteur {
e.target.appendChild(selectElement);
});
}
static loadThanatosListedByTypeIntoSelect(e,thanatoType){
Thanatopracteur.getThanatoByType(thanatoType,response => {
var selectElement = document.createElement("select");
selectElement.dataset.current = e.target.dataset.current;
selectElement.dataset.id = e.target.dataset.id;
selectElement.dataset.old = e.target.innerHTML;
selectElement.addEventListener("change", el=>{
if(el.target.value != 0 && el.target.value != null){
updateDB(el.target.parentElement.dataset.table,
el.target.parentElement.dataset.column,
el.target.value,
el.target.parentElement.dataset.id
);
var parentElement = el.target.parentElement
parentElement.innerHTML = el.target.options[el.target.selectedIndex].text;
parentElement.dataset.current = el.target.value;
}else{
var parentElement = el.target.parentElement
parentElement.innerHTML = el.target.dataset.old
}
});
var option = document.createElement("option");
option.value = null;
option.text = t('gestion', 'Cancel');
selectElement.appendChild(option);
JSON.parse(response).forEach(myresp => {
var txt = document.createElement("textarea");
txt.innerHTML = myresp.nom + ' ' + myresp.prenom;
var option = document.createElement("option");
option.value = myresp.id;
option.text = txt.value;
selectElement.appendChild(option);
});
checkSelectPurJs(selectElement);
e.target.innerHTML = ''
e.target.appendChild(selectElement);
});
}
}

View File

@ -5,6 +5,7 @@ import "../css/mycss.css";
import DataTable from "datatables.net";
import { globalConfiguration, optionDatatable } from "./modules/mainFunction.mjs";
import "./listener/main_listener";
import "./listener/orderListener";
import { Order } from "./objects/order.mjs";
window.addEventListener("DOMContentLoaded", function () {
globalConfiguration();

View File

@ -20,8 +20,9 @@
<th><?php p($l->t('Numéro de commande'));?></th>
<th><?php p($l->t('Défunt'));?></th>
<th><?php p($l->t('Client'));?></th>
<th><?php p($l->t('Type de soins'));?></th>
<th><?php p($l->t('Thanatopracteur'));?></th>
<th><?php p($l->t('Lieu'));?></th>
<th><?php p($l->t('Type de soins'));?></th>
<th><?php p($l->t('Etat'));?></th>
<th><?php p($l->t('Actions'));?></th>
</tr>