Merge branch 'develop' into feature/Integry_Password_RegoleComplessità

This commit is contained in:
2023-06-16 12:20:33 +02:00
18 changed files with 319 additions and 89 deletions

3
.idea/misc.xml generated
View File

@@ -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>

View File

@@ -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;

View File

@@ -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

View File

@@ -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",

View File

@@ -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;

View File

@@ -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")

View File

@@ -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;
}
}

View File

@@ -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]'

View File

@@ -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);
}

View File

@@ -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 */

View File

@@ -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;

View File

@@ -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"])

View File

@@ -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><?
}
} ?>

View File

@@ -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><?

View File

@@ -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"));
}

View File

@@ -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 = [];
}
}

View File

@@ -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;
})

View File

@@ -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
});