Merge branch 'develop' into feature/Integry_Password_RegoleComplessità
This commit is contained in:
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
@@ -3,7 +3,4 @@
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="ES6" />
|
||||
</component>
|
||||
<component name="TaskProjectConfiguration">
|
||||
<server type="YouTrack" url="https://integry.myjetbrains.com/youtrack" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -182,7 +182,7 @@ class KendoService {
|
||||
// }
|
||||
|
||||
public static function filter($filter) {
|
||||
if (isset($filter) && isset($filter["filters"]) && count($filter["filters"]) > 0) {
|
||||
if (isset($filter["filters"]) && count($filter["filters"]) > 0) {
|
||||
$filterWhere = \YaLinqo\Enumerable::from($filter["filters"])
|
||||
->select(function ($filter) {
|
||||
$isString = false;
|
||||
|
||||
@@ -228,6 +228,7 @@ class PVM {
|
||||
$section = array(
|
||||
"id" => $aziModule["name"],
|
||||
"title" => isset($pvmModule["title"]) ? $pvmModule["title"] : null,
|
||||
"shortTitle" => isset($pvmModule["shortTitle"]) ? $pvmModule["shortTitle"] : null,
|
||||
"pages" => $page,
|
||||
"page-det" => $pageDet,
|
||||
"position" => $arr_position,
|
||||
@@ -373,6 +374,7 @@ class PVM {
|
||||
"href" => $href,
|
||||
"module" => $idModulo,
|
||||
"title" => $menuOpt["title"],
|
||||
"shortTitle" => array_get($menuOpt, "shortTitle", $menuOpt["title"]),
|
||||
"icon" => $menuOpt["icon"],
|
||||
"asPopup" => $menuOpt["asPopup"],
|
||||
"notification" => $notification
|
||||
|
||||
@@ -2124,7 +2124,8 @@
|
||||
"requirePermission": true
|
||||
},
|
||||
"macchinari_prod": {
|
||||
"title": "Industrial Machines Management",
|
||||
"title": "Computerized Maintenance Management System",
|
||||
"shortTitle": "CMMS",
|
||||
"pages": "macchinari_prod.php",
|
||||
"position": [],
|
||||
"icon": "icon.png",
|
||||
|
||||
@@ -136,7 +136,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right cursor-pointer"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-vend"
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -162,7 +162,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-vend"
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -180,7 +180,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-vend"
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -189,7 +189,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({saldoBudget, saldoDisp}) =>
|
||||
saldoBudget?.sum &&
|
||||
this.numberFormat(saldoBudget.sum, saldoDisp?.sum < saldoBudget.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(saldoBudget.sum, saldoDisp?.sum < saldoBudget.sum ? "negative" : "positive") || ""
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -206,7 +206,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: true,
|
||||
groupable: false,
|
||||
@@ -224,7 +224,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -242,7 +242,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -251,7 +251,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({saldoDisp, saldoBudget}) =>
|
||||
saldoDisp?.sum &&
|
||||
this.numberFormat(saldoDisp.sum, saldoDisp.sum < saldoBudget?.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(saldoDisp.sum, saldoDisp.sum < saldoBudget?.sum ? "negative" : "positive") || ""
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -268,7 +268,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-vend"
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -277,7 +277,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({qtaOrdVendSetC, QtaPrevAcqSetC}) =>
|
||||
qtaOrdVendSetC?.sum &&
|
||||
this.numberFormat(qtaOrdVendSetC.sum, QtaPrevAcqSetC?.sum < qtaOrdVendSetC.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(qtaOrdVendSetC.sum, QtaPrevAcqSetC?.sum < qtaOrdVendSetC.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "f46bd2de-07a7-4b4d-99b7-03ea4a75fbf7",
|
||||
@@ -288,7 +288,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: true,
|
||||
groupable: false,
|
||||
@@ -297,7 +297,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetC, qtaOrdVendSetC}) =>
|
||||
QtaPrevAcqSetC?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetC.sum, QtaPrevAcqSetC.sum < qtaOrdVendSetC?.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(QtaPrevAcqSetC.sum, QtaPrevAcqSetC.sum < qtaOrdVendSetC?.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "7eef5256-c8ad-47a0-9412-edf642d19a47",
|
||||
@@ -308,7 +308,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -329,7 +329,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -350,7 +350,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -377,7 +377,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-vend"
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -386,7 +386,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({qtaOrdVendSetP, QtaPrevAcqSetP}) =>
|
||||
qtaOrdVendSetP?.sum &&
|
||||
this.numberFormat(qtaOrdVendSetP.sum, QtaPrevAcqSetP?.sum < qtaOrdVendSetP.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(qtaOrdVendSetP.sum, QtaPrevAcqSetP?.sum < qtaOrdVendSetP.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "04504e29-b3fd-4efa-ba69-844694a2e4ea",
|
||||
@@ -397,7 +397,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: true,
|
||||
groupable: false,
|
||||
@@ -406,7 +406,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetP, qtaOrdVendSetP}) =>
|
||||
QtaPrevAcqSetP?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetP.sum, QtaPrevAcqSetP.sum < qtaOrdVendSetP?.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(QtaPrevAcqSetP.sum, QtaPrevAcqSetP.sum < qtaOrdVendSetP?.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "ac057b8d-e2e5-4db3-8aee-382025569934",
|
||||
@@ -417,7 +417,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -438,7 +438,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -459,7 +459,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -486,7 +486,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-vend"
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -495,7 +495,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({qtaBdgResiduo, qtaPrevResidua}) =>
|
||||
qtaBdgResiduo?.sum &&
|
||||
this.numberFormat(qtaBdgResiduo.sum, qtaPrevResidua?.sum < qtaBdgResiduo.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(qtaBdgResiduo.sum, qtaPrevResidua?.sum < qtaBdgResiduo.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "7b44f0f1-40e5-4d87-b928-860c996c8df6",
|
||||
@@ -506,7 +506,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-racc"
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
@@ -515,7 +515,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({qtaPrevResidua, qtaBdgResiduo}) =>
|
||||
qtaPrevResidua?.sum &&
|
||||
this.numberFormat(qtaPrevResidua.sum, qtaPrevResidua.sum < qtaBdgResiduo?.sum ? "racc" : "vend") || ""
|
||||
this.numberFormat(qtaPrevResidua.sum, qtaPrevResidua.sum < qtaBdgResiduo?.sum ? "negative" : "positive") || ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -660,14 +660,16 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
style="display: flex; gap: 3px;">
|
||||
<div id="budgetSelector"></div>
|
||||
|
||||
<a href="gestione_budget.php" target="_blank"
|
||||
${this.module.get_dataSource("canEditBudgets") &&
|
||||
`<a href="gestione_budget.php" target="_blank"
|
||||
class="k-button k-button-link"
|
||||
style="width: 27%">
|
||||
<i class="k-icon k-i-edit k-button-icon"></i>
|
||||
<span class="k-button-text">
|
||||
Crea/Modifica
|
||||
</span>
|
||||
</a>
|
||||
</a>`
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div id="contextMenuTableAnalisiBudget"></div>
|
||||
@@ -675,7 +677,7 @@ export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
`;
|
||||
}
|
||||
|
||||
numberFormat(number: number, type: "vend" | "racc" | undefined = undefined, prefix = "", postfix = "") {
|
||||
numberFormat(number: number, type: "positive" | "negative" | undefined = undefined, prefix = "", postfix = "") {
|
||||
const html = monospace(number_format_datatable(prefix, postfix, 0, "'").display(number));
|
||||
|
||||
return type && `<span class="text-${type}">${html}</span>` || html;
|
||||
|
||||
@@ -45,6 +45,7 @@ export interface Budget extends kendo.data.Model {
|
||||
qta_vend_dic_c: number
|
||||
id_bdg?: number
|
||||
id_row?: number
|
||||
crit: "positive" | "negative"
|
||||
}
|
||||
|
||||
const LAST_ID_BDG_KEY = "LAST_ID_BDG";
|
||||
@@ -106,7 +107,7 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
{
|
||||
id: "9ddd2baf-e278-4adc-9b0e-afeeb1d52958",
|
||||
field: "articolo",
|
||||
title: "Articolo",
|
||||
title: "Articolo (Giacenza)",
|
||||
type: "string",
|
||||
attributes: {
|
||||
class: "!k-text-left"
|
||||
@@ -122,7 +123,11 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
groupable: true,
|
||||
hidden: false,
|
||||
editable: () => false,
|
||||
template: data => `${data.cod_mart} (${this.numberFormat(data.giacenza, undefined, "", data.unt_mis)})`,
|
||||
template:
|
||||
// language=HTML
|
||||
data => `<span title="${data.cod_mart}">
|
||||
${data.descrizione} (${this.numberFormat(data.giacenza, undefined, "", data.unt_mis)})
|
||||
</span>`,
|
||||
groupHeaderTemplate: data => data.value,
|
||||
footerTemplate: "Totale complessivo"
|
||||
},
|
||||
@@ -142,9 +147,6 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
// headerAttributes: {
|
||||
// class: "text-vend"
|
||||
// },
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
@@ -215,7 +217,6 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
id: "82553e3d-76b1-4c7d-b871-486f46187448",
|
||||
title: "Budget",
|
||||
columns: [
|
||||
|
||||
{
|
||||
id: "84551871-ab52-457e-a2be-f80211401998",
|
||||
field: "qta_bdg_vend",
|
||||
@@ -227,7 +228,7 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: ({id_bdg, id_row}) => id_bdg && id_row,
|
||||
template: (data: Budget) => data.qta_bdg_vend && this.numberFormat(data.qta_bdg_vend) || "",
|
||||
template: (data: Budget) => data.qta_bdg_vend && this.numberFormat(data.qta_bdg_vend, data.crit) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({qta_bdg_vend}) => qta_bdg_vend?.sum && this.numberFormat(qta_bdg_vend.sum) || "",
|
||||
editor: (container, options) =>
|
||||
@@ -246,12 +247,9 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
// headerAttributes: {
|
||||
// class: "text-vend"
|
||||
// },
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: ({id_bdg, id_row}) => id_bdg && id_row,
|
||||
editable: ({id_bdg, id_row, qta_vend_anno_p}) => id_bdg && id_row && qta_vend_anno_p,
|
||||
template: (data: Budget) => data.perc_variaz_ap && this.numberFormat(data.perc_variaz_ap, undefined, "", "%") || "",
|
||||
// aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({qta_vend_anno_p, qta_bdg_vend}) =>
|
||||
@@ -277,7 +275,7 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.perc_budget && this.numberFormat(data.perc_budget, undefined, "", "%") || "",
|
||||
template: (data: Budget) => data.perc_budget && this.numberFormat(data.perc_budget, data.crit, "", "%") || "",
|
||||
groupHeaderColumnTemplate: ({qta_bdg_vend, qta_vend_anno_c}) =>
|
||||
qta_bdg_vend?.sum &&
|
||||
qta_vend_anno_c?.sum &&
|
||||
@@ -300,7 +298,7 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.qta_vend_anno_c && this.numberFormat(data.qta_vend_anno_c) || "",
|
||||
template: (data: Budget) => data.qta_vend_anno_c && this.numberFormat(data.qta_vend_anno_c, data.crit) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({qta_vend_anno_c}) => qta_vend_anno_c?.sum && this.numberFormat(qta_vend_anno_c.sum) || "",
|
||||
footerTemplate: ({qta_vend_anno_c}) => qta_vend_anno_c?.sum && this.numberFormat(qta_vend_anno_c.sum) || ""
|
||||
@@ -526,16 +524,16 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
filter: {
|
||||
filters: [
|
||||
...options.data.filter?.filters || [],
|
||||
...[this.store.formato && {
|
||||
...this.store.formato && [{
|
||||
field: "formato",
|
||||
operator: "eq",
|
||||
value: this.store.formato
|
||||
}],
|
||||
...[this.store.famiglia && {
|
||||
}] || [],
|
||||
...this.store.famiglia && [{
|
||||
field: "famiglia",
|
||||
operator: "eq",
|
||||
value: this.store.famiglia
|
||||
}]
|
||||
}] || []
|
||||
],
|
||||
logic: "and"
|
||||
}
|
||||
@@ -627,11 +625,11 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
field: "descrizione",
|
||||
aggregates,
|
||||
dir: "desc"
|
||||
}
|
||||
// {
|
||||
// field: "descrizione",
|
||||
// aggregates,
|
||||
// dir: "desc"
|
||||
// }
|
||||
],
|
||||
aggregate: aggregates,
|
||||
// pageSize: 1000,
|
||||
@@ -651,13 +649,14 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
<div id="familySelector"></div>
|
||||
<div id="budgetSelector"></div>
|
||||
|
||||
<a href="gestione_budget.php" target="_blank"
|
||||
${this.module.get_dataSource("canEditBudgets") &&
|
||||
`<a href="gestione_budget.php" target="_blank"
|
||||
class="btn btn-link">
|
||||
<i class="k-icon k-i-edit"></i>
|
||||
<span>
|
||||
Crea/Modifica
|
||||
</span>
|
||||
</a>
|
||||
</a>` || ""}
|
||||
</div>
|
||||
</div>
|
||||
<div id="contextMenuTableAnalisiBudget"></div>
|
||||
@@ -665,7 +664,7 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
`;
|
||||
}
|
||||
|
||||
numberFormat(number: number, type: "vend" | "racc" | undefined = undefined, prefix = "", postfix = "") {
|
||||
numberFormat(number: number, type: "positive" | "negative" | undefined = undefined, prefix = "", postfix = "") {
|
||||
const html = monospace(number_format_datatable(prefix, postfix, 0, "'").display(number));
|
||||
|
||||
return type && `<span class="text-${type}">${html}</span>` || html;
|
||||
@@ -674,8 +673,6 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
async onLoad() {
|
||||
await super.onLoad();
|
||||
|
||||
// this.$container.parents("#content").find("div").css("max-height", "92vh");
|
||||
|
||||
let elementsSet = false;
|
||||
|
||||
document.addEventListener("reef:store", async () => {
|
||||
@@ -695,6 +692,18 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
return "" + groupIdx + groupValue;
|
||||
};
|
||||
|
||||
const removeFooters = (columns) => {
|
||||
return columns.map(column => {
|
||||
if (column.columns) {
|
||||
removeFooters(column.columns);
|
||||
}
|
||||
|
||||
delete column.footerTemplate;
|
||||
|
||||
return column;
|
||||
})
|
||||
}
|
||||
|
||||
this.kendoGrid = await _kendo.savableTable(this.$container.find("#tableAnalisiBudget"), "RG_ANALISI_BUDGET", {
|
||||
columns: this.columns,
|
||||
dataSource: this.dataSourceGrid,
|
||||
@@ -728,6 +737,118 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
`
|
||||
}
|
||||
],
|
||||
detailInit: (e: kendo.ui.GridDetailInitEvent) => {
|
||||
const columns = _kendo.setDefaultCellOptions([
|
||||
{
|
||||
id: "360d7a32-2660-44a3-97d4-809d6cab9393",
|
||||
field: "articolo",
|
||||
title: "Articolo (Giacenza)",
|
||||
type: "string",
|
||||
attributes: {
|
||||
class: "!k-text-left"
|
||||
},
|
||||
width: "10%",
|
||||
filterable: {
|
||||
operators: {
|
||||
string: {
|
||||
contains: "Contiene"
|
||||
}
|
||||
}
|
||||
},
|
||||
editable: () => false,
|
||||
template: data => `${data.cod_mart} (${this.numberFormat(data.giacenza, undefined, "", data.unt_mis)})`,
|
||||
groupHeaderTemplate: data => data.value
|
||||
},
|
||||
...removeFooters(this.columns.slice(3, 4).flatMap(column => column.columns || column))
|
||||
]);
|
||||
|
||||
const budget = e.data as Budget;
|
||||
|
||||
const detailGrid = $("<div/>").appendTo(e.detailCell).kendoGrid({
|
||||
dataSource: {
|
||||
transport: {
|
||||
read: async (options) => {
|
||||
_kendo.checkFilterValuesColumns(
|
||||
options.data.filter,
|
||||
columns
|
||||
);
|
||||
|
||||
try {
|
||||
const data = await this.getDetailBudget({
|
||||
codSl: budget.cod_mart,
|
||||
codAnag: budget.cod_anag,
|
||||
...options.data
|
||||
});
|
||||
|
||||
options.success(data);
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
options.success([]);
|
||||
}
|
||||
}
|
||||
},
|
||||
schema: {
|
||||
data: "data",
|
||||
total: "total",
|
||||
model: {
|
||||
id: "row_number",
|
||||
fields: {
|
||||
row_number: {type: "number"},
|
||||
cod_anag: {type: "string"},
|
||||
rag_soc: {type: "string"},
|
||||
citta: {type: "string"},
|
||||
provincia: {type: "string"},
|
||||
nazione: {type: "string"},
|
||||
formato: {type: "string"},
|
||||
cod_mart: {type: "string"},
|
||||
articolo: {type: "string"},
|
||||
anno_pp: {type: "string"},
|
||||
anno_p: {type: "string"},
|
||||
anno_c: {type: "string"},
|
||||
importo_anno_pp: {type: "number"},
|
||||
importo_anno_p: {type: "number"},
|
||||
importo_anno_c: {type: "number"},
|
||||
qta_bdg_vend: {type: "number"},
|
||||
perc_variaz_ap: {type: "number"},
|
||||
qta_vend_anno_pp: {type: "number"},
|
||||
qta_vend_anno_p: {type: "number"},
|
||||
qta_vend_anno_c: {type: "number"},
|
||||
qta_vend_gen_c: {type: "number"},
|
||||
qta_vend_feb_c: {type: "number"},
|
||||
qta_vend_mar_c: {type: "number"},
|
||||
qta_vend_apr_c: {type: "number"},
|
||||
qta_vend_mag_c: {type: "number"},
|
||||
qta_vend_giu_c: {type: "number"},
|
||||
qta_vend_lug_c: {type: "number"},
|
||||
qta_vend_ago_c: {type: "number"},
|
||||
qta_vend_set_c: {type: "number"},
|
||||
qta_vend_ott_c: {type: "number"},
|
||||
qta_vend_nov_c: {type: "number"},
|
||||
qta_vend_dic_c: {type: "number"},
|
||||
id_bdg: {type: "number"},
|
||||
id_row: {type: "number"}
|
||||
}
|
||||
}
|
||||
},
|
||||
sort: [
|
||||
{
|
||||
field: "cod_mart",
|
||||
dir: "asc"
|
||||
}
|
||||
],
|
||||
serverPaging: false,
|
||||
serverFiltering: false,
|
||||
serverSorting: false
|
||||
},
|
||||
scrollable: false,
|
||||
sortable: true,
|
||||
filterable: false,
|
||||
pageable: false,
|
||||
columns
|
||||
});
|
||||
|
||||
detailGrid.css("max-width", "33%");
|
||||
},
|
||||
dataBound: (e) => {
|
||||
$(".k-grouping-row").each(function () {
|
||||
const groupKey = rowGroupKey($(this), e.sender);
|
||||
@@ -750,8 +871,9 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
const budget = e.model as Budget;
|
||||
|
||||
if (e.values?.qta_bdg_vend) {
|
||||
budget.set("perc_variaz_ap", budget.qta_vend_anno_p && e.values.qta_bdg_vend / budget.qta_vend_anno_p * 100 || 0);
|
||||
budget.set("perc_budget", budget.qta_bdg_vend && e.values.qta_vend_anno_c / budget.qta_bdg_vend * 100 || 0);
|
||||
budget.set("perc_variaz_ap", budget.qta_vend_anno_p && e.values.qta_bdg_vend / budget.qta_vend_anno_p * 100 || 100);
|
||||
budget.set("perc_budget", e.values.qta_bdg_vend && budget.qta_vend_anno_c / e.values.qta_bdg_vend * 100 || 0);
|
||||
budget.set("crit", e.values.qta_bdg_vend / 12 * (moment().month() + 1) < budget.qta_vend_anno_c ? "negative" : "positive");
|
||||
|
||||
refresh = true;
|
||||
}
|
||||
@@ -768,6 +890,9 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
}
|
||||
});
|
||||
|
||||
this.kendoGrid.element.find(".k-grid-toolbar").first().addClass("k-grid-toolbar-sticky");
|
||||
this.kendoGrid.element.find(".k-grid-header").first().addClass("k-grid-header-sticky");
|
||||
|
||||
$("#saveChanges").on("click", () => {
|
||||
this.kendoGrid.saveChanges();
|
||||
});
|
||||
@@ -956,6 +1081,16 @@ export default class RossogargAnalisiBudget extends AnalisiBudget {
|
||||
return ret?.returnData as RetGetAnalisiBudget;
|
||||
}
|
||||
|
||||
async getDetailBudget(data: object) {
|
||||
const ret = await this.ajax()
|
||||
.get("getDetailBudget")
|
||||
.data(data)
|
||||
.noticeAsModal()
|
||||
.execute();
|
||||
|
||||
return ret?.returnData;
|
||||
}
|
||||
|
||||
async updateAnalisiBudget(budget: Budget) {
|
||||
const ret = await this.ajax()
|
||||
.post("updateAnalisiBudget")
|
||||
|
||||
@@ -40,8 +40,9 @@ class AnalisiBudgetRossogargano extends AnalisiBudget {
|
||||
if ($ret->is_OK()) {
|
||||
$budget = from($ret->get_data())
|
||||
->select(function ($row) {
|
||||
$row["perc_variaz_ap"] = $row["qta_bdg_vend"] / ($row["qta_vend_anno_p"] ?: 1) * 100;
|
||||
$row["perc_variaz_ap"] = $row["qta_bdg_vend"] == 0 ? 0 : ($row["qta_vend_anno_p"] == 0 ? 100 : $row["qta_bdg_vend"] / $row["qta_vend_anno_p"] * 100);
|
||||
$row["perc_budget"] = $row["qta_bdg_vend"] == 0 ? 0 : $row["qta_vend_anno_c"] / $row["qta_bdg_vend"] * 100;
|
||||
$row["crit"] = $row["qta_bdg_vend"] / 12 * date("n") < $row["qta_vend_anno_c"] ? "negative" : "positive";
|
||||
|
||||
return $row;
|
||||
})
|
||||
@@ -57,4 +58,43 @@ class AnalisiBudgetRossogargano extends AnalisiBudget {
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public static function getDetailBudget($data) {
|
||||
$codSl = array_get($data, "codSl");
|
||||
$codAnag = array_get($data, "codAnag");
|
||||
|
||||
if (is_null($codSl) || is_null($codAnag)) {
|
||||
$ret = new Ret();
|
||||
return $ret->set_error("Dati mancanti in getDetailAnalisiBudget.");
|
||||
}
|
||||
|
||||
$query = KendoService::queryInitializerService(
|
||||
$data,
|
||||
PATH_HOME . "sql" . DIRECTORY_SEPARATOR . "get-detail-budget.sql",
|
||||
"cod_mart"
|
||||
);
|
||||
|
||||
$query
|
||||
->setVar("codSl", $codSl)
|
||||
->setVar("codAnag", $codAnag);
|
||||
|
||||
$ret = $query->toRet()->execute();
|
||||
|
||||
if ($ret->is_OK()) {
|
||||
$budget = from($ret->get_data())
|
||||
->select(function ($row) {
|
||||
return $row;
|
||||
})
|
||||
->toArray();
|
||||
|
||||
$firstRow = reset($budget);
|
||||
|
||||
$ret->set_data(array(
|
||||
"data" => $budget,
|
||||
"total" => array_get($firstRow, "rows_count", 0)
|
||||
));
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
SELECT cod_anag,
|
||||
rag_soc,
|
||||
citta,
|
||||
provincia,
|
||||
nazione,
|
||||
formato,
|
||||
famiglia,
|
||||
CodSemilavorato,
|
||||
cod_mart,
|
||||
descrizione,
|
||||
articolo,
|
||||
giacenza,
|
||||
unt_mis,
|
||||
anno_pp,
|
||||
anno_p,
|
||||
anno_c,
|
||||
importo_anno_pp,
|
||||
importo_anno_p,
|
||||
importo_anno_c,
|
||||
qta_vend_anno_pp,
|
||||
qta_vend_anno_p,
|
||||
qta_vend_anno_c,
|
||||
qta_vend_gen_c,
|
||||
qta_vend_feb_c,
|
||||
qta_vend_mar_c,
|
||||
qta_vend_apr_c,
|
||||
qta_vend_mag_c,
|
||||
qta_vend_giu_c,
|
||||
qta_vend_lug_c,
|
||||
qta_vend_ago_c,
|
||||
qta_vend_set_c,
|
||||
qta_vend_ott_c,
|
||||
qta_vend_nov_c,
|
||||
qta_vend_dic_c
|
||||
FROM RG_AnalisiBudgetDetail
|
||||
WHERE CodSemilavorato = '[codSl]'
|
||||
AND cod_anag = '[codAnag]'
|
||||
@@ -5,7 +5,7 @@ class AnalisiBudget {
|
||||
$Ret = new Ret;
|
||||
if ($Ret->is_OK()) {
|
||||
$retData = array(
|
||||
array("id" => "name", "data" => array()),
|
||||
array("id" => "canEditBudgets", "data" => User::isGestioneAbilitata("gestione_budget")),
|
||||
);
|
||||
$Ret->set_data($retData);
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
div#content{margin:1rem 1rem 5rem}#tableAnalisiBudget td:has(.text-vend)>.text-vend{color:#090}#tableAnalisiBudget td:has(.text-racc)>.text-racc{color:red}#tableAnalisiBudget td{overflow:hidden;text-overflow:ellipsis}#tableAnalisiBudget .k-grid-toolbar{position:sticky;top:51px;z-index:1}#tableAnalisiBudget .k-grid-header{position:sticky;top:98px;z-index:1}#tableAnalisiBudget .k-header .k-link .k-column-title{margin-left:auto !important;margin-right:auto !important}#tableAnalisiBudget .toolbar-item{flex:1 0 20%}#tableAnalisiBudget .k-grouping-row{text-align:right}#tableAnalisiBudget.k-grid .k-grouping-row td{border-bottom-width:1px}/*# sourceMappingURL=main.css.map */
|
||||
div#content{margin:1rem 1rem 5rem}#tableAnalisiBudget td:has(.text-vend)>.text-vend{color:#090}#tableAnalisiBudget td:has(.text-racc)>.text-racc{color:red}#tableAnalisiBudget td:has(.text-positive)>.text-positive{color:#090}#tableAnalisiBudget td:has(.text-negative)>.text-negative{color:red}#tableAnalisiBudget td{overflow:hidden;text-overflow:ellipsis}#tableAnalisiBudget .k-detail-row{background-color:#ffffb3}#tableAnalisiBudget .k-grid-toolbar-sticky{position:sticky;top:51px;z-index:1}#tableAnalisiBudget .k-grid-header-sticky{position:sticky;top:98px;z-index:1}#tableAnalisiBudget .k-header .k-link .k-column-title{margin-left:auto !important;margin-right:auto !important}#tableAnalisiBudget .toolbar-item{flex:1 0 20%}#tableAnalisiBudget .k-grouping-row{text-align:right}#tableAnalisiBudget.k-grid .k-grouping-row td{border-bottom-width:1px}/*# sourceMappingURL=main.css.map */
|
||||
|
||||
@@ -24,18 +24,30 @@ div#content {
|
||||
color: red;
|
||||
}
|
||||
|
||||
td:has(.text-positive) > .text-positive {
|
||||
color: #009900;
|
||||
}
|
||||
|
||||
td:has(.text-negative) > .text-negative {
|
||||
color: red;
|
||||
}
|
||||
|
||||
td {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.k-grid-toolbar {
|
||||
.k-detail-row {
|
||||
background-color: rgb(255, 255, 179);
|
||||
}
|
||||
|
||||
.k-grid-toolbar-sticky {
|
||||
position: sticky;
|
||||
top: 51px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.k-grid-header {
|
||||
.k-grid-header-sticky {
|
||||
position: sticky;
|
||||
top: calc(51px + 47px);
|
||||
z-index: 1;
|
||||
|
||||
@@ -674,7 +674,7 @@ class DeliveryPlan {
|
||||
->set("posRiga", $row["pos_riga"])
|
||||
->setDate("dataCons", $row["data_cons"])
|
||||
->set("codMart", $row["cod_mart"])
|
||||
->set("partitaMag", array_get($row, "partita_mag"))
|
||||
->set("partitaMag", array_get($row, "partita_mag"), true)
|
||||
->set("valUnt", $row["val_unt"])
|
||||
->set("qtaCnf", $row["qta_cnf"])
|
||||
->set("qtaOrd", $row["qta_ord"])
|
||||
|
||||
@@ -36,7 +36,7 @@ foreach ($arr_userMenuItems as $i => $menuGroup) {
|
||||
?>
|
||||
<a href="#" data-popup_href="<?= $menuItem["href"] ?>">
|
||||
<img src="<?= $menuItem["icon"] ?>"/>
|
||||
<div><?= $menuItem["title"] ?></div>
|
||||
<div><?= array_get($menuItem, "shortTitle") ?: $menuItem["title"]; ?></div>
|
||||
</a><?
|
||||
} else { ?>
|
||||
<a href="<?= $menuItem["href"] ?>" style="position:relative;"><?
|
||||
@@ -47,7 +47,7 @@ foreach ($arr_userMenuItems as $i => $menuGroup) {
|
||||
</div><?
|
||||
} ?>
|
||||
<img src="<?= $menuItem["icon"] ?>"/>
|
||||
<div><?= $menuItem["title"] ?></div>
|
||||
<div><?= array_get($menuItem, "shortTitle") ?: $menuItem["title"]; ?></div>
|
||||
</a><?
|
||||
}
|
||||
} ?>
|
||||
|
||||
@@ -33,8 +33,8 @@ foreach ($arr_userMenuItems as $i => $menuGroup) {
|
||||
</div>
|
||||
<div class="col-sm-8 col-xs-8 option-title">
|
||||
<div>
|
||||
<div><?
|
||||
echo $menuItem["title"];
|
||||
<div><?=
|
||||
array_get($menuItem, "shortTitle") ?: $menuItem["title"];
|
||||
if (!is_null($menuItem["notification"])) {
|
||||
?>
|
||||
<div class="badge badge-success"><?= $menuItem["notification"] ?></div><?
|
||||
|
||||
@@ -181,7 +181,7 @@ class MacchinariProd {
|
||||
foreach (array_get($data, "filters", array()) as $filter) {
|
||||
$filterType = array_get($filter, "filterType");
|
||||
if ($filterType == 2 || $filterType == 3) {
|
||||
$query->setDateVar(array_get($filter, "paramName"), array_get($filter, "value"));
|
||||
$query->setDatetimeVar(array_get($filter, "paramName"), array_get($filter, "value"));
|
||||
} else {
|
||||
$query->setVar(array_get($filter, "paramName"), array_get($filter, "value"));
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ const macchinarioContent = {
|
||||
self.eventHistory = eventHistory.init(self);
|
||||
self.maintenanceHistory = new MaintenanceHistory();
|
||||
self.extraActions = [];
|
||||
self.charts = [];
|
||||
self.store = store({
|
||||
data: undefined,
|
||||
}, self.targetId);
|
||||
@@ -206,10 +207,11 @@ const macchinarioContent = {
|
||||
|
||||
|
||||
$container.find("#emptyChartsCallout").toggle(_.isEmpty(charts));
|
||||
|
||||
console.log(self.charts)
|
||||
|
||||
_.forEach(charts, chart => {
|
||||
let model = _.find(self.charts, {id: chart.id});
|
||||
console.log(model)
|
||||
if (_.isNil(model)) {
|
||||
model = machineCharts.init(chart, self);
|
||||
model.setEl(self.el.find("#chartsContainer"));
|
||||
@@ -226,6 +228,7 @@ const macchinarioContent = {
|
||||
onHide() {
|
||||
const self = this;
|
||||
self.extraActions = [];
|
||||
self.charts = [];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,13 +47,7 @@ const machineCharts = {
|
||||
.noticeAsToast()
|
||||
.execute((ret) => {
|
||||
let chartData = ret.returnData;
|
||||
|
||||
if (repeat) {
|
||||
_.delay(_.bind(self.load, self), 20000);
|
||||
}
|
||||
|
||||
const ctx = document.getElementById(self.id);
|
||||
console.log(self.chart);
|
||||
if (!_.isNil(self.chart)) {
|
||||
self.chart.destroy();
|
||||
}
|
||||
@@ -66,7 +60,10 @@ const machineCharts = {
|
||||
datasets: [{
|
||||
label: "Temperatura Tank (°C)",
|
||||
data: _.map(chartData, (z) => parseFloat(z.y.replace(",", "."))),
|
||||
fill: false,
|
||||
fill: {
|
||||
target: "origin",
|
||||
above: "rgb(51, 122, 183,0.3)", // Area will be red above the origin
|
||||
},
|
||||
borderColor: "rgb(51, 122, 183)",
|
||||
tension: 0.1
|
||||
}]
|
||||
@@ -103,8 +100,8 @@ const machineCharts = {
|
||||
showCustomRangeLabel: false,
|
||||
showDropdowns: true,
|
||||
opens: "left",
|
||||
startDate: moment(),
|
||||
endDate: moment(),
|
||||
startDate: moment().startOf("day"),
|
||||
endDate: moment().endOf("day"),
|
||||
ranges: {
|
||||
"Oggi": [moment(), moment()],
|
||||
"Domani": [moment().add(1, "days"), moment().add(1, "days")],
|
||||
@@ -122,10 +119,10 @@ const machineCharts = {
|
||||
$datefilter.on("apply.daterangepicker", (a, picker) => {
|
||||
self.chartInfo.filters = _.map(self.chartInfo.filters, filter => {
|
||||
if (filter.paramName === "dataIniz") {
|
||||
filter.value = picker.startDate.unix()
|
||||
filter.value = picker.startDate.startOf("day").unix()
|
||||
}
|
||||
if (filter.paramName === "dataFine") {
|
||||
filter.value = picker.endDate.unix()
|
||||
filter.value = picker.endDate.endOf("day").unix()
|
||||
}
|
||||
return filter;
|
||||
})
|
||||
|
||||
@@ -195,7 +195,7 @@ const _kendo = {
|
||||
const ret = {};
|
||||
|
||||
if (column.columns) {
|
||||
ret.columns = mapSaveColumns(column.columns)
|
||||
ret.columns = mapSaveColumns(column.columns);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -349,6 +349,11 @@ const _kendo = {
|
||||
}).data("kendoGrid");
|
||||
|
||||
if (kendoOptions) {
|
||||
const flatColumns = (columns) => {
|
||||
return columns
|
||||
.flatMap(column => [column, ...column.columns && flatColumns(column.columns) || []]);
|
||||
};
|
||||
|
||||
const mapSavedColumns = columns => {
|
||||
columns = columns.map(savedColumn => {
|
||||
if (savedColumn.columns) {
|
||||
@@ -356,8 +361,7 @@ const _kendo = {
|
||||
}
|
||||
|
||||
return ({
|
||||
...options.columns
|
||||
.flatMap(column => [column, ...column.columns || []])
|
||||
...flatColumns(options.columns)
|
||||
.find(column => savedColumn.id === column.id),
|
||||
...savedColumn
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user