This commit is contained in:
CAnetzberger
2022-01-13 16:53:05 +01:00
parent 808af357ab
commit 9a0249cca7
5 changed files with 82 additions and 79 deletions

View File

@@ -105,7 +105,7 @@ def generateProductionOverviewCache():
soItem.qty = soItem.qty - soItem.delivered_qty soItem.qty = soItem.qty - soItem.delivered_qty
soItem.link = '/desk#Form/Sales%20Order/' + soItem.parent soItem.link = '/app#Form/Sales%20Order/' + soItem.parent
frappe.cache().set_value("production_overview", salesOrderItems) frappe.cache().set_value("production_overview", salesOrderItems)

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"manufacturing_overview.min.js","sources":["../../../../apps/manufacturing_overview/manufacturing_overview/public/js/manufacturing_overview_row.vue?rollup-plugin-vue=script.js","../../../../apps/manufacturing_overview/manufacturing_overview/public/js/manufacturing_overview_desk.vue?rollup-plugin-vue=script.js","../../../../apps/manufacturing_overview/manufacturing_overview/public/js/manufacturing_overview_page.js"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nexport default {\n name: \"ManufacturingOverviewRow\",\n props: [\n \"qty\",\n \"item_name\",\n \"item_code\",\n \"customer\",\n \"delivery_date\",\n \"status\",\n \"link\",\n \"reference\",\n \"due_in\",\n ],\n methods: {},\n};\n","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport ManufacturingOverviewRow from \"./manufacturing_overview_row.vue\";\n\nexport default {\n components: {\n ManufacturingOverviewRow,\n },\n data() {\n return {\n salesorderData: [\n {\n customer: \"\",\n delivery_date: \"\",\n link: \"\",\n name: \"\",\n item_name: \"Loading...\",\n item_code: \"\",\n qty: \"\",\n sales_order: \"\",\n status: \"Unknown\",\n due_in: 0,\n },\n ],\n timer: \"\",\n origin: window.location.origin,\n userPermissions: {},\n };\n },\n created() {\n this.fetchEventsList();\n this.timer = setInterval(this.fetchEventsList, 30000);\n },\n methods: {\n fetchEventsList() {\n let self = this;\n frappe.call({\n method:\n \"manufacturing_overview.manufacturing_overview.api.getSalesorderOverviewList\",\n async: true,\n args: {},\n callback: function (r) {\n if (r.message) {\n self.salesorderData = r.message;\n }\n },\n });\n },\n cancelAutoUpdate() {\n clearInterval(this.timer);\n },\n beforeDestroy() {\n clearInterval(this.timer);\n },\n },\n};\n","import ManufacturingOverviewDesk from \"./manufacturing_overview_desk.vue\";\n\n$(document).ready(function () {\n $(\".layout-main-section-wrapper\").after('<div class=\"col-4 layout-main-section-wrapper\" id=\"manufacturing-overview-body\"></div>');\n var pod = new Vue({\n el: \"#manufacturing-overview-body\",\n render(h) {\n return h(ManufacturingOverviewDesk, {});\n }\n });\n});"],"names":["name","props","methods","components","data","salesorderData","customer","delivery_date","link","item_name","item_code","qty","sales_order","status","due_in","timer","origin","window","location","userPermissions","created","this","fetchEventsList","setInterval","let","self","frappe","call","method","async","args","callback","r","message","cancelAutoUpdate","clearInterval","beforeDestroy","$","document","ready","after","Vue","el","render","h","ManufacturingOverviewDesk"],"mappings":"+BA6De,CACbA,KAAM,2BACNC,MAAO,CACL,MACA,YACA,YACA,WACA,gBACA,SACA,OACA,YACA,UAEFC,QAAS,umDCzCI,CACbC,WAAY,68DAGZC,gBACE,MAAO,CACLC,eAAgB,CACd,CACEC,SAAU,GACVC,cAAe,GACfC,KAAM,GACNR,KAAM,GACNS,UAAW,aACXC,UAAW,GACXC,IAAK,GACLC,YAAa,GACbC,OAAQ,UACRC,OAAQ,IAGZC,MAAO,GACPC,OAAQC,OAAOC,SAASF,OACxBG,gBAAiB,KAGrBC,mBACEC,KAAKC,kBACLD,KAAKN,MAAQQ,YAAYF,KAAKC,gBAAiB,MAEjDpB,QAAS,CACPoB,2BACEE,IAAIC,EAAOJ,KACXK,OAAOC,KAAK,CACVC,OACE,8EACFC,OAAO,EACPC,KAAM,GACNC,SAAU,SAAUC,GACdA,EAAEC,UACJR,EAAKpB,eAAiB2B,EAAEC,aAKhCC,4BACEC,cAAcd,KAAKN,QAErBqB,yBACED,cAAcd,KAAKN,myFC/EzBsB,EAAEC,UAAUC,MAAM,WACdF,EAAE,gCAAgCG,MAAM,0FAC9B,IAAIC,IAAI,CACdC,GAAI,+BACJC,gBAAOC,GACH,OAAOA,EAAEC,EAA2B"} {"version":3,"file":"manufacturing_overview.min.js","sources":["../../../../apps/manufacturing_overview/manufacturing_overview/public/js/manufacturing_overview_row.vue?rollup-plugin-vue=script.js","../../../../apps/manufacturing_overview/manufacturing_overview/public/js/manufacturing_overview_desk.vue?rollup-plugin-vue=script.js","../../../../apps/manufacturing_overview/manufacturing_overview/public/js/manufacturing_overview_page.js"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nexport default {\n name: \"ManufacturingOverviewRow\",\n props: [\n \"qty\",\n \"item_name\",\n \"item_code\",\n \"customer\",\n \"delivery_date\",\n \"status\",\n \"link\",\n \"reference\",\n \"due_in\",\n ],\n methods: {\n pushRoute(link) {\n frappe.router.push_state(link);\n },\n },\n};\n","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport ManufacturingOverviewRow from \"./manufacturing_overview_row.vue\";\n\nexport default {\n components: {\n ManufacturingOverviewRow,\n },\n data() {\n return {\n salesorderData: [\n {\n customer: \"\",\n delivery_date: \"\",\n link: \"\",\n name: \"\",\n item_name: \"Loading...\",\n item_code: \"\",\n qty: \"\",\n sales_order: \"\",\n status: \"Unknown\",\n due_in: 0,\n },\n ],\n timer: \"\",\n origin: window.location.origin,\n userPermissions: {},\n };\n },\n created() {\n this.fetchEventsList();\n this.timer = setInterval(this.fetchEventsList, 30000);\n },\n methods: {\n fetchEventsList() {\n let self = this;\n frappe.call({\n method:\n \"manufacturing_overview.manufacturing_overview.api.getSalesorderOverviewList\",\n async: true,\n args: {},\n callback: function (r) {\n if (r.message) {\n self.salesorderData = r.message;\n }\n },\n });\n },\n cancelAutoUpdate() {\n clearInterval(this.timer);\n },\n beforeDestroy() {\n clearInterval(this.timer);\n },\n },\n};\n","import ManufacturingOverviewDesk from \"./manufacturing_overview_desk.vue\";\n\n$(document).ready(function () {\n $(\".layout-main-section-wrapper\").after('<div class=\"col-4 layout-main-section-wrapper\" id=\"manufacturing-overview-body\"></div>');\n var pod = new Vue({\n el: \"#manufacturing-overview-body\",\n render(h) {\n return h(ManufacturingOverviewDesk, {});\n }\n });\n});"],"names":["name","props","methods","pushRoute","link","frappe","router","push_state","components","data","salesorderData","customer","delivery_date","item_name","item_code","qty","sales_order","status","due_in","timer","origin","window","location","userPermissions","created","this","fetchEventsList","setInterval","let","self","call","method","async","args","callback","r","message","cancelAutoUpdate","clearInterval","beforeDestroy","$","document","ready","after","Vue","el","render","h","ManufacturingOverviewDesk"],"mappings":"+BA6De,CACbA,KAAM,2BACNC,MAAO,CACL,MACA,YACA,YACA,WACA,gBACA,SACA,OACA,YACA,UAEFC,QAAS,CACPC,mBAAUC,GACRC,OAAOC,OAAOC,WAAWH,0oDC5ChB,CACbI,WAAY,s8DAGZC,gBACE,MAAO,CACLC,eAAgB,CACd,CACEC,SAAU,GACVC,cAAe,GACfR,KAAM,GACNJ,KAAM,GACNa,UAAW,aACXC,UAAW,GACXC,IAAK,GACLC,YAAa,GACbC,OAAQ,UACRC,OAAQ,IAGZC,MAAO,GACPC,OAAQC,OAAOC,SAASF,OACxBG,gBAAiB,KAGrBC,mBACEC,KAAKC,kBACLD,KAAKN,MAAQQ,YAAYF,KAAKC,gBAAiB,MAEjDxB,QAAS,CACPwB,2BACEE,IAAIC,EAAOJ,KACXpB,OAAOyB,KAAK,CACVC,OACE,8EACFC,OAAO,EACPC,KAAM,GACNC,SAAU,SAAUC,GACdA,EAAEC,UACJP,EAAKnB,eAAiByB,EAAEC,aAKhCC,4BACEC,cAAcb,KAAKN,QAErBoB,yBACED,cAAcb,KAAKN,isFC9EzBqB,EAAEC,UAAUC,MAAM,WACdF,EAAE,gCAAgCG,MAAM,0FAC9B,IAAIC,IAAI,CACdC,GAAI,+BACJC,gBAAOC,GACH,OAAOA,EAAEC,EAA2B"}

View File

@@ -1,28 +1,27 @@
<template> <template>
<div class="col-4 layout-main-section-wrapper"> <div class="col-4 layout-main-section-wrapper">
<div class="widget-group"> <div class="widget links-widget-box" style="height: auto">
<div class="widget-group-head"> <div class="widget-head">
<div class="widget-group-title">Manufacturing Overview</div> <div>
<div class="widget-group-control"></div> <div class="widget-subtitle"></div>
</div>
<div class="widget-group-body">
<div class="widget links-widget-box">
<manufacturing-overview-row
v-for="so in salesorderData"
:key="so.name"
v-bind:qty="so.qty"
v-bind:item_name="so.item_name"
v-bind:item_code="so.item_code"
v-bind:customer="so.customer"
v-bind:delivery_date="so.delivery_date"
v-bind:status="so.status"
v-bind:link="so.link"
v-bind:reference="so.parent"
v-bind:due_in="so.due_in"
>
>
</manufacturing-overview-row>
</div> </div>
<div class="widget-control"></div>
</div>
<div class="widget-body">
<manufacturing-overview-row
v-for="so in salesorderData"
:key="so.name"
v-bind:qty="so.qty"
v-bind:item_name="so.item_name"
v-bind:item_code="so.item_code"
v-bind:customer="so.customer"
v-bind:delivery_date="so.delivery_date"
v-bind:status="so.status"
v-bind:link="so.link"
v-bind:reference="so.parent"
v-bind:due_in="so.due_in"
>
</manufacturing-overview-row>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,59 +1,59 @@
<template> <template>
<a :href="link" class="link-item"> <a
<div class="container-fluid"> @click="pushRoute(link)"
<div class="row no-gutter"> class="row link-item ellipsis onbpoard-spotlight"
<div class="col col-xs-8"> type="Link"
<span >
class="indicator-pill no-margin" <div class="col col-xs-8">
v-bind:class="{ <span
red: status === 'No Work Order', class="indicator-pill no-margin"
blue: status === 'Fully Delivered', v-bind:class="{
'light-blue': status === 'Partially Delivered', red: status === 'No Work Order',
green: status === 'In Warehouse', blue: status === 'Fully Delivered',
orange: status === 'To Produce', 'light-blue': status === 'Partially Delivered',
grey: status === 'Unknown', green: status === 'In Warehouse',
}" orange: status === 'To Produce',
></span> grey: status === 'Unknown',
<span class="widget-subtitle">{{ qty }}</span> - }"
<span class="widget-title">{{ item_name }}</span> ></span>
<div> <span class="widget-subtitle">{{ qty }}</span> -
<small v-if="customer && item_code" class="color-secondary" <span class="widget-title">{{ item_name }}</span>
>{{ customer }} - <div>
<a :href="'/desk#Form/Item/' + item_code">{{ <small v-if="customer && item_code" class="color-secondary"
item_code >{{ customer }} -
}}</a></small <a @click="pushRoute('/app#Form/Item/' + item_code)" type="Link">{{
> item_code
<small v-else-if="customer" class="color-secondary">{{ }}</a></small
customer
}}</small>
<small v-else-if="item_code" class="color-secondary">{{
item_code
}}</small>
</div>
<div>
<small class="color-secondary">{{ reference }}</small>
</div>
</div>
<div
v-if="due_in < 0"
class="text-muted ellipsis color-secondary col col-xs-4 text-right"
> >
<b style="color: red">{{ delivery_date }}</b> <small v-else-if="customer" class="color-secondary">{{
</div> customer
<div }}</small>
v-else-if="due_in === 0" <small v-else-if="item_code" class="color-secondary">{{
class="text-muted ellipsis color-secondary col col-xs-4 text-right" item_code
> }}</small>
<b style="color: black">{{ delivery_date }}</b>
</div>
<div
v-else
class="text-muted ellipsis color-secondary col col-xs-4 text-right"
>
{{ delivery_date }}
</div>
</div> </div>
<div>
<small class="color-secondary">{{ reference }}</small>
</div>
</div>
<div
v-if="due_in < 0"
class="text-muted ellipsis color-secondary col col-xs-4 text-right"
>
<b style="color: red">{{ delivery_date }}</b>
</div>
<div
v-else-if="due_in === 0"
class="text-muted ellipsis color-secondary col col-xs-4 text-right"
>
<b style="color: black">{{ delivery_date }}</b>
</div>
<div
v-else
class="text-muted ellipsis color-secondary col col-xs-4 text-right"
>
{{ delivery_date }}
</div> </div>
</a> </a>
</template> </template>
@@ -72,7 +72,11 @@ export default {
"reference", "reference",
"due_in", "due_in",
], ],
methods: {}, methods: {
pushRoute(link) {
frappe.router.push_state(link);
},
},
}; };
</script> </script>