Ken
07/03/2023, 4:36 PMbattk
07/03/2023, 6:04 PMKen
07/03/2023, 6:14 PMbattk
07/03/2023, 6:29 PMKen
07/03/2023, 6:31 PMconst cashSale = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrderId,
toType: record.Type.CASH_SALE,
isDynamic: true,
});
battk
07/03/2023, 6:32 PMbattk
07/03/2023, 6:33 PMbattk
07/03/2023, 6:33 PMbattk
07/03/2023, 6:34 PMKen
07/03/2023, 6:34 PMKen
07/03/2023, 6:35 PMKen
07/03/2023, 6:36 PMKen
07/03/2023, 6:36 PMKen
07/03/2023, 6:37 PMKen
07/03/2023, 6:40 PMconst cashSale = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrderId,
toType: record.Type.CASH_SALE,
isDynamic: true,
});
const cashSaleLineCount = cashSale.getLineCount("item")
const cashSaleLines = cashSale.getSublist({ sublistId: 'item' });
log.debug('cashsale Line Amount'. cashSaleLines)
for (let i = 0; i < cashSaleLineCount ; i ++){
const salesOrderItemId = cashSale.getSublistValue({
sublistId: 'item',
fieldId: 'orderline',
line: i
});
}
Ken
07/03/2023, 8:08 PMKen
07/03/2023, 8:09 PMKen
07/03/2023, 8:09 PMbattk
07/03/2023, 8:10 PMKen
07/03/2023, 9:24 PMbattk
07/03/2023, 10:51 PMKen
07/03/2023, 11:03 PMdefine(['N/record', 'N/log'], function (record, log) {
function afterSubmit(context) {
if ((context.type === context.UserEventType.CREATE && context.newRecord.getValue('shipstatus') == 'C') || (context.type === "ship")) {
log.debug('Item fulfillment is created', context);
const fulfillment = context.newRecord;
try {
// Load Fulfillment Record
const fulfillmentId = fulfillment.getValue('id');
const itemFulfillment = record.load({
type: record.Type.ITEM_FULFILLMENT,
id: fulfillmentId,
isDynamic: true,
});
const itemfulfillmentCount = itemFulfillment.getLineCount("item")
//Load Sales Record
const salesOrderId = itemFulfillment.getValue({
fieldId: "createdfrom",
});
const salesOrder = record.load({
type: record.Type.SALES_ORDER,
id: salesOrderId,
isDynamic: true
})
const ifDate = context.newRecord.getValue('trandate');
//Get Discount Spread
let totalSalesDiscount = 0;
let totalGiftCardRedeem = 0;
let totalNormalCost = 0;
const salesOrderLineCount = salesOrder.getLineCount({
sublistId: 'item'
});
log.debug('sales total Line', salesOrderLineCount)
for (let i = 0; i < salesOrderLineCount; i++) {
const rate = salesOrder.getSublistValue({
sublistId: 'item',
fieldId: 'rate',
line: i
});
const itemid = salesOrder.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: i,
})
const quantity = salesOrder.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
});
log.debug('Item', `Item id - ${itemid}, rate - ${rate} , quantity - ${quantity}`)
if (rate < 0 && itemid != '4665') {
totalSalesDiscount += rate * quantity;
} else if (rate < 0 && itemid == '4665') {
totalGiftCardRedeem += rate * quantity;
} else {
totalNormalCost += rate * quantity;
}
}
log.debug('Total Normal Amount without Discount : ' + salesOrderId, totalNormalCost)
log.debug('Total Sales Discount for sales Order ID : ' + salesOrderId, totalSalesDiscount)
log.debug('Total Gift Card Redeem for sales Order ID : ' + salesOrderId, totalGiftCardRedeem)
log.debug('Sales Order Info', salesOrder)
log.debug('IMPORTANT', `IMPORTANT -- Creating Cash Sale`)
const keepArray = [];
log.debug('Inside Item fulfillment', 'Item fulfillment IMPORT')
for (let i = 0; i < itemfulfillmentCount ; i ++){
const salesOrderItemLineId = itemFulfillment.getSublistValue({
sublistId: 'item',
fieldId: 'orderline',
line: i
});
log.debug('salesOrderItemLineId', salesOrderItemLineId)
keepArray.push(salesOrderItemLineId)
}
log.debug('Keep Array', keepArray)
const cashSale = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrderId,
toType: record.Type.CASH_SALE,
isDynamic: true
});
const removeList = [];
//Add Remove List
for (let i = 0; i < cashSale.getLineCount("item") ; i ++){
const salesOrderItemId = cashSale.getSublistValue({
sublistId: 'item',
fieldId: 'orderline',
line: i
});
if (!keepArray.includes(salesOrderItemId)) {
removeList.push(i);
}
}
log.debug('Removing List', removeList)
for(let i of removeList.sort().reverse()){
log.debug('Begin Removed', i)
cashSale.removeLine({
sublistId: "item",
line: i,
});
log.debug('Removed', i)
}
//Start adding discount to cash sale
let splitDiscountAmountTotal = 0;
let splitGiftCardReddemAmountTotal = 0;
if(totalSalesDiscount<0){
for (let i = 0; i < cashSale.getLineCount("item") ; i ++){
const rate = cashSale.getSublistValue({
sublistId: 'item',
fieldId: 'rate',
line: i
});
const quantity = cashSale.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
});
const itemValue = rate*quantity;
splitDiscountAmountTotal+= (totalSalesDiscount)* (itemValue / totalNormalCost);
}
}
if(totalGiftCardRedeem<0){
for (let i = 0; i < cashSale.getLineCount("item") ; i ++){
const rate = cashSale.getSublistValue({
sublistId: 'item',
fieldId: 'rate',
line: i
});
const quantity = cashSale.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
});
const itemValue = rate*quantity;
splitGiftCardReddemAmountTotal+= (totalGiftCardRedeem)* (itemValue / totalNormalCost);
}
}
log.debug('Split DiscountAmountTotal', splitDiscountAmountTotal)
log.debug('Split Total GC Redeem', splitGiftCardReddemAmountTotal);
if(splitDiscountAmountTotal<0){
log.debug('adding Discount Line Item')
cashSale.selectNewLine({
sublistId: 'item',
});
cashSale.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: 4665,
});
cashSale.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: 1,
});
cashSale.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: splitDiscountAmountTotal,
});
cashSale.commitLine({
sublistId: 'item',
});
}
if(splitGiftCardReddemAmountTotal<0){
log.debug('adding Gift Card Line Item')
cashSale.selectNewLine({
sublistId: 'item',
});
cashSale.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: 4717,
});
cashSale.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: 1,
});
cashSale.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: splitGiftCardReddemAmountTotal,
});
cashSale.commitLine({
sublistId: 'item',
});
}
cashSale.setValue('trandate', ifDate);
cashSale.save();
} catch (e) {
log.error('Error Billing Item Fulfillment', e.message);
}
}
}
return {
afterSubmit: afterSubmit,
};
});
battk
07/03/2023, 11:18 PMKen
07/03/2023, 11:20 PMbattk
07/03/2023, 11:20 PMKen
07/03/2023, 11:21 PMbattk
07/03/2023, 11:22 PMKen
07/03/2023, 11:26 PMKen
07/03/2023, 11:27 PMbattk
07/03/2023, 11:30 PMKen
07/03/2023, 11:34 PMbattk
07/03/2023, 11:35 PMKen
07/03/2023, 11:36 PMKen
07/03/2023, 11:36 PMbattk
07/03/2023, 11:38 PMbattk
07/03/2023, 11:39 PMbattk
07/03/2023, 11:39 PMKen
07/03/2023, 11:40 PMbattk
07/03/2023, 11:42 PMKen
07/03/2023, 11:44 PM