357 lines
15 KiB
Vue
357 lines
15 KiB
Vue
<template>
|
|
<v-dialog
|
|
v-model="dialog"
|
|
persistent
|
|
:overlay="false"
|
|
max-width="80%"
|
|
transition="dialog-transition"
|
|
>
|
|
<v-card>
|
|
<v-card-title primary-title color="orange">
|
|
<h3 class="title">PENGGANDAAN HARGA</h3>
|
|
</v-card-title>
|
|
<v-card-text>
|
|
<v-layout row wrap>
|
|
<v-flex xs4>
|
|
<v-layout mb-1 row>
|
|
<v-subheader>TARGET</v-subheader>
|
|
</v-layout>
|
|
<v-layout pl-3 mb-4 row>
|
|
<v-flex>
|
|
<span class="mono" style="color:red;font-size:14px;">{{target_company.M_CompanyName}}</span>
|
|
[ <span class="mono" style="font-size:14px;">{{target_mou.M_MouName}}</span> ]
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<v-layout mb-1 row>
|
|
<v-subheader>SUMBER</v-subheader>
|
|
</v-layout>
|
|
<v-layout pl-3 mb-1 row>
|
|
<v-flex>
|
|
<v-autocomplete
|
|
label="Kelompok Pelanggan"
|
|
v-model="selected_company"
|
|
:items="companies"
|
|
:search-input.sync="query_company"
|
|
outline
|
|
auto-select-first
|
|
no-filter
|
|
return-object
|
|
hide-details
|
|
clearable
|
|
item-text="M_CompanyName"
|
|
:loading="is_loading"
|
|
no-data-text="Pilih Kel. Pelanggan"
|
|
>
|
|
<template
|
|
slot="item"
|
|
slot-scope="{ item }"
|
|
>
|
|
<v-list-tile-content>
|
|
<v-list-tile-title v-text="item.M_CompanyName"></v-list-tile-title>
|
|
<!-- <v-list-tile-sub-title v-text="'aaa'"></v-list-tile-sub-title> -->
|
|
</v-list-tile-content>
|
|
</template>
|
|
|
|
</v-autocomplete>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout pl-3 mb-2 row>
|
|
<v-flex>
|
|
<v-select class="xs12" :items="mous"
|
|
outline
|
|
hide-details
|
|
item-text="M_MouName"
|
|
item-value="M_MouID"
|
|
return-object
|
|
v-model="selected_mou"
|
|
label="Agreement"></v-select>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout pl-3 mb-2 row>
|
|
<v-flex>
|
|
<div>
|
|
<v-btn block @click="changeBtnFlagCopyAll(copyall)" v-if="copyall === 'N'" color="error">
|
|
<v-icon left>close</v-icon> Gandakan semua sekaligus </v-btn>
|
|
<v-btn block @click="changeBtnFlagCopyAll(copyall)" v-if="copyall === 'Y'" color="success">
|
|
<v-icon left>check</v-icon> Gandakan semua sekaligus</v-btn>
|
|
</div>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-flex>
|
|
<v-flex xs8 pl-3>
|
|
<v-layout row>
|
|
<v-flex xs12 pl-2 pr-2 pt-2 pb-2>
|
|
<v-data-table
|
|
:headers="headers"
|
|
:items="xtransactions"
|
|
:loading="isLoading"
|
|
hide-actions
|
|
class="elevation-1">
|
|
<template v-slot:headers="props">
|
|
<tr>
|
|
<th style="width:20px" class= "text-xs-left blue-grey white--text">
|
|
<v-checkbox style="padding-top:0;margin-top:0"
|
|
hide-details
|
|
color="white"
|
|
:disabled="copyall === 'Y'"
|
|
:indeterminate="indeterminatex"
|
|
@change="changeCbxAll(bar_chx_all)"
|
|
v-model="bar_chx_all"
|
|
></v-checkbox>
|
|
</th>
|
|
<th
|
|
v-for="header in props.headers"
|
|
:key="header.text"
|
|
:class="header.class"
|
|
:width="header.width"
|
|
>
|
|
{{ header.text }}
|
|
</th>
|
|
</tr>
|
|
</template>
|
|
|
|
<template v-slot:items="props">
|
|
<td style="width:20px" class="text-xs-left">
|
|
<v-checkbox style="padding-top:0;margin-top:0"
|
|
color="blue-grey"
|
|
hide-details
|
|
:disabled="copyall === 'Y'"
|
|
v-model="props.item.chex"
|
|
@change="checkTop()"
|
|
></v-checkbox>
|
|
</td>
|
|
<td class="text-xs-left pa-2">{{ props.item.Nat_JPAGroupName }} ( <span style="color:red">{{fixedDiscount(props.item.Nat_JpaGroupMaxPxDisc)}} %</span> )</td>
|
|
<td class="text-xs-left pa-2">
|
|
<v-text-field
|
|
label="DISKON (%)"
|
|
single-line
|
|
:disabled="copyall === 'Y'"
|
|
hide-details
|
|
v-model="props.item.discount"
|
|
></v-text-field>
|
|
</td>
|
|
</template>
|
|
</v-data-table>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
|
|
<v-card-actions>
|
|
<v-spacer></v-spacer>
|
|
<v-btn color="primary" flat dark @click="dialog=!dialog">Tutup</v-btn>
|
|
<v-btn color="primary" dark @click="save">Simpan</v-btn>
|
|
</v-card-actions>
|
|
|
|
</v-card>
|
|
</v-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
module.exports = {
|
|
components : {
|
|
'one-md-price-copy-list': httpVueLoader('./oneMdPriceCopyList.vue'),
|
|
|
|
},
|
|
mounted(){
|
|
this.$store.dispatch("price_copy/getjpagroups")
|
|
},
|
|
data() {
|
|
return {
|
|
indeterminatex:false,
|
|
bar_chx_all:false,
|
|
isLoading:false,
|
|
headers: [
|
|
{
|
|
text: "GROUP",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "name",
|
|
width: "65%",
|
|
class: "pa-2 blue-grey text-xs-left white--text"
|
|
},
|
|
{
|
|
text: "DISKON",
|
|
align: "center",
|
|
sortable: false,
|
|
value: "status",
|
|
width: "15%",
|
|
class: "pa-2 blue-grey text-xs-left white--text"
|
|
}
|
|
],
|
|
}
|
|
},
|
|
|
|
computed : {
|
|
copyall : {
|
|
get () {
|
|
return this.$store.state.price_copy.copyall
|
|
},
|
|
set (v) {
|
|
this.$store.commit('price_copy/update_copyall', v)
|
|
}
|
|
},
|
|
is_loading () {
|
|
return false
|
|
},
|
|
dialog : {
|
|
get() { return this.$store.state.price_copy.dialog_copy },
|
|
set(v) { this.$store.commit('price_copy/update_dialog_copy', v) }
|
|
},
|
|
target_company () {
|
|
return this.$store.state.price.selected_company
|
|
},
|
|
target_mou () {
|
|
return this.$store.state.price.selected_mou
|
|
},
|
|
query_company : {
|
|
get () {
|
|
return this.$store.state.price_copy.query_company
|
|
},
|
|
set (v) {
|
|
this.$store.commit('price_copy/update_query_company', v)
|
|
}
|
|
},
|
|
companies : {
|
|
get () {
|
|
return this.$store.state.price_copy.companies
|
|
},
|
|
set (v) {
|
|
this.$store.commit('price_copy/update_companies', v)
|
|
}
|
|
},
|
|
selected_company : {
|
|
get () {
|
|
return this.$store.state.price_copy.selected_company
|
|
},
|
|
set (v) {
|
|
this.$store.commit('price_copy/update_selected_company', v)
|
|
//console.log(this.$store.state.price_copy.selected_company)
|
|
//this.$store.commit('price_copy/update_mous', this.$store.state.price_copy.selected_company.mou)
|
|
this.$store.commit('price_copy/update_selected_mou', {})
|
|
}
|
|
},
|
|
mous : {
|
|
get () {
|
|
return this.selected_company.mou
|
|
},
|
|
set (v) {
|
|
this.$store.commit('price_copy/update_mous', v)
|
|
}
|
|
},
|
|
selected_mou : {
|
|
get () {
|
|
return this.$store.state.price_copy.selected_mou
|
|
},
|
|
set (v) {
|
|
this.$store.commit('price_copy/update_selected_mou', v)
|
|
}
|
|
},
|
|
xtransactions(){
|
|
return this.$store.state.price_copy.jpagroups
|
|
}
|
|
},
|
|
|
|
methods : {
|
|
changeBtnFlagCopyAll(value) {
|
|
var newval = (value === 'Y') ? 'N' : 'Y'
|
|
this.copyall = newval
|
|
},
|
|
fixedDiscount(value){
|
|
return +(parseFloat(value)).toFixed(2)
|
|
},
|
|
save () {
|
|
var go_action = true
|
|
var errors = []
|
|
var transactions = this.$store.state.price_copy.jpagroups
|
|
if(this.copyall === 'N' && (_.isEmpty(this.selected_company) || !this.selected_company)){
|
|
errors.push("Main petak umpet sama orang utan, jangan lupa isi kelompok pelanggan")
|
|
go_action = false
|
|
}
|
|
|
|
|
|
if(this.copyall === 'N' && (_.isEmpty(this.selected_mou) || !this.selected_mou )){
|
|
go_action = false
|
|
errors.push("Gal gadot jadi wonder women, jangan lupa isi agreement")
|
|
}
|
|
|
|
|
|
if(this.copyall === 'N' && (_.isEmpty(this.$store.state.price_copy.selected_transaction) || !this.$store.state.price_copy.selected_transaction )){
|
|
errors.push("Diet nasi makan kentang, salah satu group harus dicentang")
|
|
go_action = false
|
|
}
|
|
|
|
transactions.forEach(function(entry,index) {
|
|
if(parseFloat(entry.discount) > parseFloat(entry.Nat_JpaGroupMaxPxDisc)){
|
|
go_action = false
|
|
errors.push("Diskon "+entry.Nat_JPAGroupName+" melebihi dari ketetapan maksimal")
|
|
}
|
|
})
|
|
// console.log(errors)
|
|
if(go_action){
|
|
var prm = {trx:this.$store.state.price_copy.jpagroups}
|
|
prm.copyall = this.$store.state.price_copy.copyall
|
|
this.$store.dispatch('price_copy/save_copy',prm)
|
|
}
|
|
else{
|
|
this.$store.commit("price_copy/update_msg_info",errors.join('</br></br>'))
|
|
this.$store.commit("price_copy/update_open_dialog_info",true)
|
|
console.log('open '+this.open_dialog_info)
|
|
}
|
|
|
|
},
|
|
thr_search: _.debounce( function () {
|
|
var prm = this.$store.state.price.selected_company
|
|
this.$store.dispatch("price_copy/search_company",prm)
|
|
|
|
}, 700),
|
|
checkTop(){
|
|
var barcodes = this.xtransactions
|
|
var selected = _.filter(barcodes, function(o) { return o.chex; })
|
|
this.bar_chx_all = false
|
|
this.indeterminatex = false
|
|
if(selected.length > 0 && barcodes.length === selected.length){
|
|
this.bar_chx_all = true
|
|
this.indeterminatex = false
|
|
|
|
}
|
|
if(selected.length > 0 && barcodes.length > selected.length){
|
|
this.bar_chx_all = false
|
|
this.indeterminatex = true
|
|
|
|
}
|
|
this.$store.commit("price_copy/update_selected_transaction",selected)
|
|
|
|
},
|
|
changeCbxAll(value){
|
|
var arr = this.xtransactions
|
|
this.indeterminatex = false
|
|
this.btn_hide = true
|
|
arr.forEach((el)=>{el.chex = value})
|
|
var selected = _.filter(arr, function(o) { return o.chex; })
|
|
this.$store.commit("price_copy/update_selected_transaction",selected)
|
|
|
|
},
|
|
},
|
|
watch : {
|
|
query_company(val, old) {
|
|
|
|
if (val == null || typeof val == 'undefined') val = ""
|
|
// console.log("1-val:"+val)
|
|
if (val == old ) return
|
|
// console.log("2-val:"+val)
|
|
// if (! val) return
|
|
// console.log("3-val:"+val)
|
|
// if (val.length < 1 ) return
|
|
// console.log("4-val:"+val)
|
|
if (this.$store.state.price.search_status == 1 ) return
|
|
// console.log("5-val:"+val)
|
|
this.$store.commit("price_copy/update_query_company", val)
|
|
this.thr_search()
|
|
}
|
|
|
|
}
|
|
}
|
|
</script> |