357 lines
17 KiB
JavaScript
357 lines
17 KiB
JavaScript
import * as api from "../api/form.js";
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state: {
|
|
opendialog: false,
|
|
user: one_user(),
|
|
form_faktur: {
|
|
form_date: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_duedate: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_draftdate: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_supplier: {},
|
|
form_po: {},
|
|
form_refnumber: "",
|
|
form_supplier_invoicenum: "",
|
|
form_supplier_invoicedate: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_tax_percent_pph: 0.00,
|
|
form_tax_amount_pph: 0.00,
|
|
form_tax_percent_ppn: 0.00,
|
|
form_tax_amount_ppn: 0.00,
|
|
form_disc_po: 0.00,
|
|
form_disc_amount: 0.00,
|
|
form_disc_type: "",
|
|
form_subtotal: 0.00,
|
|
form_grandtotal: 0.00,
|
|
form_note: "",
|
|
form_adjust_amount: 0.00,
|
|
form_adjust_note: "",
|
|
form_shipping_cost: 0.00,
|
|
},
|
|
|
|
// form tambah item
|
|
dialog_item: false,
|
|
form_ro: {},
|
|
form_item: [],
|
|
is_create: false,
|
|
},
|
|
mutations: {
|
|
update_opendialog(state, data) {
|
|
state.opendialog = data
|
|
},
|
|
update_form_faktur(state, data) {
|
|
state.form_faktur = data
|
|
},
|
|
update_form_ro(state, data) {
|
|
state.form_ro = data
|
|
},
|
|
update_form_item(state, data) {
|
|
state.form_item = data
|
|
},
|
|
update_dialog_item(state, data) {
|
|
state.dialog_item = data
|
|
},
|
|
update_is_create(state, data) {
|
|
state.is_create = data
|
|
}
|
|
},
|
|
actions: {
|
|
resetForm(context) {
|
|
const form_faktur = {
|
|
form_date: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_duedate: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_draftdate: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_supplier: {},
|
|
form_po: {},
|
|
form_refnumber: "",
|
|
form_supplier_invoicenum: "",
|
|
form_supplier_invoicedate: moment(new Date()).format("YYYY-MM-DD"),
|
|
form_tax_percent_pph: 0.00,
|
|
form_tax_amount_pph: 0.00,
|
|
form_tax_percent_ppn: 0.00,
|
|
form_tax_amount_ppn: 0.00,
|
|
form_disc_po: 0.00,
|
|
form_disc_amount: 0.00,
|
|
form_disc_type: "R",
|
|
form_subtotal: 0.00,
|
|
form_grandtotal: 0.00,
|
|
form_note: "",
|
|
form_adjust_amount: 0.00,
|
|
form_adjust_note: "",
|
|
form_shipping_cost: 0.00,
|
|
}
|
|
context.commit("update_form_faktur", form_faktur)
|
|
context.commit("update_form_ro", {})
|
|
context.commit("update_form_item", [])
|
|
context.commit("data/update_list_po", {records: [], total: 0}, {root: true})
|
|
},
|
|
async calcSummary(context) {
|
|
try {
|
|
let item = context.state.form_item
|
|
let faktur = context.state.form_faktur
|
|
if (item.length > 0) {
|
|
let sub = 0
|
|
let podisc = 0
|
|
item.forEach(ite => {
|
|
let price = Number(ite.ReceiveOrderPoDetailPrice)
|
|
let disc = Number(ite.Discount)
|
|
let qty = Number(ite.ReceiveOrderPoDetailQty)
|
|
|
|
if (ite.PurchaseOrderSummaryDiscountType == 'P') {
|
|
disc = (price * Number(ite.Discount)) / 100
|
|
}
|
|
|
|
sub = sub + (qty * (price - disc))
|
|
podisc = podisc + Number(ite.ReceiveOrderPoDetailDiskonPoProrata)
|
|
});
|
|
|
|
let pph = (sub - podisc) * (Number(faktur.form_tax_percent_pph) / 100)
|
|
let ppn = (sub - podisc) * (Number(faktur.form_tax_percent_ppn) / 100)
|
|
|
|
let grandtotal = 0;
|
|
let dpamount = Number(faktur.dp_amount);
|
|
if (faktur.type_purchase == 'aset') {
|
|
grandtotal = (sub - podisc) + ( pph + ppn) - dpamount
|
|
grandtotal = grandtotal + Number(faktur.form_adjust_amount) + Number(faktur.form_shipping_cost)
|
|
} else {
|
|
grandtotal = (sub - podisc + pph + ppn) + Number(faktur.form_adjust_amount) + Number(faktur.form_shipping_cost)
|
|
}
|
|
|
|
|
|
|
|
// Store exact values with 2 decimal places using floor instead of rounding
|
|
// This prevents rounding errors in financial calculations
|
|
faktur.form_subtotal = sub
|
|
faktur.form_disc_amount = podisc
|
|
faktur.form_tax_amount_ppn = ppn
|
|
faktur.form_tax_amount_pph = pph
|
|
faktur.form_grandtotal = grandtotal
|
|
} else {
|
|
faktur.form_subtotal = 0.00
|
|
faktur.form_disc_amount = 0.00
|
|
faktur.form_grandtotal = 0.00
|
|
faktur.form_tax_amount_pph = 0.00
|
|
faktur.form_tax_amount_ppn = 0.00
|
|
faktur.form_adjust_amount = 0.00
|
|
faktur.form_adjust_note = ""
|
|
faktur.dp_amount = 0.00
|
|
}
|
|
|
|
context.commit("update_form_faktur", faktur)
|
|
} catch (error) {
|
|
let snacc = {isOpen: true, message: error.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
}
|
|
},
|
|
async createFaktur(context) {
|
|
try {
|
|
let item = context.state.form_item
|
|
let para_item = []
|
|
|
|
let param = {
|
|
SIPoID: context.state.form_faktur.form_po.PurchaseOrderID,
|
|
SIDate: context.state.form_faktur.form_date,
|
|
SIDueDate: context.state.form_faktur.form_duedate,
|
|
SIDraftDate: context.state.form_faktur.form_draftdate,
|
|
SISupplierID: context.state.form_faktur.form_supplier.SupplierID,
|
|
SIRefNumber: context.state.form_faktur.form_refnumber,
|
|
SISupplierInvoiceNumber: context.state.form_faktur.form_supplier_invoicenum,
|
|
SISupplierInvoiceDate: context.state.form_faktur.form_supplier_invoicedate,
|
|
SISubTotal: context.state.form_faktur.form_subtotal,
|
|
SIDiscountPercent: context.state.form_faktur.form_disc_type == 'P' ? context.state.form_faktur.form_disc_po : 0,
|
|
SIDiscountAmount: context.state.form_faktur.form_disc_amount,
|
|
SITaxPercentPph: context.state.form_faktur.form_tax_percent_pph,
|
|
SITaxAmountPph: context.state.form_faktur.form_tax_amount_pph,
|
|
SITaxPercentPpn: context.state.form_faktur.form_tax_percent_ppn,
|
|
SITaxAmountPpn: context.state.form_faktur.form_tax_amount_ppn,
|
|
SIShippingCost: context.state.form_faktur.form_shipping_cost,
|
|
SIAdjustmentAmount: context.state.form_faktur.form_adjust_amount,
|
|
SIAdjustmentNote: context.state.form_faktur.form_adjust_note,
|
|
SIGrandTotal: context.state.form_faktur.form_grandtotal,
|
|
SINote: context.state.form_faktur.form_note,
|
|
SIReceiveDate: moment(new Date()).format("YYYY-MM-DD"),
|
|
SIReceivedBy: context.state.user.M_UserID,
|
|
SIStatus: 'Draft',
|
|
SIDetail: [],
|
|
token: one_token()
|
|
}
|
|
|
|
item.forEach(ele => {
|
|
let a = {
|
|
SIDPOID: ele.ReceiveOrderPoDetailPurchaseOrderID,
|
|
SIDPOSummaryID: ele.ReceiveOrderPoDetailPurchaseOrderSummaryID,
|
|
SIDROID: ele.ReceiveOrderPoDetailReceiveOrderPoID,
|
|
SIDRODetailID: ele.ReceiveOrderPoDetailID,
|
|
SIDItemID: ele.M_ItemID,
|
|
SIDItemUnitID: ele.ReceiveOrderPoItemUnitID,
|
|
SIDDescription: ele.M_ItemDesc,
|
|
SIDQty: ele.ReceiveOrderPoDetailQty,
|
|
SIDPrice: ele.ReceiveOrderPoDetailPrice,
|
|
SIDDiscountPercent: ele.PurchaseOrderSummaryDiscountType == 'P' ? ele.Discount: 0,
|
|
SIDDiscountRupiah: ele.PurchaseOrderSummaryDiscountType == 'R' ? ele.Discount: 0,
|
|
SIDDiscountType: ele.PurchaseOrderSummaryDiscountType,
|
|
SIDDiscountAmount: ele.disc_amount,
|
|
SIDDiscountPOProrata: ele.ReceiveOrderPoDetailDiskonPoProrata,
|
|
SIDTotal: ele.subtotal
|
|
}
|
|
para_item.push(a)
|
|
});
|
|
|
|
param.SIDetail = para_item
|
|
|
|
let resp = await api.CreateFaktur(param)
|
|
if (resp.status != 'OK') {
|
|
let snacc = {isOpen: true, message: resp.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
} else {
|
|
let snacc = {isOpen: true, message: 'Success', color: "success"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
context.dispatch("data/getListFaktur", {}, {root: true})
|
|
context.commit("update_opendialog", false)
|
|
}
|
|
} catch (error) {
|
|
let snacc = {isOpen: true, message: error.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
}
|
|
},
|
|
async updateFaktur(context) {
|
|
try {
|
|
let faktur = context.state.form_faktur
|
|
let param = {
|
|
SIPoID: faktur.form_po.PurchaseOrderID,
|
|
SIDate: faktur.form_date,
|
|
SIDueDate: faktur.form_duedate,
|
|
SIDraftDate: faktur.form_draftdate,
|
|
SISupplierID: faktur.form_supplier.SupplierID,
|
|
SIRefNumber: faktur.form_refnumber,
|
|
SISupplierInvoiceNumber: faktur.form_supplier_invoicenum,
|
|
SISupplierInvoiceDate: faktur.form_supplier_invoicedate,
|
|
SISubTotal: faktur.form_subtotal,
|
|
SIDiscountPercent: faktur.form_disc_type == 'P' ? faktur.form_disc_po : 0,
|
|
SIDiscountAmount: faktur.form_disc_amount,
|
|
SITaxPercentPph: faktur.form_tax_percent_pph,
|
|
SITaxAmountPph: faktur.form_tax_amount_pph,
|
|
SITaxPercentPpn: faktur.form_tax_percent_ppn,
|
|
SITaxAmountPpn: faktur.form_tax_amount_ppn,
|
|
SIShippingCost: faktur.form_shipping_cost,
|
|
SIAdjustmentAmount: faktur.form_adjust_amount,
|
|
SIAdjustmentNote: faktur.form_adjust_note,
|
|
SIGrandTotal: faktur.form_grandtotal,
|
|
SINote: faktur.form_note,
|
|
SIStatus: 'Draft',
|
|
SIDetail: [],
|
|
fakturID: faktur.fakturID,
|
|
token: one_token()
|
|
}
|
|
|
|
let item = context.state.form_item
|
|
let detail = []
|
|
item.forEach(ele => {
|
|
let a = {
|
|
SIDPOID: ele.ReceiveOrderPoDetailPurchaseOrderID,
|
|
SIDPOSummaryID: ele.ReceiveOrderPoDetailPurchaseOrderSummaryID,
|
|
SIDROID: ele.ReceiveOrderPoDetailReceiveOrderPoID,
|
|
SIDRODetailID: ele.ReceiveOrderPoDetailID,
|
|
SIDItemID: ele.M_ItemID,
|
|
SIDItemUnitID: ele.ReceiveOrderPoItemUnitID,
|
|
SIDDescription: ele.M_ItemDesc,
|
|
SIDQty: ele.ReceiveOrderPoDetailQty,
|
|
SIDPrice: ele.ReceiveOrderPoDetailPrice,
|
|
SIDDiscountPercent: ele.PurchaseOrderSummaryDiscountType == 'P' ? ele.Discount: 0,
|
|
SIDDiscountRupiah: ele.PurchaseOrderSummaryDiscountType == 'R' ? ele.Discount: 0,
|
|
SIDDiscountType: ele.PurchaseOrderSummaryDiscountType,
|
|
SIDDiscountAmount: ele.disc_amount,
|
|
SIDDiscountPOProrata: ele.ReceiveOrderPoDetailDiskonPoProrata,
|
|
SIDTotal: ele.subtotal
|
|
}
|
|
detail.push(a)
|
|
})
|
|
param.SIDetail = detail
|
|
// console.log('param update', param)
|
|
|
|
let resp = await api.UpdateFaktur(param)
|
|
if (resp.status != 'OK') {
|
|
let snacc = {isOpen: true, message: resp.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
} else {
|
|
let snacc = {isOpen: true, message: 'Success', color: "success"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
context.dispatch("data/getListFaktur", {}, {root: true})
|
|
context.commit("update_opendialog", false)
|
|
}
|
|
} catch (error) {
|
|
let snacc = {isOpen: true, message: error.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
}
|
|
},
|
|
async deleteFaktur(context, params) {
|
|
try {
|
|
params.token = one_token()
|
|
let resp = await api.DeleteFaktur(params)
|
|
if (resp.status != 'OK') {
|
|
let snacc = {isOpen: true, message: resp.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
} else {
|
|
let snacc = {isOpen: true, message: 'Success', color: "success"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
context.dispatch("data/getListFaktur", {}, {root: true})
|
|
}
|
|
} catch (error) {
|
|
let snacc = {isOpen: true, message: error.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
}
|
|
},
|
|
async approveFaktur(context, param) {
|
|
try {
|
|
param.token = one_token()
|
|
let resp = await api.ApproveFaktur(param)
|
|
if (resp.status != 'OK') {
|
|
let snacc = {isOpen: true, message: resp.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
} else {
|
|
let snacc = {isOpen: true, message: 'Success', color: "success"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
context.dispatch("data/getListFaktur", {}, {root: true})
|
|
}
|
|
} catch (error) {
|
|
let snacc = {isOpen: true, message: error.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
}
|
|
},
|
|
async rejectFaktur(context, param) {
|
|
try {
|
|
param.token = one_token()
|
|
let resp = await api.RejectFaktur(param)
|
|
if (resp.status != 'OK') {
|
|
let snacc = {isOpen: true, message: resp.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
} else {
|
|
let snacc = {isOpen: true, message: 'Success', color: "success"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
context.dispatch("data/getListFaktur", {}, {root: true})
|
|
}
|
|
} catch (error) {
|
|
let snacc = {isOpen: true, message: error.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
}
|
|
},
|
|
async verifyFaktur(context, param) {
|
|
try {
|
|
param.token = one_token()
|
|
let resp = await api.VerifyFaktur(param)
|
|
if (resp.status != 'OK') {
|
|
let snacc = {isOpen: true, message: resp.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
} else {
|
|
let snacc = {isOpen: true, message: 'Success', color: "success"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
context.dispatch("data/getListFaktur", {}, {root: true})
|
|
}
|
|
} catch (error) {
|
|
let snacc = {isOpen: true, message: error.message, color: "error"}
|
|
context.commit("data/update_snack", snacc, {root: true})
|
|
}
|
|
}
|
|
}
|
|
}
|