restaurantt
Version:
This package contains a backend of what would be the logic of a restaurant software
653 lines (527 loc) • 20.7 kB
JavaScript
const { VarChar,Int, Money, Date, DateTime } = require("mssql");
const { DTOOrder } = require("../DTO/DTOOrder");
const { DTOOrderDetail } = require("../DTO/DTOOrderDetail");
const { Conection } = require("./Conection");
class DataOrder
{
//#region CRUD
static registerOrderRestaurant=async(dtoorder,arrayorderdetail)=>
{
let resultquery;
let queryinsert = `
IF NOT EXISTS ( SELECT IDCustomer FROM Customer WHERE IDCustomer=)
BEGIN
BEGIN TRANSACTION
insert into Customer values (,,)
insert into Orderr values (,'Confirmed',,
,IDENT_CURRENT('Customer'))
${this.forAddDetailOrder(arrayorderdetail)}
select 1 as insertwithcustomer
IF(@ > 0)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
END
ELSE
BEGIN
BEGIN TRANSACTION
INSERT INTO Orderr values (,'Confirmed',,
,)
${this.forAddDetailOrder(arrayorderdetail)}
select 2 as insertwithoutcustomer
IF(@ > 0)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('DateO', DateTime, dtoorder.DateO)
.input('StateO', VarChar, dtoorder.StateO)
.input('SpecialRequirement', VarChar, dtoorder.SpecialRequirement)
.input('NumberPeople', Int, dtoorder.NumberPeople)
.input('IDCustomer', Int, dtoorder.Customer.IDCustomer)
.input('NameC', VarChar, dtoorder.Customer.NamesC)
.input('LastNameC', VarChar, dtoorder.Customer.LastNameC)
.input('PhoneNumberC', VarChar, dtoorder.Customer.PhoneNumberC)
.query(queryinsert)
resultquery = result.recordset[0].insertwithcustomer;
if(resultquery===undefined)
{
resultquery = result.recordset[0].insertwithoutcustomer;
}
pool.close();
return resultquery;
}
static registerOnlineOrder=async(dtoorder,arrayorderdetail)=>
{
let queryinsert = `
BEGIN TRANSACTION
INSERT INTO Customer values (,,)
INSERT INTO Orderr values (,'Pending',,
,IDENT_CURRENT('Customer'))
${this.forAddDetailOrder(arrayorderdetail)}
IF(@ > 0)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('DateO', DateTime, dtoorder.DateO)
.input('SpecialRequirement', VarChar, dtoorder.SpecialRequirement)
.input('NumberPeople', Int, dtoorder.NumberPeople)
.input('NameC', VarChar, dtoorder.Customer.NamesC)
.input('LastNameC', VarChar, dtoorder.Customer.LastNameC)
.input('PhoneNumberC', VarChar, dtoorder.Customer.PhoneNumberC)
.query(queryinsert)
pool.close();
return true;
}
static cancelOrder=async(idorder)=>
{
let resultquery;
let queryupdate = `
IF NOT EXISTS ( SELECT IDOrder FROM Orderr WHERE IDOrder=)
BEGIN
select -1 as notexistorder
END
ELSE
BEGIN
UPDATE Orderr SET StateO='Canceled'
WHERE IDOrder=
select 1 as canceledsuccess
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int,idorder)
.query(queryupdate)
resultquery = result.recordset[0].notexistorder;
if(resultquery===undefined)
{
resultquery = result.recordset[0].canceledsuccess;
}
pool.close();
return resultquery;
}
static confirmOrder=async(idorder)=>
{
let resultquery;
let queryupdate = `
IF NOT EXISTS ( SELECT IDOrder FROM Orderr WHERE IDOrder=)
BEGIN
select -1 as notexistorder
END
ELSE
BEGIN
UPDATE Orderr SET StateO='Confirmed'
WHERE IDOrder=
select 1 as confirmsuccess
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int,idorder)
.query(queryupdate)
resultquery = result.recordset[0].notexistorder;
if(resultquery===undefined)
{
resultquery = result.recordset[0].confirmsuccess;
}
pool.close();
return resultquery;
}
static updateSpecialRequirementsNumberPeople=async(idorder,speacilr,numberpeople)=>
{
let resultquery;
let queryupdate = `
IF NOT EXISTS ( SELECT IDOrder FROM Orderr WHERE IDOrder=)
BEGIN
select -1 as notexistorder
END
ELSE
BEGIN
UPDATE Orderr SET NumberPeople=,
SpecialRequirement=
WHERE IDOrder=
select 1 as updatesuccess
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int,idorder)
.input('NumberPeople', Int,numberpeople)
.input('SpecialRequirement', VarChar,speacilr)
.query(queryupdate)
resultquery = result.recordset[0].notexistorder;
if(resultquery===undefined)
{
resultquery = result.recordset[0].updatesuccess;
}
pool.close();
return resultquery;
}
static updateDateOOrder=async(idorder,dateo)=>
{
let resultquery;
let queryupdate = `
IF NOT EXISTS ( SELECT IDOrder FROM Orderr WHERE IDOrder=)
BEGIN
select -1 as notexistorder
END
ELSE
BEGIN
UPDATE Orderr SET DateO=
WHERE IDOrder=
select 1 as updatesuccess
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int,idorder)
.input('DateO', DateTime,dateo)
.query(queryupdate)
resultquery = result.recordset[0].notexistorder;
if(resultquery===undefined)
{
resultquery = result.recordset[0].updatesuccess;
}
pool.close();
return resultquery;
}
// DETAIL ORDER
static addDetailOrder=async(idorder,quantity,iddish)=>
{
let resultquery;
let queryupdate = `
IF NOT EXISTS ( SELECT IDOrder FROM Orderr WHERE IDOrder=)
BEGIN
select -1 as notexistorder
END
ELSE
BEGIN
IF NOT EXISTS ( SELECT IDDishh FROM Dish WHERE IDDishh=)
BEGIN
select -2 as notexistdish
END
ELSE
BEGIN
INSERT INTO DetailOrder
SELECT ,*CostD,IDOrder,IDDishh
FROM dish,orderr
WHERE IDDishh= AND IDOrder=
select 1 as insertsuccess
END
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int, idorder)
.input('IDDishh', Int,iddish)
.input('QuantityDO', Money,quantity)
.query(queryupdate)
resultquery = result.recordset[0].notexistorder;
if(resultquery===undefined)
{
resultquery = result.recordset[0].notexistdish;
if(resultquery===undefined)
{
resultquery = result.recordset[0].insertsuccess;
}
}
pool.close();
return resultquery;
}
static removeDetailOrder=async(idorder,iddish)=>
{
let resultquery;
let queryupdate = `
IF NOT EXISTS ( SELECT IDOrder FROM DetailOrder WHERE IDOrder= AND IDDishh= )
BEGIN
select -1 as noexistdetailorder
END
ELSE
BEGIN
DELETE FROM DetailOrder WHERE IDOrder= AND IDDishh=
select 1 as deletesucess
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int, idorder)
.input('IDDishh', Int,iddish)
.query(queryupdate)
resultquery = result.recordset[0].noexistdetailorder;
if(resultquery===undefined)
{
resultquery = result.recordset[0].deletesucess;
}
pool.close();
return resultquery;
}
static updateDetailOrderQuantity=async(idorder,iddish,quantity)=>
{
let resultquery;
let queryupdate = `
IF NOT EXISTS ( SELECT IDDetailO FROM DetailOrder WHERE IDOrder= AND IDDishh= )
BEGIN
select -1 as noexistdetailorder
END
ELSE
BEGIN
UPDATE DetailOrder set QuantityDO=,AmountDO=CostD*
FROM DetailOrder,Dish
WHERE DetailOrder.IDOrder= and DetailOrder.IDDishh=
select 1 as updatesuccess
END
`;
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int, idorder)
.input('IDDishh', Int,iddish)
.input('QuantityDO', Int,quantity)
.query(queryupdate)
resultquery = result.recordset[0].noexistdetailorder;
if(resultquery===undefined)
{
resultquery = result.recordset[0].updatesuccess;
}
pool.close();
return resultquery;
}
static getDetailOrder=async(idorder,iddish)=>
{
let resultquery;
let querysearch = `
IF NOT EXISTS ( SELECT IDDetailO FROM DetailOrder WHERE IDOrder= AND IDDishh= )
BEGIN
select -1 as noexistdetailorder
END
ELSE
BEGIN
SELECT
o.*,
do.IDDetailO,
do.QuantityDO,
do.AmountDO,
do.IDDishh,
c.NamesC,
c.LastNameC,
c.PhoneNumberC
FROM Orderr o
INNER JOIN DetailOrder do
ON do.idorder=o.idorder
INNER JOIN Customer c ON c.IDCustomer=o.IDCustomer
WHERE do.idorder= and do.iddishh=
END
`
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int, idorder)
.input('IDDishh', Int,iddish)
.query(querysearch)
resultquery = result.recordset[0].noexistdetailorder;
if (resultquery===undefined) {
let resultrecordset=result.recordset[0];
let detailorder = new DTOOrderDetail();
this.getinformationOrderWithDetailOrder(detailorder, resultrecordset);
resultquery=detailorder
}
pool.close();
return resultquery;
}
//#endregion
//#region GETS
static getOrder=async(idorder)=>
{
let resultquery;
let array=[];
let querysearch = `
IF NOT EXISTS ( SELECT IDOrder from Orderr WHERE IDOrder=)
BEGIN
select -1 as noexistorder
END
ELSE
BEGIN
SELECT
o.*,
do.IDDetailO,
do.QuantityDO,
do.AmountDO,
do.IDDishh,
c.NamesC,
c.LastNameC,
c.PhoneNumberC
FROM Orderr o
INNER JOIN DetailOrder do
ON do.idorder=o.idorder
INNER JOIN Customer c ON c.IDCustomer=o.IDCustomer
WHERE o.idorder=
END
`
let pool = await Conection.conection();
const result = await pool.request()
.input('IDOrder', Int, idorder)
.query(querysearch)
resultquery = result.recordset[0].noexistorder;
if (resultquery===undefined) {
for (var r of result.recordset) {
let orderdetail = new DTOOrderDetail();
this.getinformationOrderWithDetailOrder(orderdetail,r);
array.push(orderdetail);
resultquery=array;
}
}
pool.close();
return resultquery;
}
static getSearchOrder=async(idorder1=0,idorder2=99999,
dateo1='2000-08-08',dateo2='2100-08-08'
,stateo="",specialr="",numberpeople1=0,numberpeople2=99999,
IDCustomer1=0,IDCustomer2=99999,
namecustomer="",lastnamecustomer="",
QuantityDO1=0,QuantityDO2=99999,
AmountDO1=0,AmountDO2=99999,
IDDishh1=0,IDDishh2=99999,
orderby="IDOrder")=>
{
let array=[];
let querysearch = `
SELECT
o.*,
do.IDDetailO,
do.QuantityDO,
do.AmountDO,
do.IDDishh,
c.NamesC,
c.LastNameC,
c.PhoneNumberC
FROM Orderr o
INNER JOIN DetailOrder do
ON do.idorder=o.idorder
INNER JOIN Customer c ON c.IDCustomer=o.IDCustomer
WHERE
o.IDOrder between ${idorder1} and ${idorder2}
and o.DateO between and
and o.StateO like '%${stateo}%'
and o.SpecialRequirement like '%${specialr}%'
and o.NumberPeople between ${numberpeople1} and ${numberpeople2}
and c.IDCustomer between ${IDCustomer1} and ${IDCustomer2}
and c.NamesC like '%${namecustomer}%'
and c.LastNameC like '%${lastnamecustomer}%'
and do.QuantityDO between ${QuantityDO1} and ${QuantityDO2}
and do.AmountDO between ${AmountDO1} and ${AmountDO2}
and do.IDDishh between ${IDDishh1} and ${IDDishh2}
ORDER BY ${orderby} desc
`
let pool = await Conection.conection();
const result = await pool.request()
.input('DateO1', DateTime, dateo1)
.input('DateO2', DateTime, dateo2)
.query(querysearch)
for (var r of result.recordset) {
let detailorder = new DTOOrderDetail();
this.getinformationOrderWithDetailOrder(detailorder,r);
array.push(detailorder);
}
pool.close();
return array;
}
static getMultipleIdOrder=async(arrayidorder,orderby="IDOrder")=>
{
let array=[];
let querysearch = `
SELECT
o.*,
do.IDDetailO,
do.QuantityDO,
do.AmountDO,
do.IDDishh,
c.NamesC,
c.LastNameC,
c.PhoneNumberC
FROM Orderr o
INNER JOIN DetailOrder do
ON do.idorder=o.idorder
INNER JOIN Customer c ON c.IDCustomer=o.IDCustomer
WHERE
o.IDOrder in
(
${this.forinsidestringorder(arrayidorder)}
)
ORDER BY ${orderby} desc
`
let pool = await Conection.conection();
const result = await pool.request()
.query(querysearch)
for (var r of result.recordset) {
let detailorder = new DTOOrderDetail();
this.getinformationOrderWithDetailOrder(detailorder,r);
array.push(detailorder);
}
pool.close();
return array;
}
//#endregion
//#region GET INFORMATION
static getinformationOrderWithDetailOrder(detailorder, result) {
detailorder.Order.IDOrder=result.IDOrder;
detailorder.Order.DateO=result.DateO;
detailorder.Order.StateO=result.StateO;
detailorder.Order.SpecialRequirement=result.SpecialRequirement;
detailorder.Order.NumberPeople=result.NumberPeople;
detailorder.IDDetailO=result.IDDetailO;
detailorder.QuantityDO=result.QuantityDO;
detailorder.AmountDO=result.AmountDO;
detailorder.IDDishh=result.IDDishh;
detailorder.Dish=null;
detailorder.Order.Customer.IDCustomer = result.IDCustomer;
detailorder.Order.Customer.NamesC = result.NamesC;
detailorder.Order.Customer.LastNameC = result.LastNameC;
detailorder.Order.Customer.PhoneNumberC = result.PhoneNumberC;
}
//#region OTHERS
static forAddDetailOrder(array)//used to add multiple detail order
{
let stringelement="";
for (let index = 0; index < array.length; index++) {
const element = array[index];
stringelement=stringelement+
`
insert into DetailOrder values (${element.quantity},${element.amount},IDENT_CURRENT('Orderr'),${element.iddish})
`
}
return stringelement
}
static forinsidestringorder(array)//pass all id to string for sql query
{
let stringelement="";
for (let index = 0; index < array.length; index++) {
const idorder = array[index];
if (index===array.length-1) {
stringelement=stringelement+idorder
}
else
{
stringelement=stringelement+idorder+","
}
}
return stringelement
}
//#endregion
}
module.exports = { DataOrder };