File: /var/www/javago_test/src/services/inHouse/house.services.js
import inHouseItem from "../../models/in_house_items.model.js";
import inHouseItemType from "../../models/in_house_item_type.model.js";
import inHouseMenuDetails from "../../models/in_house_menu_details.model.js";
import inHouseOrder from "../../models/in_house_order.model.js";
import inHouseOrderItems from "../../models/in_house_order_items.model.js"
import moment from 'moment';
export async function GetInHouseMenu(page) {
try {
if (['', null, undefined, 0].includes(page)) {
page = 1
}
page = parseInt(page)
let menu = await inHouseItem.paginate({
page: page,
paginate: 10, // limit should go here
attributes: ['id', 'item_name', 'item_image'],
include: [
{
model: inHouseItemType,
attributes: ['id', 'type_name'],
where: {
is_active: 1
},
required: false
}
]
});
menu = JSON.stringify(menu)
menu = JSON.parse(menu)
for (let index = 0; index < menu.docs.length; index++) {
const element = menu.docs[index];
element.size_data = await inHouseMenuDetails.findAll({
where: {
type: 1,
is_active: 1,
in_house_item_id: element.id
},
attributes: ['id', 'type_value']
})
element.milk_data = await inHouseMenuDetails.findAll({
where: {
type: 2,
is_active: 1,
in_house_item_id: element.id
},
attributes: ['id', 'type_value']
})
element.sugar_data = await inHouseMenuDetails.findAll({
where: {
type: 3,
is_active: 1,
in_house_item_id: element.id
},
attributes: ['id', 'type_value']
})
}
return menu;
} catch (error) {
throw new Error(error)
}
}
export async function GetInHouseItemById(item_id) {
try {
let menu = await inHouseItem.findAll(
{
where: {
id: parseInt(item_id),
is_active: 1
},
attributes: ['id', 'item_name', 'item_image'],
include: [
{
model: inHouseItemType,
attributes: ['id', 'type_name'],
where: {
is_active: 1
},
required: false
}
]
}
);
menu = JSON.stringify(menu)
menu = JSON.parse(menu)
for (let index = 0; index < menu.length; index++) {
const element = menu[index];
element.size_data = await inHouseMenuDetails.findAll({
where: {
type: 1,
is_active: 1,
in_house_item_id: element.id
},
attributes: ['id', 'type_value']
})
element.milk_data = await inHouseMenuDetails.findAll({
where: {
type: 2,
is_active: 1,
in_house_item_id: element.id
},
attributes: ['id', 'type_value']
})
element.sugar_data = await inHouseMenuDetails.findAll({
where: {
type: 3,
is_active: 1,
in_house_item_id: element.id
},
attributes: ['id', 'type_value']
})
}
return menu;
} catch (error) {
throw new Error(error)
}
}
export async function saveOrder(itemData) {
try {
let customisedOrderObj = {
user_id: itemData.user_id,
customized_order: itemData.customized_order,
is_active: 1,
created_at: moment().unix()
}
let result = await inHouseOrder.create(customisedOrderObj);
let storeOrderObj = [];
itemData.items.forEach(element => {
storeOrderObj.push({
in_house_order_id: result.id,
in_house_item_id: element.in_house_item_id,
item_type_id: element.item_type_id,
size_id: element.size_id,
milk_id: element.milk_id,
sugar_id: element.sugar_id,
qty: element.qty,
created_at: moment().unix()
})
});
let a = await inHouseOrderItems.bulkCreate(storeOrderObj);
return a;
} catch (error) {
throw new Error(error)
}
}
export async function getOrder(data) {
try {
if (['', null, undefined, 0].includes(data.page_no)) {
data.page_no = 1
}
data.page_no = parseInt(data.page_no)
let whereObject = {}
whereObject.user_id = data.user_id
let whereOrderObj = {
where: whereObject,
page: data.page_no,
paginate: 10,
attributes: ['id', 'user_id', 'customized_order'],
order: [['id', 'DESC']],
include: [{
model: inHouseOrderItems,
required: true,
attributes: ['id', 'in_house_order_id', 'in_house_item_id', 'item_type_id', 'size_id', 'milk_id', 'sugar_id', 'qty', 'created_at'],
}
]
}
let result = [];
result = await inHouseOrder.paginate(whereOrderObj);
result = JSON.stringify(result)
result = JSON.parse(result)
for (let index = 0; index < result.docs.length; index++) {
const element = result.docs[index];
for (let i = 0; i < element.in_house_order_items.length; i++) {
const itemsData = element.in_house_order_items[i];
itemsData.item_details = await inHouseItem.findOne({
where: {
is_active: 1,
id: itemsData.in_house_item_id
},
attributes: ['id', 'item_name', 'item_image']
})
itemsData.type = await inHouseItemType.findOne({
where: {
is_active: 1,
id: itemsData.item_type_id
},
attributes: ['id', 'type_name']
})
itemsData.size_data = await inHouseMenuDetails.findOne({
where: {
type: 1,
is_active: 1,
id: itemsData.size_id
},
attributes: ['id', 'type_value']
})
itemsData.milk_data = await inHouseMenuDetails.findOne({
where: {
type: 2,
is_active: 1,
id: itemsData.milk_id
},
attributes: ['id', 'type_value']
})
itemsData.sugar_data = await inHouseMenuDetails.findOne({
where: {
type: 3,
is_active: 1,
id: itemsData.sugar_id
},
attributes: ['id', 'type_value']
})
delete itemsData.sugar_id
delete itemsData.in_house_item_id
delete itemsData.size_id
delete itemsData.item_type_id
delete itemsData.milk_id
}
}
return result;
} catch (error) {
throw new Error(error)
}
}
// edit In house Order
export async function editOrder(itemData) {
try {
let customisedOrderObj = {
customized_order: itemData.customized_order,
is_active: 1,
created_at: moment().unix()
}
let result = await inHouseOrder.update(customisedOrderObj, {
where: { id: itemData.order_id, user_id: itemData.user_id }
});
await inHouseOrderItems.destroy({
where: {
in_house_order_id: itemData.order_id
}
})
itemData.items.forEach(async element => {
let updateObj = {
in_house_order_id: itemData.order_id,
in_house_item_id: element.in_house_item_id,
item_type_id: element.item_type_id,
size_id: element.size_id,
milk_id: element.milk_id,
sugar_id: element.sugar_id,
qty: element.qty,
updated_at: moment().unix()
}
await inHouseOrderItems.create(updateObj);
});
return result;
} catch (error) {
throw new Error(error)
}
}
//delete item from in house order
export async function deleteInhouseItem(item_id) {
try {
let result = await inHouseOrderItems.destroy({
where: { id: item_id }
});
return result;
} catch (error) {
throw new Error(error)
}
}