mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-16 16:15:02 +00:00
@@ -395,6 +395,7 @@
|
||||
"fieldtype": "Column Break"
|
||||
}
|
||||
],
|
||||
"hide_toolbar": 1,
|
||||
"icon": "fa fa-sitemap",
|
||||
"is_submittable": 1,
|
||||
"links": [
|
||||
@@ -403,7 +404,7 @@
|
||||
"link_fieldname": "bom_creator"
|
||||
}
|
||||
],
|
||||
"modified": "2024-05-26 15:47:10.101420",
|
||||
"modified": "2024-09-20 09:05:52.945112",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "BOM Creator",
|
||||
|
||||
@@ -6,6 +6,22 @@ frappe.ui.form.on("Plant Floor", {
|
||||
frm.trigger("setup_queries");
|
||||
},
|
||||
|
||||
add_workstation(frm) {
|
||||
frm.add_custom_button(__("Create Workstation"), () => {
|
||||
var doc = frappe.model.get_new_doc("Workstation");
|
||||
doc.plant_floor = frm.doc.name;
|
||||
doc.status = "Off";
|
||||
frappe.ui.form.make_quick_entry(
|
||||
"Workstation",
|
||||
() => {
|
||||
frm.trigger("prepare_workstation_dashboard");
|
||||
},
|
||||
null,
|
||||
doc
|
||||
);
|
||||
}).addClass("btn-primary");
|
||||
},
|
||||
|
||||
setup_queries(frm) {
|
||||
frm.set_query("warehouse", (doc) => {
|
||||
if (!doc.company) {
|
||||
@@ -24,6 +40,11 @@ frappe.ui.form.on("Plant Floor", {
|
||||
refresh(frm) {
|
||||
frm.trigger("prepare_stock_dashboard");
|
||||
frm.trigger("prepare_workstation_dashboard");
|
||||
|
||||
if (!frm.is_new()) {
|
||||
frm.trigger("add_workstation");
|
||||
frm.disable_save();
|
||||
}
|
||||
},
|
||||
|
||||
prepare_workstation_dashboard(frm) {
|
||||
|
||||
@@ -69,9 +69,10 @@
|
||||
"options": "Company"
|
||||
}
|
||||
],
|
||||
"hide_toolbar": 1,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-03-27 13:10:13.805390",
|
||||
"modified": "2024-09-19 18:06:36.481625",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "Plant Floor",
|
||||
|
||||
@@ -195,7 +195,7 @@ frappe.ui.form.on("Work Order", {
|
||||
frm.doc.produced_qty > 0
|
||||
) {
|
||||
frm.add_custom_button(
|
||||
__("Disassembly Order"),
|
||||
__("Disassemble Order"),
|
||||
() => {
|
||||
frm.trigger("make_disassembly_order");
|
||||
},
|
||||
|
||||
@@ -25,6 +25,9 @@ class BOMConfigurator {
|
||||
};
|
||||
|
||||
frappe.views.trees["BOM Configurator"] = new frappe.views.TreeView(options);
|
||||
let node = frappe.views.trees["BOM Configurator"].tree.root_node;
|
||||
frappe.views.trees["BOM Configurator"].tree.show_toolbar(node);
|
||||
frappe.views.trees["BOM Configurator"].tree.load_children(node, true);
|
||||
this.tree_view = frappe.views.trees["BOM Configurator"];
|
||||
}
|
||||
|
||||
@@ -138,7 +141,7 @@ class BOMConfigurator {
|
||||
btnClass: "hidden-xs",
|
||||
},
|
||||
{
|
||||
label: __("Expand All"),
|
||||
label: __("Collapse All"),
|
||||
click: function (node) {
|
||||
let view = frappe.views.trees["BOM Configurator"];
|
||||
|
||||
@@ -307,6 +310,13 @@ class BOMConfigurator {
|
||||
fieldtype: "Float",
|
||||
reqd: 1,
|
||||
read_only: read_only,
|
||||
change() {
|
||||
this.layout.fields_dict.items.grid.data.forEach((row) => {
|
||||
row.qty = flt(this.value);
|
||||
});
|
||||
|
||||
this.layout.fields_dict.items.grid.refresh();
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
{% $.each(workstations, (idx, row) => { %}
|
||||
<div class="workstation-wrapper">
|
||||
<div class="workstation-status text-right">
|
||||
<span class="indicator-pill no-indicator-dot whitespace-nowrap {{row.color}}" style="margin: 3px 4px 0px 0px;"><span style="font-size:13px">{{row.status}}</span></span>
|
||||
{% if(row.status == "Production") { %}
|
||||
<div class="ring-container">
|
||||
<div class="ringring"></div>
|
||||
<div class="circle"></div>
|
||||
</div>
|
||||
{% } %}
|
||||
<span class="indicator-pill no-indicator-dot whitespace-nowrap {{row.color}}" style="margin: 3px 4px 0px 0px;">
|
||||
<span style="font-size:13px">{{row.status}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="workstation-image">
|
||||
<div class="flex items-center justify-center h-32 border-b-grey text-6xl text-grey-100">
|
||||
|
||||
@@ -507,6 +507,47 @@ body[data-route="pos"] {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.ring-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.circle {
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
background-color: #278f5e;
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
left: 9px;
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
@keyframes pulsate {
|
||||
0% {
|
||||
-webkit-transform: scale(0.1, 0.1);
|
||||
opacity: 0;
|
||||
}
|
||||
50% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: scale(1.2, 1.2);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.ringring {
|
||||
border: 2px solid #62bd19;
|
||||
-webkit-border-radius: 40px;
|
||||
height: 15px;
|
||||
width: 15px;
|
||||
position: absolute;
|
||||
left: 6px;
|
||||
top: 5px;
|
||||
-webkit-animation: pulsate 3s ease-out;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.plant-floor {
|
||||
padding-bottom: 25px;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user