feature: po pay downpayment

This commit is contained in:
2026-07-20 13:14:28 +07:00
parent dd5f0b6ab4
commit d92fb57751
64 changed files with 6166 additions and 1739 deletions

View File

@@ -1,8 +1,8 @@
const URL = "";
const URL = "/one-api/mockup/receive-item-po/ReceiveItemPOAsset";
async function request(endpoint, param) {
async function request(endpoint, params) {
try {
const resp = await axios.post(URL + endpoint, param);
const resp = await axios.post(URL + endpoint, params);
if (resp.status !== 200) {
throw new Error(resp.statusText);
}
@@ -11,10 +11,62 @@ async function request(endpoint, param) {
return {
status: "ERR",
message: e.message
};
}
}
}
export async function lookupOrderAssetReceived(param) {
return request("/lookupOrderAssetReceived", param);
export async function getListSupplier(params) {
return request("/getListSupplier", params);
}
export async function getListCabang(params) {
return request("/getListCabang", params);
}
export async function getListGudang(params) {
return request("/getListGudang", params);
}
export async function getListStaff(params) {
return request("/getListStaff", params);
}
export async function searchOrderAsset(params) {
return request("/searchOrderAsset", params);
}
export async function getListingROAsset(params) {
return request("/getListingROAsset", params);
}
export async function generatePOItemReceive(params) {
return request("/generatePOItemReceive", params);
}
export async function createReceiveOrder(params) {
return request("/createReceiveOrder", params);
}
export async function editReceiveOrder(params) {
return request("/editReceivedOrder", params);
}
export async function deleteReceiveOrder(params) {
return request("/deleteReceiveOrder", params);
}
export async function confirmReceiveOrder(params) {
return request("/confirmReceiveOrder", params);
}
export async function uploadAttachment(params) {
return request("/uploadAttachment", params)
}
export async function getListAttachment(params) {
return request("/getListAttachment", params)
}
export async function getDetailDataROAsset(params) {
return request("/getDetailDataROAsset", params)
}

View File

@@ -174,7 +174,21 @@ module.exports = {
},
SimpanAttachment() {
if (!this.loading_process) {
let formdata = new FormData();
let listfiles = this.attachFiles;
let received = this.selected_roasset;
for (let index = 0; index < listfiles.length; index++) {
const file = listfiles[index];
formdata.append('files['+index+']', file);
}
formdata.append('token', one_token());
formdata.append('ronumber', received.ReceiveOrderPoNumber);
formdata.append('contractID', received.PurchaseOrderAssetContractID);
formdata.append('roID', received.ReceiveOrderPoID);
this.$store.dispatch("roasset/uploadAttachment", formdata);
} else {
let snac = { color: 'warning', msg: 'proses sedang berjalan', state: true };
this.$store.commit("roasset/update_snackbar", snac);

View File

@@ -0,0 +1,89 @@
<template>
<v-dialog v-model="dialog_confirm" persistent width="40vw">
<v-card>
<v-card-title class="headline grey lighten-2">KONFIRMASI RECEIVE ORDER ASSET</v-card-title>
<v-card-text>
<v-layout row wrap>
<v-flex xs3 class="pr-2"><strong>Tanggal</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoIDate }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Nomor</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoNumber }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Nomor Referensi</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoRefNumber }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Supplier</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.SupplierName }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Catatan</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoNote }}</v-flex>
</v-layout>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn @click="batal()" color="error" class="white--text">Batal</v-btn>
<v-btn @click="confirmOrder()" color="primary" class="white--text">Konfirmasi</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
module.exports = {
data() {
return {
}
},
computed: {
dialog_confirm: {
get() {
return this.$store.state.roasset.dialog_confirm;
},
set(val) {
this.$store.commit("roasset/update_dialog_confirm", val);
}
},
selected_roasset: {
get() {
return this.$store.state.roasset.selected_roasset;
},
set(val) {
this.$store.commit("roasset/update_selected_roasset", val);
}
},
loading_process() {
return this.$store.state.roasset.loading_process;
},
preview_attachment() {
return this.$store.state.roasset.preview_attachment
}
},
methods: {
batal() {
this.selected_roasset = {}
this.dialog_confirm = false
},
confirmOrder() {
if (this.preview_attachment.length < 1) {
const msg = "Belum upload bukti terima";
const snac = { color: 'error', msg: msg, state: false };
this.$store.commit("roasset/update_snackbar", snac);
return;
}
if (!this.loading_process) {
const received = this.selected_roasset;
this.$store.dispatch("roasset/confirmReceiveOrder", received.ReceiveOrderPoID);
} else {
const msg = "Masih terdapat proses lain yang berjalan";
const snac = { color: 'error', msg: msg, state: false };
this.$store.commit("roasset/update_snackbar", snac);
}
}
},
watch: {}
}
</script>

View File

@@ -3,20 +3,22 @@
<v-card>
<v-card-title class="headline grey lighten-2">DELETE RECEIVE ORDER ASSET</v-card-title>
<v-card-text>
<v-flex xs3 class="pr-2"><strong>Tanggal</strong></v-flex>
<v-flex xs9>: {{ }}</v-flex>
<v-layout row wrap>
<v-flex xs3 class="pr-2"><strong>Tanggal</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoIDate }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Nomor</strong></v-flex>
<v-flex xs9>: {{ }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Nomor</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoNumber }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Nomor Referensi</strong></v-flex>
<v-flex xs9>: {{ }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Nomor Referensi</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoRefNumber }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Supplier</strong></v-flex>
<v-flex xs9>: {{ }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Supplier</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.SupplierName }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Catatan</strong></v-flex>
<v-flex xs9>: {{ }}</v-flex>
<v-flex xs3 class="pr-2"><strong>Catatan</strong></v-flex>
<v-flex xs9>: {{ selected_roasset.ReceiveOrderPoNote }}</v-flex>
</v-layout>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
@@ -38,26 +40,39 @@ module.exports = {
computed: {
dialog_delete: {
get() {
return this.$store.state.roasset.dialog_delete
return this.$store.state.roasset.dialog_delete;
},
set(val) {
this.$store.commit("roasset/update_dialog_delete", val)
this.$store.commit("roasset/update_dialog_delete", val);
}
},
selected_roasset: {
get() {
return this.$store.state.roasset.selected_roasset
return this.$store.state.roasset.selected_roasset;
},
set(val) {
this.$store.commit("roasset/update_selected_roasset", val)
this.$store.commit("roasset/update_selected_roasset", val);
}
},
loading_process() {
return this.$store.state.roasset.loading_process;
}
},
methods: {
batalDelete() {
this.selected_roasset = {}
this.dialog_delete = false
},
confirmDelete() { }
confirmDelete() {
if (!this.loading_process) {
const received = this.selected_roasset;
this.$store.dispatch("roasset/deleteReceiveAsset", received.ReceiveOrderPoID);
} else {
const msg = "Masih terdapat proses lain yang berjalan";
const snac = { color: 'error', msg: msg, state: false };
this.$store.commit("roasset/update_snackbar", snac);
}
}
},
watch: {}
}

View File

@@ -0,0 +1,185 @@
<template>
<v-dialog v-model="dialog_inspeksi" persistent width="40vw">
<v-card>
<v-card-title class="headline grey lighten-2" primary-title>
FORM INSPEKSI ASET {{ selected_item_received.M_ItemDesc }}
</v-card-title>
<v-card-text>
<v-layout row>
<v-flex xs6 pr-1>
<v-text-field label="Jumlah Pesan" type="number" min="0" hide-details
v-model="form_inspeksi.qty_po" outline step="1"></v-text-field>
</v-flex>
<v-flex xs6 pl-1>
<v-text-field label="Jumlah Actual" type="number" min="0" hide-details
v-model="form_inspeksi.qty_ro" outline step="1"></v-text-field>
</v-flex>
</v-layout>
<v-layout row mt-2>
<v-flex xs6 pr-1>
<v-menu v-model="menuDatePo" lazy offset-y max-width="290px" full-width
transition="scale-transition" min-width="290px" :nudge-right="40"
:close-on-content-click="false">
<template v-slot:activator="{ on }">
<v-text-field :value="form_inspeksi.date_po" v-on="on" readonly
label="Tanggal Terima Pesan" outline hide-details></v-text-field>
</template>
<v-date-picker v-model="form_inspeksi.date_po" no-title
@input="menuDatePo = false"></v-date-picker>
</v-menu>
</v-flex>
<v-flex xs6 pl-1>
<v-menu v-model="menuDateRo" lazy offset-y max-width="290px" full-width
transition="scale-transition" min-width="290px" :nudge-right="40"
:close-on-content-click="false">
<template v-slot:activator="{ on }">
<v-text-field :value="form_inspeksi.date_ro" v-on="on" readonly
label="Tanggal Terima Actual" outline hide-details></v-text-field>
</template>
<v-date-picker v-model="form_inspeksi.date_ro" no-title
@input="menuDateRo = false"></v-date-picker>
</v-menu>
</v-flex>
</v-layout>
<v-layout row mt-2 wrap>
<v-flex xs12>
<v-radio-group v-model="form_inspeksi.condt_kemasan" label="Kondisi Kemasan" row hide-details>
<v-radio label="Baik" value="1"></v-radio>
<v-radio label="Tidak Baik" value="2"></v-radio>
</v-radio-group>
<v-text-field v-if="form_inspeksi.condt_kemasan == '2'" class="mt-2" label="Catatan Kemasan"
outline hide-details v-model="form_inspeksi.catatan_kemasan"></v-text-field>
</v-flex>
<v-flex xs12 mt-2>
<v-radio-group v-model="form_inspeksi.condt_pengiriman" label="Kondisi Pengiriman" row
hide-details>
<v-radio label="Sesuai" value="1"></v-radio>
<v-radio label="Tidak Sesuai" value="2"></v-radio>
</v-radio-group>
<v-text-field v-if="form_inspeksi.condt_pengiriman == '2'" class="mt-2" outline
label="Catatan Pengiriman" hide-details
v-model="form_inspeksi.catatan_kirim"></v-text-field>
</v-flex>
<v-flex xs12 mt-2>
<v-radio-group v-model="form_inspeksi.summary" row label="Kesimpulan" hide-details>
<v-radio label="Diterima" value="accept"></v-radio>
<v-radio label="Ditolak" value="reject"></v-radio>
<v-radio label="Diterima dengan Catatan" value="acceptnote"></v-radio>
</v-radio-group>
</v-flex>
<v-flex xs12 mt-2>
<v-textarea v-if="
form_inspeksi.summary == 'reject' ||
form_inspeksi.summary == 'acceptnote'
" v-model="form_inspeksi.catatan" outline auto-grow rows="1" label="Catatan"
hide-details></v-textarea>
</v-flex>
</v-layout>
<v-layout row mt-2>
<v-flex xs6 pr-1>
<v-autocomplete label="Staff Penerima" outline hide-details v-model="form_inspeksi.pemeriksa"
:items="list_staff" item-text="M_UserUsername" item-value="M_UserID"></v-autocomplete>
</v-flex>
<v-flex xs6 pl-1>
<v-text-field label="Petugas Pengirim" outline hide-details
v-model="form_inspeksi.pengirim"></v-text-field>
</v-flex>
</v-layout>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="red" flat outline @click="closeInspeksi()">Tutup</v-btn>
<v-btn color="green" flat outline @click="simpanInspeksi()">Simpan</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
module.exports = {
data() {
return {
menuDatePo: false,
menuDateRo: false
};
},
computed: {
dialog_inspeksi: {
get() {
return this.$store.state.orderAsset.dialog_inspeksi;
},
set(val) {
this.$store.commit("orderAsset/update_dialog_inspeksi", val);
}
},
form_inspeksi: {
get() {
return this.$store.state.orderAsset.form_inspeksi;
},
set(val) {
this.$store.commit("orderAsset/update_form_inspeksi", val);
}
},
selected_item_received: {
get() {
return this.$store.state.orderAsset.selected_item_received;
},
set(val) {
this.$store.commit("orderAsset/update_selected_item_received", val);
}
},
order_received: {
get() {
return this.$store.state.orderAsset.order_received;
},
set(val) {
this.$store.commit("orderAsset/update_order_received", val);
}
},
list_staff() {
return this.$store.state.orderAsset.list_staff;
}
},
methods: {
defaultFormInspeksi() {
return {
qty_po: 0,
qty_ro: 0,
date_po: moment(new Date()).format("YYYY-MM-DD"),
date_ro: moment(new Date()).format("YYYY-MM-DD"),
condt_kemasan: "",
catatan_kemasan: "",
condt_pengiriman: "",
catatan_kirim: "",
summary: "",
catatan: "",
pemeriksa: "",
pengirim: ""
};
},
closeInspeksi() {
this.form_inspeksi = this.defaultFormInspeksi();
this.selected_item_received = {};
this.dialog_inspeksi = false;
},
simpanInspeksi() {
const dataInspeksi = JSON.parse(JSON.stringify(this.form_inspeksi));
const selectedItem = JSON.parse(JSON.stringify(this.selected_item_received));
const listOrder = JSON.parse(JSON.stringify(this.order_received));
const idxToUpdate = listOrder.findIndex((obj) => obj.PODetailID == selectedItem.PODetailID);
if (idxToUpdate != -1) {
listOrder[idxToUpdate].inspeksi = dataInspeksi;
}
this.order_received = listOrder;
this.closeInspeksi();
}
}
};
</script>

View File

@@ -1,61 +1,153 @@
<template>
<v-dialog v-model="dialog_pick_contract" persistent width="50vw">
<v-card>
<v-card-title class="headline grey lighten-2">PILIH KONTRAK ORDER ASET</v-card-title>
<v-card-text>
<v-dialog v-model="dialog_pick_contract" persistent width="60vw">
<v-card class="style-limit-heightcard">
<v-card-title class="headline grey lighten-2">PILIH ORDER ASET</v-card-title>
<v-card-text class="style-limit-heightcontent">
<v-layout row wrap>
<v-flex xs12>
<v-autocomplete :items="[]" :loading="loading" hide-no-data cache-items outline
:search-input.sync="searchkey" label="Kontrak Order Aset" return-object
v-model="temp_selected" hide-details></v-autocomplete>
<v-autocomplete
v-model="temp_selected" :loading="loading" hide-details
:items="list_item_order" hide-no-data outline
:search-input.sync="searchkey" cache-items clearable
label="Cari" placeholder="Nama Kontrak, nomor PO"
:item-text="formatOrderLabel" return-object
></v-autocomplete>
</v-flex>
<v-flex xs12 mt-2>
<v-data-table :headers="headers" :items="[]" class="elevation-1" hide-actions>
<v-data-table :headers="headers" class="elevation-1" hide-actions
:items="temp_selected ? [temp_selected] : []"
:expand="expand" item-key="PurchaseOrderID">
<template v-slot:items="props">
<tr>
<td class="text-xs-start pa-2">
{{ }}
<tr @click="props.expanded = !props.expanded">
<td class="text-xs-center pa-2">
<v-icon>{{ props.expanded
? "keyboard_arrow_down"
: "keyboard_arrow_right"
}}</v-icon>
</td>
<td class="text-xs-start pa-2">
{{ }}
{{ props.item.PurchaseOrderNumber }}
</td>
<td class="text-xs-start pa-2">
{{ }}
{{ props.item.PurchaseOrderAssetContractDate }}
</td>
<td class="text-xs-start pa-2">
{{ props.item.PurchaseOrderAssetContractName }}
</td>
<td class="text-xs-start pa-2">
{{ props.item.SupplierCode }} <br>
{{ props.item.SupplierName }}
</td>
<td class="text-xs-start pa-2">
{{ props.item.PurchaseOrderNote }}
</td>
</tr>
</template>
<template v-slot:expand="props">
<v-card flat>
<v-card-text>
<v-data-table
:headers="b_headers" class="elevation-0"
:items="props.item.detail" hide-actions
>
<template v-slot:items="expnd">
<tr>
<td class="text-xs-center pa-2">
{{ expnd.item.M_ItemCode }}
</td>
<td class="text-xs-center pa-2">
{{ expnd.item.M_ItemDesc }}
</td>
<td class="text-xs-center pa-2">
{{ expnd.item.ItemUnitName }}
</td>
<td class="text-xs-center pa-2">
{{ expnd.item.qty }}
</td>
</tr>
</template>
</v-data-table>
</v-card-text>
</v-card>
</template>
</v-data-table>
</v-flex>
</v-layout>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn @click="cancelPickContract()" color="error" class="white--text">Batal</v-btn>
<v-btn @click="pickContractOrder()" color="primary" class="white--text">Simpan</v-btn>
<v-btn @click="batalItemOrder()" color="error" class="white--text">Batal</v-btn>
<v-btn @click="simpanItemOrder()" color="primary" class="white--text">Simpan</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<style scoped>
.style-limit-heightcard {
max-height: 60vh;
display: flex;
flex-direction: column;
}
.style-limit-heightcontent {
overflow-y: auto;
flex: 1 1 auto;
min-height: 0;
}
</style>
<script>
module.exports = {
data() {
return {
searchkey: "",
loading: false,
expand: false,
temp_selected: null,
headers: [
{
text: "ITEM", align: "center", sortable: false, value: "date",
width: "60%", class: "pa-1 blue lighten-3 white--text",
text: " ", align: "center", sortable: false, value: "check",
width: "5%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "UNIT", align: "center", sortable: false, value: "date",
text: "NO PURCHASE ORDER", align: "center", sortable: false, value: "po",
width: "25%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "TANGGAL KONTRAK", align: "center", sortable: false, value: "date",
width: "15%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "NAMA KONTRAK", align: "center", sortable: false, value: "date",
width: "15%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "SUPPLIER", align: "center", sortable: false, value: "unit",
width: "20%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "SATUAN", align: "center", sortable: false, value: "date",
text: "CATATAN", align: "center", sortable: false, value: "qty",
width: "20%", class: "pa-1 blue lighten-3 white--text",
}
],
b_headers: [
{
text: "ITEM CODE", align: "center", sortable: false,
value: "code", width: "25%", class: "pa-1 blue lighten-4 black--text",
},
{
text: "ITEM", align: "center", sortable: false,
value: "item", width: "25%", class: "pa-1 blue lighten-4 black--text",
},
{
text: "UNIT", align: "center", sortable: false,
value: "unit", width: "25%", class: "pa-1 blue lighten-4 black--text",
},
{
text: "QTY", align: "center", sortable: false,
value: "qty", width: "25%", class: "pa-1 blue lighten-4 black--text",
},
]
}
@@ -63,19 +155,79 @@ module.exports = {
computed: {
dialog_pick_contract: {
get() {
return this.$store.state.roasset.dialog_pick_contract;
return this.$store.state.orderAsset.dialog_pick_contract;
},
set(val) {
this.$store.commit("roasset/update_dialog_pick_contract", val);
this.$store.commit("orderAsset/update_dialog_pick_contract", val);
}
}
},
list_item_order: {
get() {
return this.$store.state.orderAsset.list_item_order;
},
set(val) {
this.$store.commit("orderAsset/update_list_item_order", val);
}
},
form_receive: {
get() {
return this.$store.state.orderAsset.form_receive
},
set(val) {
this.$store.commit("orderAsset/update_form_receive", val)
}
},
order_received: {
get() {
return this.$store.state.orderAsset.order_received
},
set(val) {
this.$store.commit("orderAsset/update_order_received", val)
}
},
},
methods: {
cancelPickContract() {
formatOrderLabel(item) {
if (!item) return "";
return `${item.PurchaseOrderNumber} - ${item.PurchaseOrderAssetContractName}`;
},
cariOrderAsset(newval) {
this.loading = true;
setTimeout(() => {
this.$store.dispatch("orderAsset/searchOrderAsset", newval);
this.loading = false;
}, 500);
},
batalItemOrder() {
this.temp_selected = null;
this.dialog_pick_contract = false;
},
pickContractOrder() { }
simpanItemOrder() {
let form = JSON.parse(JSON.stringify(this.form_receive));
const receivedOrder = JSON.parse(JSON.stringify(this.temp_selected));
form.ponumber = receivedOrder.PurchaseOrderNumber;
form.shipping = receivedOrder.PurchaseOrderShippingCost;
form.shippingIsPaid = receivedOrder.PurchaseOrderShippingCostStatus
this.form_receive = form;
this.order_received = receivedOrder.detail;
this.temp_selected = null;
this.dialog_pick_contract = false;
}
},
watch: {}
watch: {
searchkey(newval, oldval) {
if (newval == oldval) return;
if (!newval) {
this.cariOrderAsset("");
return;
}
if (newval.length < 1) return;
this.cariOrderAsset(newval);
}
}
}
</script>

View File

@@ -1,77 +1,128 @@
<template>
<v-dialog v-model="dialog_receive_aset" persistent width="70vw">
<v-card>
<v-card class="style-limit-heightcard">
<v-card-title class="headline grey lighten-2">FORM TERIMA ASET</v-card-title>
<v-card-text style="max-height: 80vh; overflow-y: auto;">
<v-card-text class="style-limit-heightcontent">
<v-layout row wrap>
<v-flex xs4>
<v-flex xs4 pa-1>
<v-menu offset-y lazy min-width="290px" transition="scale-transition" max-width="290px"
v-model="menuROdate" full-width :nudge-right="40" :close-on-content-click="false">
<template v-slot:activator="{ on }">
<v-text-field label="Tanggal RO" hide-details readonly v-on="on" outline
v-model="formattedRODate"></v-text-field>
</template>
<v-date-picker no-title @input="menuROdate = false"
<v-date-picker no-title @input="menuROdate = false" :readonly="readonly_mode"
v-model="form_receive.date"></v-date-picker>
</v-menu>
</v-flex>
<v-flex xs4 pl-2>
<v-autocomplete :items="[]" hide-details outline label="Vendor" v-model="form_receive.supplier"
item-text="SupplierName" item-value="SupplierID" @input=""></v-autocomplete>
<v-flex xs4 pa-1>
<v-autocomplete :items="list_supplier" hide-details outline label="Vendor"
v-model="form_receive.supplier" item-text="SupplierName" :readonly="readonly_mode"
item-value="SupplierID"></v-autocomplete>
</v-flex>
<v-flex xs4 pl-2>
<v-flex xs4 pa-1>
<v-text-field hide-details outline placeholder="Nomor Delivery / Supplier Invoice"
v-model="form_receive.reference" label="Referensi"></v-text-field>
v-model="form_receive.reference" label="Referensi" :readonly="readonly_mode"
></v-text-field>
</v-flex>
</v-layout>
<v-layout row wrap class="mt-2">
<v-flex xs2>
<v-layout row wrap>
<v-flex xs4 pa-1>
<v-text-field hide-details outline label="No PO" placeholder="nomor po"
v-model="form_receive.ponumber" readonly></v-text-field>
</v-flex>
<v-flex xs2 pl-2>
<v-text-field hide-details outline label="Total Tagihan" placeholder="0"
v-model="form_receive.totalbill" readonly></v-text-field>
<v-flex xs2 pa-1>
<v-autocomplete
:items="list_cabang" hide-details outline
v-model="form_receive.branchID" label="Cabang"
item-text="M_BranchName" item-value="M_BranchID"
@change="onChangeCabang" :readonly="readonly_mode"
></v-autocomplete>
</v-flex>
<v-flex xs2 pl-2>
<v-text-field hide-details outline label="Uang Muka" placeholder="0"
v-model="form_receive.downpayment" readonly></v-text-field>
<v-flex xs2 pa-1>
<v-autocomplete
:items="list_gudang" hide-details outline
v-model="form_receive.gudangID" label="Gudang"
item-text="WarehouseName" item-value="WarehouseID"
:readonly="readonly_mode"
></v-autocomplete>
</v-flex>
<v-flex xs2 pl-2>
<v-text-field hide-details outline label="Cicilan" placeholder="0"
v-model="form_receive.cicilan" readonly></v-text-field>
</v-flex>
<v-flex xs2 pl-2>
<v-text-field hide-details outline label="Lama Kontrak (bulan)" placeholder="0"
v-model="form_receive.contractlength" readonly></v-text-field>
</v-flex>
<v-flex xs2 pl-2>
<v-text-field hide-details outline label="Tanggal Bayar" placeholder="0"
v-model="form_receive.datepayment" readonly></v-text-field>
<v-flex xs4 pa-1>
<v-text-field hide-details outline label="Biaya Pengiriman" placeholder="0"
v-model="form_receive.shipping" :readonly="readonly_mode"></v-text-field>
</v-flex>
</v-layout>
<v-layout row wrap class="mt-2">
<v-flex xs12>
<v-layout row wrap>
<v-flex xs12 pa-1>
<v-textarea auto-grow rows="1" outline label="Catatan" hide-details
v-model="form_receive.catatan"></v-textarea>
v-model="form_receive.catatan" :readonly="readonly_mode"></v-textarea>
</v-flex>
<v-flex xs3 mt-2>
<!-- :disabled="form_receive.supplier == ''" -->
<v-btn block color="info" @click="pickKontrakAset()">
PILIH KONTRAK
<v-flex xs3 pa-1 mt-1>
<v-btn block color="info" @click="pickKontrakAset()"
:disabled="isFormEmpty()" v-show="!readonly_mode">
PILIH ORDER ASSET
</v-btn>
</v-flex>
</v-layout>
<v-layout row wrap class="mt-3">
<!-- <v-flex xs12 v-if="item_receive.length > 0"> -->
<v-flex xs12>
<v-data-table :headers="headers" :items="[]" class="elevation-1" hide-actions>
<v-flex xs12 v-if="order_received.length > 0">
<v-data-table :headers="headers" :items="order_received"
item-key="PODetailID" class="elevation-1" hide-actions>
<template v-slot:items="props">
<tr>
<td></td>
<td class="text-xs-center pa-1">
<v-chip label small>{{ props.item.M_ItemCode }}</v-chip> <br>
{{ props.item.M_ItemDesc }}
</td>
<td class="text-xs-center pa-1">
{{ props.item.qty }}
</td>
<td class="text-xs-center pa-1">
{{ props.item.ItemUnitName }}
</td>
<td class="text-xs-center pa-1">
<div v-if="props.item.inspeksi">
<p v-if="props.item.inspeksi.summary == 'accept'" class="mb-0">
Diterima
</p>
<p v-else-if="props.item.inspeksi.summary == 'reject'" class="mb-0">
Ditolak <br>
{{ props.item.inspeksi.catatan }}
</p>
<p v-else class="mb-0">
Diterima dengan catatan <br>
{{ props.item.inspeksi.catatan }}
</p>
</div>
</td>
<td class="text-xs-center pa-1">
<v-tooltip bottom pr-2>
<template v-slot:activator="{ on }">
<v-btn
color="green" dark @click="openInspeksi(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on"
>
<v-icon small>note_add</v-icon>
</v-btn>
</template>
<span>Inspeksi Jasa</span>
</v-tooltip>
<v-tooltip bottom v-show="!readonly_mode">
<template v-slot:activator="{ on }">
<v-btn
color="warning" dark @click="cancelOrder(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on"
>
<v-icon small>cancel</v-icon>
</v-btn>
</template>
<span>Batal Order</span>
</v-tooltip>
</td>
</tr>
</template>
</v-data-table>
@@ -80,13 +131,27 @@
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn @click="dialog_receive_aset = false" color="error" class="white--text">Batal</v-btn>
<v-btn color="primary" class="white--text">Simpan</v-btn>
<v-btn @click="batalReceiveOrder()" color="error" class="white--text">Batal</v-btn>
<v-btn :disabled="readonly_mode" @click="simpanReceivedOrder()" color="primary" class="white--text">Simpan</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<style scoped>
.style-limit-heightcard {
max-height: 60vh;
display: flex;
flex-direction: column;
}
.style-limit-heightcontent {
overflow-y: auto;
flex: 1 1 auto;
min-height: 0;
}
</style>
<script>
module.exports = {
data() {
@@ -94,24 +159,24 @@ module.exports = {
menuROdate: false,
headers: [
{
text: "ITEM", align: "center", sortable: false,
value: "nopo", width: "40%", class: "pa-1 blue lighten-3 white--text",
text: "ITEM", align: "center", sortable: false, value: "item",
width: "40%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "QTY", align: "center", sortable: false,
value: "type", width: "10%", class: "pa-1 blue lighten-3 white--text",
text: "QTY", align: "center", sortable: false, value: "qty",
width: "10%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "UNIT ITEM", align: "center", sortable: false,
value: "item", width: "15%", class: "pa-1 blue lighten-3 white--text",
text: "UNIT ITEM", align: "center", sortable: false, value: "unit",
width: "15%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "INSPEKSI", align: "center", sortable: false,
value: "inspec", width: "20%", class: "pa-1 blue lighten-3 white--text",
text: "INSPEKSI", align: "center", sortable: false, value: "inspec",
width: "20%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "AKSI", align: "center", sortable: false,
value: "act", width: "15%", class: "pa-1 blue lighten-3 white--text",
text: "AKSI", align: "center", sortable: false, value: "act",
width: "15%", class: "pa-1 blue lighten-3 white--text",
},
]
}
@@ -119,30 +184,45 @@ module.exports = {
computed: {
dialog_receive_aset: {
get() {
return this.$store.state.roasset.dialog_receive_aset
return this.$store.state.orderAsset.dialog_receive_aset
},
set(val) {
this.$store.commit("roasset/update_dialog_receive_aset", val)
this.$store.commit("orderAsset/update_dialog_receive_aset", val)
}
},
form_receive: {
get() {
return this.$store.state.roasset.form_receive
return this.$store.state.orderAsset.form_receive
},
set(val) {
this.$store.commit("roasset/update_form_receive", val)
this.$store.commit("orderAsset/update_form_receive", val)
}
},
item_receive: {
order_received: {
get() {
return this.$store.state.roasset.item_receive
return this.$store.state.orderAsset.order_received
},
set(val) {
this.$store.commit("roasset/update_item_receive", val)
this.$store.commit("orderAsset/update_order_received", val)
}
},
readonly_mode() {
return this.$store.state.orderAsset.readonly_mode
},
formattedRODate() {
return this.formatDate(this.form_receive.date)
return this.formatDate(this.form_receive.date);
},
list_cabang() {
return this.$store.state.orderAsset.list_cabang;
},
list_gudang() {
return this.$store.state.orderAsset.list_gudang;
},
list_supplier() {
return this.$store.state.orderAsset.list_supplier;
},
loading_process() {
return this.$store.state.roasset.loading_process;
}
},
methods: {
@@ -151,8 +231,107 @@ module.exports = {
const [year, month, day] = date.split('-');
return `${day}-${month}-${year}`;
},
formatCurrency(value) {
const num = parseFloat(value);
if (isNaN(num)) return 0;
return num.toFixed(2).replace('.', ',').replace(/\B(?=(\d{3})+(?!\d))/g, ".");
},
onChangeCabang(branchID) {
if (!branchID) return;
this.$store.dispatch("orderAsset/listingGudang", branchID);
},
isFormEmpty() {
const form = this.form_receive;
if (form.supplier == "" || form.gudangID == "") return true;
return false;
},
pickKontrakAset() {
this.$store.commit("roasset/update_dialog_pick_contract", true);
this.$store.dispatch("orderAsset/searchOrderAsset", "");
this.$store.commit("orderAsset/update_dialog_pick_contract", true);
},
openInspeksi(item) {
const selectedItem = JSON.parse(JSON.stringify(item));
const formInspeksi = item.inspeksi
? JSON.parse(JSON.stringify(item.inspeksi))
: {
qty_po: item.qty || 0,
qty_ro: item.qty || 0,
date_po: moment(new Date()).format("YYYY-MM-DD"),
date_ro: moment(new Date()).format("YYYY-MM-DD"),
condt_kemasan: "",
catatan_kemasan: "",
condt_pengiriman: "",
catatan_kirim: "",
summary: "",
catatan: "",
pemeriksa: "",
pengirim: ""
};
this.$store.dispatch("orderAsset/listingStaff");
this.$store.commit("orderAsset/update_selected_item_received", selectedItem);
this.$store.commit("orderAsset/update_form_inspeksi", formInspeksi);
this.$store.commit("orderAsset/update_dialog_inspeksi", true);
},
cancelOrder(item) {
const current = JSON.parse(JSON.stringify(this.order_received));
const neworder = current.filter((obj) => obj.PODetailID != item.PODetailID);
this.order_received = neworder;
},
simpanReceivedOrder() {
if (this.order_received.length <= 0) {
let snac = {color: 'warning', msg: "item tidak boleh kosong", state: true}
this.$store.commit("roasset/update_snackbar", snac)
return;
}
if (!this.loading_process) {
if (!this.form_receive.ReceiveOrderPoID) {
this.$store.dispatch("orderAsset/createReceiveOrder");
} else {
this.$store.dispatch("orderAsset/editReceiveOrder");
}
} else {
let snac = {color: 'warning', msg: "proses masih berjalan", state: true}
this.$store.commit("roasset/update_snackbar", snac)
}
},
batalReceiveOrder() {
const formReceive = {
date: moment(new Date()).format("YYYY-MM-DD"),
supplier: "",
reference: "",
ponumber: "",
branchID: "",
gudangID: "",
shipping: 0,
shippingIsPaid: "N",
catatan: ""
};
const formInspeksi = {
qty_po: 0,
qty_ro: 0,
date_po: moment(new Date()).format("YYYY-MM-DD"),
date_ro: moment(new Date()).format("YYYY-MM-DD"),
condt_kemasan: "",
catatan_kemasan: "",
condt_pengiriman: "",
catatan_kirim: "",
summary: "",
catatan: "",
pemeriksa: "",
pengirim: ""
};
this.$store.commit("orderAsset/update_form_receive", formReceive);
this.$store.commit("orderAsset/update_order_received", []);
this.$store.commit("orderAsset/update_list_item_order", []);
this.$store.commit("orderAsset/update_selected_item_received", {});
this.$store.commit("orderAsset/update_form_inspeksi", formInspeksi);
this.$store.commit("orderAsset/update_readonly_mode", false)
this.dialog_receive_aset = false;
}
}
}

View File

@@ -48,40 +48,91 @@
<template v-slot:items="props">
<tr>
<td class="text-xs-center pa-2">
{{ props.item.date }}
{{ props.item.ReceiveOrderPoIDate }}
</td>
<td class="text-xs-center pa-2">
{{ props.item.receiveordernumber }} <br>
{{ props.item.purchaseordernumber }}
{{ props.item.ReceiveOrderPoNumber }} <br>
{{ props.item.PurchaseOrderNumber }}
</td>
<td class="text-xs-center pa-2">
{{ props.item.suppliername }}
</td>
<td class="text-xs-start pa-2">
<v-layout row wrap>
<v-flex xs6>
Total tagihan : {{ props.item.totaltagihan }} <br>
Besar uang muka : {{ props.item.uangmuka }} <br>
</v-flex>
<v-flex xs6 pl-2>
Status cicilan : {{ props.item.cicilanterbayar }} / {{ props.item.numbercicilan }} <br>
Besar cicilan : {{ props.item.besarcicilan }} <br>
</v-flex>
</v-layout>
{{ props.item.SupplierName }}
</td>
<td class="text-xs-center pa-2">
{{ props.item.status }}
{{ props.item.ReceiveOrderPoNote }}
</td>
<td class="text-xs-center pa-2">
<v-tooltip bottom pr-2>
<template v-slot:activator="{ on }">
<v-btn color="green" dark @click="uploadAttachment(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on">
<v-icon small>attachment</v-icon>
</v-btn>
</template>
<span>Upload Bukti</span>
</v-tooltip>
<div v-if="props.item.ReceiveOrderPoConfirmed == 'Y'">
<v-chip small color="primary" text-color="white">Confirmed</v-chip>
</div>
<div v-else>
<v-chip small color="warning" text-color="white">Unconfirmed</v-chip>
</div>
</td>
<td class="text-xs-center pa-2">
<div v-show="props.item.ReceiveOrderPoConfirmed != 'Y'">
<v-tooltip bottom pr-2>
<template v-slot:activator="{ on }">
<v-btn color="green" dark @click="uploadAttachment(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on">
<v-icon small>attachment</v-icon>
</v-btn>
</template>
<span>Upload Bukti</span>
</v-tooltip>
<v-tooltip bottom pr-2>
<template v-slot:activator="{ on }">
<v-btn
color="warning" dark @click="confirmRO(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on"
>
<v-icon small>send</v-icon>
</v-btn>
</template>
<span>Konfirmasi Receive</span>
</v-tooltip>
<v-tooltip bottom pr-2>
<template v-slot:activator="{ on }">
<v-btn
color="info" dark @click="editRO(props.item)" v-on="on"
style="min-width: 40px; margin: 0;" small
>
<v-icon small>edit</v-icon>
</v-btn>
</template>
<span>Edit Receive</span>
</v-tooltip>
<v-tooltip bottom>
<template v-slot:activator="{ on }">
<v-btn
color="red" dark @click="deleteRO(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on"
>
<v-icon small>delete</v-icon>
</v-btn>
</template>
<span>Hapus Receive</span>
</v-tooltip>
</div>
<div v-show="props.item.ReceiveOrderPoConfirmed == 'Y'">
<v-tooltip bottom pr-2>
<template v-slot:activator="{ on }">
<v-btn color="info" dark @click="viewDetail(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on">
<v-icon small>visibility</v-icon>
</v-btn>
</template>
<span>View Detail</span>
</v-tooltip>
<v-tooltip bottom pr-2>
<template v-slot:activator="{ on }">
<v-btn color="green" dark @click="uploadAttachment(props.item)"
style="min-width: 40px; margin: 0;" small v-on="on">
<v-icon small>attach_file</v-icon>
</v-btn>
</template>
<span>View Document</span>
</v-tooltip>
</div>
</td>
</tr>
</template>
@@ -100,7 +151,9 @@
<dialog-receive-aset></dialog-receive-aset>
<dialog-add-attachment></dialog-add-attachment>
<dialog-delete-order-asset></dialog-delete-order-asset>
<dialog-confirm-order-asset></dialog-confirm-order-asset>
<dialog-pick-contract></dialog-pick-contract>
<dialog-inspeksi></dialog-inspeksi>
</div>
</template>
@@ -110,10 +163,14 @@ module.exports = {
'dialog-receive-aset': httpVueLoader('./dialog-receive-order-asset.vue'),
'dialog-add-attachment': httpVueLoader('./dialog-add-attachment.vue'),
'dialog-delete-order-asset': httpVueLoader('./dialog-delete-order-asset.vue'),
'dialog-confirm-order-asset': httpVueLoader('./dialog-confirm-receive.vue'),
'dialog-pick-contract': httpVueLoader('./dialog-pick-contract.vue'),
'dialog-inspeksi': httpVueLoader('./dialog-inspeksi.vue'),
},
mounted() {
this.$store.dispatch("roasset/lookupOrderAssetReceived")
this.$store.dispatch("orderAsset/listingCabang");
this.$store.dispatch("orderAsset/listingSupplier");
this.$store.dispatch("roasset/lookupOrderAssetReceived");
},
data() {
return {
@@ -133,7 +190,7 @@ module.exports = {
width: "15%", class: "pa-1 blue lighten-3 white--text",
},
{
text: "INFO", align: "center", sortable: false, value: "note",
text: "CATATAN", align: "center", sortable: false, value: "note",
width: "25%", class: "pa-1 blue lighten-3 white--text",
},
{
@@ -170,6 +227,7 @@ module.exports = {
},
set(val) {
this.$store.commit("roasset/update_currpage", val)
this.$store.dispatch("roasset/lookupOrderAssetReceived")
}
},
list_status() {
@@ -197,11 +255,43 @@ module.exports = {
return `${day}-${month}-${year}`;
},
openDialogReceive() {
this.$store.commit("roasset/update_dialog_receive_aset", true)
this.$store.commit("orderAsset/update_dialog_receive_aset", true)
},
uploadAttachment(item) {
this.$store.commit("roasset/update_selected_roasset", item)
this.$store.dispatch("roasset/lookupAttachment", item.ReceiveOrderPoID);
this.$store.commit("roasset/update_selected_roasset", item);
this.$store.commit("roasset/update_dialog_attachment", true);
},
editRO(item) {
this.$store.dispatch("roasset/getDetailDataROAsset", item.ReceiveOrderPoID)
this.$store.commit("roasset/update_selected_roasset", item)
this.$store.commit("orderAsset/update_dialog_receive_aset", true)
},
viewDetail(item) {
this.$store.dispatch("roasset/getDetailDataROAsset", item.ReceiveOrderPoID)
this.$store.commit("roasset/update_selected_roasset", item)
this.$store.commit("orderAsset/update_readonly_mode", true)
this.$store.commit("orderAsset/update_dialog_receive_aset", true)
},
confirmRO(item) {
this.$store.dispatch("roasset/lookupAttachment", item.ReceiveOrderPoID);
this.$store.commit("roasset/update_selected_roasset", item)
this.$store.commit("roasset/update_dialog_confirm", true)
},
deleteRO(item) {
this.$store.commit("roasset/update_selected_roasset", item)
this.$store.commit("roasset/update_dialog_delete", true);
}
},
watch: {
filterasset: {
handler(val) {
setTimeout(() => {
this.$store.dispatch("roasset/lookupOrderAssetReceived")
}, 500)
},
deep: true
}
}
}

View File

@@ -0,0 +1,223 @@
import * as api from "../api/api.js";
export default {
namespaced: true,
state: {
dialog_receive_aset: false,
readonly_mode: false,
form_receive: {
date: moment(new Date()).format('YYYY-MM-DD'),
supplier: "",
reference: "",
ponumber: "",
branchID: "",
gudangID: "",
shipping: 0,
shippingIsPaid: "N",
catatan: ""
},
list_cabang: [],
list_gudang: [],
list_supplier: [],
order_received: [],
dialog_pick_contract: false,
list_item_order: [],
dialog_inspeksi: false,
list_staff: [],
selected_item_received: {},
form_inspeksi: {
qty_po: 0,
qty_ro: 0,
date_po: moment(new Date()).format('YYYY-MM-DD'),
date_ro: moment(new Date()).format('YYYY-MM-DD'),
condt_kemasan: '',
catatan_kemasan: '',
condt_pengiriman: '',
catatan_kirim: '',
summary: '',
catatan: '',
pemeriksa: '',
pengirim: ''
}
},
mutations: {
update_dialog_receive_aset(state, val) {
state.dialog_receive_aset = val
},
update_readonly_mode(state, val) {
state.readonly_mode = val
},
update_form_receive(state, val) {
state.form_receive = val
},
update_list_cabang(state, val) {
state.list_cabang = val
},
update_list_gudang(state, val) {
state.list_gudang = val
},
update_list_supplier(state, val) {
state.list_supplier = val
},
update_order_received(state, val) {
state.order_received = val
},
update_dialog_pick_contract(state, val) {
state.dialog_pick_contract = val
},
update_list_item_order(state, val) {
state.list_item_order = val
},
update_dialog_inspeksi(state, val) {
state.dialog_inspeksi = val
},
update_list_staff(state, val) {
state.list_staff = val
},
update_selected_item_received(state, val) {
state.selected_item_received = val
},
update_form_inspeksi(state, val) {
state.form_inspeksi = val
}
},
actions: {
async listingCabang(context) {
try {
let param = { token: one_token() }
const resp = await api.getListCabang(param);
if (resp.status != "OK") {
throw new Error(resp.message);
}
context.commit('update_list_cabang', resp.data);
} catch (e) {
const snac = { color: 'error', msg: e.message, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
}
},
async listingGudang(context, branchID) {
try {
let param = {
token: one_token(),
M_BranchID: branchID
}
const resp = await api.getListGudang(param);
if (resp.status != "OK") {
throw new Error(resp.message);
}
context.commit('update_list_gudang', resp.data);
} catch (e) {
const snac = { color: 'error', msg: e.message, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
}
},
async listingSupplier(context) {
try {
const params = { token: one_token() };
const resp = await api.getListSupplier(params);
if (resp.status != 'OK') {
throw new Error(resp.message);
}
context.commit('update_list_supplier', resp.data);
} catch (e) {
const snac = { color: 'error', msg: e.message, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
}
},
async listingStaff(context) {
try {
const params = { token: one_token() };
const resp = await api.getListStaff(params);
if (resp.status != 'OK') {
throw new Error(resp.message);
}
context.commit('update_list_staff', resp.data);
} catch (e) {
const snac = { color: 'error', msg: e.message, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
}
},
async searchOrderAsset(context, keyword) {
try {
const form = context.state.form_receive;
const params = {
token: one_token(),
search: keyword,
supplierID: form.supplier,
gudangID: form.gudangID
};
const resp = await api.searchOrderAsset(params);
if (resp.status != 'OK') {
throw new Error(resp.message);
}
context.commit("update_list_item_order", resp.data)
} catch (e) {
const snac = { color: 'error', msg: e.message, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
}
},
async createReceiveOrder(context) {
try {
context.commit("roasset/update_loading_process", true, { root: true });
const detail = context.state.order_received;
const params = {
...context.state.form_receive,
detail: detail,
token: one_token()
};
const resp = await api.createReceiveOrder(params);
if (resp.status != 'OK') {
throw new Error(resp.message);
}
const snac = { color: 'success', msg: resp.data, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
context.dispatch("roasset/lookupOrderAssetReceived", {}, {root: true});
context.commit("roasset/update_loading_process", false, { root: true });
context.state.dialog_receive_aset = false;
} catch (e) {
context.commit("roasset/update_loading_process", false, { root: true });
const snac = { color: 'error', msg: e.message, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
}
},
async editReceiveOrder(context) {
try {
context.commit("roasset/update_loading_process", true, { root: true });
const detail = context.state.order_received;
const params = {
...context.state.form_receive,
detail: detail,
token: one_token()
};
const resp = await api.editReceiveOrder(params);
if (resp.status != 'OK') {
throw new Error(resp.message);
}
const snac = { color: 'success', msg: resp.data, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
context.dispatch("roasset/lookupOrderAssetReceived", {}, {root: true});
context.commit("roasset/update_loading_process", false, { root: true });
context.state.dialog_receive_aset = false;
} catch (e) {
context.commit("roasset/update_loading_process", false, { root: true });
const snac = { color: 'error', msg: e.message, state: true };
context.commit("roasset/update_snackbar", snac, { root: true });
}
}
}
}

View File

@@ -25,29 +25,15 @@ export default {
currpage: 1,
selected_roasset: {},
/* form receive */
dialog_receive_aset: false,
form_receive: {
date: moment(new Date()).format('YYYY-MM-DD'),
supplier: "",
reference: "",
ponumber: "",
contractlength: 0,
datepayment: "",
cicilan: 0,
downpayment: 0,
totalbill: 0,
catatan: ""
},
item_receive: [],
dialog_pick_contract: false,
/* upload attachment */
dialog_attachment: false,
preview_attachment: [],
/* delete */
dialog_delete: false
dialog_delete: false,
/* confirm */
dialog_confirm: false
},
mutations: {
/* common */
@@ -75,20 +61,6 @@ export default {
state.selected_roasset = val
},
/* form receive */
update_dialog_receive_aset(state, val) {
state.dialog_receive_aset = val
},
update_form_receive(state, val) {
state.form_receive = val
},
update_item_receive(state, val) {
state.item_receive = val
},
update_dialog_pick_contract(state, val) {
state.dialog_pick_contract = val
},
/* attachment */
update_dialog_attachment(state, val) {
state.dialog_attachment = val
@@ -100,45 +72,143 @@ export default {
/* delete */
update_dialog_delete(state, val) {
state.dialog_delete = val
},
update_dialog_confirm(state, val) {
state.dialog_confirm = val
}
},
actions: {
async lookupOrderAssetReceived(context) {
try {
// const param = {
// token: one_token(),
// }
// const resp = await api.lookupOrderAssetReceived(param);
// if (resp.status != "OK") {
// throw new Error(resp.message);
// }
// context.commit("update_list_roasset", resp.data);
const dummy = {
records: [
{
date: moment(new Date()).format('YYYY-MM-DD'),
receiveordernumber: "GR-003/SDM-14/SM-1/VI/2026",
purchaseordernumber: "PO-002/OPR-RL/SM-2/VI/2026",
suppliername: "PT MEJA ABADI",
uangmuka: 4000000,
totaltagihan: 10000000,
besarcicilan: 500000,
numbercicilan: 12,
cicilanterbayar: 0,
status: "Unconfirmed"
}
],
total: 1
const param = {
token: one_token(),
currpage: context.state.currpage,
...context.state.filterasset
}
context.commit("update_list_roasset", dummy);
const resp = await api.getListingROAsset(param);
if (resp.status != "OK") {
throw new Error(resp.message);
}
context.commit("update_list_roasset", resp.data);
} catch (e) {
const snac = { color: 'error', msg: e.message, state: false };
context.commit("update_snackbar", snac);
}
},
async lookupAttachment(context, roID) {
try {
const param = {
token: one_token(),
roID: roID
}
const resp = await api.getListAttachment(param);
if (resp.status != "OK") {
throw new Error(resp.message);
}
context.commit('update_preview_attachment', resp.data);
} catch (e) {
const snac = { color: 'error', msg: e.message, state: false };
context.commit("update_snackbar", snac);
}
},
async getDetailDataROAsset(context, roid) {
try {
context.commit('update_loading_process', true);
let params = {
token: one_token(),
roid: roid
}
const resp = await api.getDetailDataROAsset(params);
if (resp.status != "OK") {
throw new Error(resp.message);
}
context.commit('orderAsset/update_form_receive', resp.data.header, { root: true })
context.dispatch('orderAsset/listingGudang', resp.data.header.branchID, { root: true });
context.commit('orderAsset/update_order_received', resp.data.detail, { root: true })
context.commit('update_loading_process', false);
} catch (e) {
context.commit('update_loading_process', false);
const snac = { color: 'error', msg: e.message, state: false };
context.commit("update_snackbar", snac);
}
},
async uploadAttachment(context, params) {
try {
context.commit('update_loading_process', true);
const resp = await api.uploadAttachment(params);
if (resp.status != "OK") {
throw new Error(resp.message);
}
const snac = { color: 'success', msg: resp.data, state: true };
context.commit("update_snackbar", snac);
context.dispatch('lookupOrderAssetReceived');
context.commit('update_loading_process', false);
context.state.dialog_attachment = false;
} catch (e) {
context.commit('update_loading_process', false);
const snac = { color: 'error', msg: e.message, state: false };
context.commit("update_snackbar", snac);
}
},
async deleteReceiveAsset(context, roID) {
try {
context.commit('update_loading_process', true);
const param = {
token: one_token(),
roid: roID
}
const resp = await api.deleteReceiveOrder(param);
if (resp.status != "OK") {
throw new Error(resp.message);
}
const snac = { color: 'success', msg: resp.data, state: true };
context.commit("update_snackbar", snac);
context.dispatch('lookupOrderAssetReceived');
context.commit('update_loading_process', false);
context.state.dialog_delete = false;
} catch (e) {
context.commit('update_loading_process', false);
const snac = { color: 'error', msg: e.message, state: false };
context.commit("update_snackbar", snac);
}
},
async confirmReceiveOrder(context, roID) {
try {
context.commit('update_loading_process', true);
const param = {
token: one_token(),
roid: roID
}
const resp = await api.confirmReceiveOrder(param);
if (resp.status != "OK") {
throw new Error(resp.message);
}
const snac = { color: 'success', msg: resp.data, state: true };
context.commit("update_snackbar", snac);
context.dispatch('lookupOrderAssetReceived');
context.commit('update_loading_process', false);
context.state.dialog_confirm = false;
} catch (e) {
context.commit('update_loading_process', false);
const snac = { color: 'error', msg: e.message, state: false };
context.commit("update_snackbar", snac);
}
}
}
}

View File

@@ -1,10 +1,12 @@
import system from "../../../apps/modules/system/system.js";
import orderAsset from "./modules/order-asset.js";
import roasset from "./modules/roasset.js"
export const store = new Vuex.Store({
modules: {
system: system,
roasset:roasset
roasset: roasset,
orderAsset: orderAsset
},
state: {},
mutatios: {},