Copiata analisi budget di agricoper in of demo
This commit is contained in:
@@ -0,0 +1,941 @@
|
||||
import AnalisiBudget from "@gest-lib/analisi_budget/ts/AnalisiBudget";
|
||||
import {monospace} from "@js/utils";
|
||||
|
||||
const {store} = reef;
|
||||
|
||||
export interface RetGetAnalisiBudget {
|
||||
data: Array<Budget>
|
||||
total: number
|
||||
}
|
||||
|
||||
export interface Budget extends kendo.data.Model {
|
||||
causale: string
|
||||
macroclasse?: string
|
||||
classe?: string
|
||||
id_bdg?: number
|
||||
id_row?: number
|
||||
cod_mart: string
|
||||
articolo: string
|
||||
cod_anag: string
|
||||
rag_soc: string
|
||||
QtaBdgVend: number
|
||||
QtaVend: number
|
||||
saldoBudget: number
|
||||
QtaPrevAcq: number
|
||||
QtaConsAcq: number
|
||||
QtaOrdVendSetC: number
|
||||
QtaVendSetC: number
|
||||
QtaOrdVendSetP: number
|
||||
QtaPrevAcqSetP: number
|
||||
QtaPrevAcqSetPPremium: number
|
||||
QtaPrevAcqSetPClas1: number
|
||||
QtaPrevAcqSetPClas2: number
|
||||
QtaOrdVendSetPP: number
|
||||
QtaPrevAcqSetPP: number
|
||||
QtaPrevAcqSetPPPremium: number
|
||||
QtaPrevAcqSetPPClas1: number
|
||||
QtaPrevAcqSetPPClas2: number
|
||||
unt_mis: string
|
||||
saldoDisp: number
|
||||
QtaBdgResiduo: number
|
||||
QtaPrevResidua: number
|
||||
valQtaPrevAcqSetPPremium: number
|
||||
valQtaPrevAcqSetPClas1: number
|
||||
valQtaPrevAcqSetPClas2: number
|
||||
valQtaPrevAcqSetPPPremium: number
|
||||
valQtaPrevAcqSetPPClas1: number
|
||||
valQtaPrevAcqSetPPClas2: number
|
||||
}
|
||||
|
||||
const LAST_ID_BDG_KEY = "LAST_ID_BDG";
|
||||
|
||||
export default class AgricoperAnalisiBudget extends AnalisiBudget {
|
||||
private readonly store: {
|
||||
idBdg: string
|
||||
}
|
||||
private readonly columns: Array<kendo.ui.GridColumn>
|
||||
private readonly dataSourceGrid: kendo.data.DataSource
|
||||
private kendoGrid: kendo.ui.Grid
|
||||
|
||||
constructor(selector: string) {
|
||||
super(selector);
|
||||
|
||||
this.store = store({
|
||||
idBdg: undefined
|
||||
});
|
||||
|
||||
this.columns = _kendo.setDefaultCellOptions([
|
||||
{
|
||||
id: "9a8530c1-0f83-4ae2-9db3-9fc8400540b0",
|
||||
field: "macroclasse",
|
||||
title: "Macro Varietà",
|
||||
type: "string",
|
||||
hidden: true,
|
||||
groupHeaderTemplate: data => data.value
|
||||
},
|
||||
{
|
||||
id: "e5a4e4e1-d906-4328-a4c3-fd6970f7d665",
|
||||
field: "classe",
|
||||
title: "Varietà",
|
||||
type: "string",
|
||||
hidden: true,
|
||||
groupHeaderTemplate: data => data.value
|
||||
},
|
||||
{
|
||||
id: "8d6ad373-320f-4154-bac3-fbbe794f1ba2",
|
||||
field: "causale",
|
||||
title: "Causale",
|
||||
type: "string",
|
||||
hidden: true,
|
||||
groupHeaderTemplate: data => data.value
|
||||
},
|
||||
{
|
||||
id: "3d838c6f-3fbd-4f5e-8a20-00a79c076614",
|
||||
field: "id_bdg",
|
||||
title: "Id",
|
||||
type: "number",
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
id: "48b23529-1033-4e3e-87b8-be470390d844",
|
||||
field: "id_row",
|
||||
title: "Id riga",
|
||||
type: "number",
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
id: "8ff16795-45b2-41f2-860a-9884daaa1186",
|
||||
field: "rag_soc",
|
||||
title: "Rag. Soc.",
|
||||
type: "string",
|
||||
hidden: true,
|
||||
groupHeaderTemplate: data => data.value
|
||||
},
|
||||
{
|
||||
id: "998f6668-ec77-4cd5-90a4-ce5b147d5444",
|
||||
field: "cliente",
|
||||
title: "Cliente",
|
||||
type: "string",
|
||||
attributes: {
|
||||
class: "!k-text-left"
|
||||
},
|
||||
filterable: {
|
||||
extra: false,
|
||||
operators: {
|
||||
string: {
|
||||
contains: "Contiene",
|
||||
doesnotcontain: "Non contiene"
|
||||
}
|
||||
}
|
||||
},
|
||||
editable: () => false,
|
||||
groupHeaderTemplate: data => data.value
|
||||
},
|
||||
{
|
||||
id: "4f4eef39-0e44-4b9a-adfd-c44cc8186b38",
|
||||
title: `TOTALE VENDITE ${new Date().getFullYear()}`,
|
||||
columns: [
|
||||
{
|
||||
id: "c9eff092-d6d5-4f08-86e4-d3d4b11f9c86",
|
||||
field: "QtaBdgVend",
|
||||
title: "Budget<br>Vendite Tot",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right cursor-pointer"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: ({id_bdg, id_row}) => id_bdg && id_row,
|
||||
template: (data: Budget) => data.QtaBdgVend && this.numberFormat(data.QtaBdgVend) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaBdgVend}) => QtaBdgVend?.sum && this.numberFormat(QtaBdgVend.sum) || "",
|
||||
editor: (container, options) => {
|
||||
$(`<input name=${options.field}>`)
|
||||
.appendTo(container)
|
||||
.kendoNumericTextBox({
|
||||
spinners: false,
|
||||
selectOnFocus: true
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "eacfe6c1-66ee-4559-a053-a554f716ad0b",
|
||||
field: "QtaVend",
|
||||
title: "Qta<br>Vendute",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaVend && this.numberFormat(data.QtaVend) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaVend}) => QtaVend?.sum && this.numberFormat(QtaVend.sum) || ""
|
||||
},
|
||||
{
|
||||
id: "d6603b73-faa8-4a17-b0b2-8cd9e04d43e1",
|
||||
field: "saldoBudget",
|
||||
title: "Saldo<br>Budget",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.saldoBudget && this.numberFormat(data.saldoBudget) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({saldoBudget, saldoDisp}) =>
|
||||
saldoBudget?.sum &&
|
||||
this.numberFormat(saldoBudget.sum, saldoDisp?.sum < saldoBudget.sum ? "negative" : "positive") || ""
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "906fe3e1-3147-409a-af66-57c678e6601e",
|
||||
title: `TOTALI RACCOLTA ${moment().year()}`,
|
||||
columns: [
|
||||
{
|
||||
id: "da8c3af4-4545-4731-8635-7c7472937d03",
|
||||
field: "QtaPrevAcq",
|
||||
title: "Qta Racc.<br>Prevista",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: true,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcq && this.numberFormat(data.QtaPrevAcq) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcq}) => QtaPrevAcq?.sum && this.numberFormat(QtaPrevAcq.sum) || ""
|
||||
},
|
||||
{
|
||||
id: "fdcc5612-148b-4b73-98ef-9173e0697891",
|
||||
field: "QtaConsAcq",
|
||||
title: "Qta Già<br>Raccolta",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaConsAcq && this.numberFormat(data.QtaConsAcq) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaConsAcq}) => QtaConsAcq?.sum && this.numberFormat(QtaConsAcq.sum) || ""
|
||||
},
|
||||
{
|
||||
id: "693988bc-41ab-4b5a-8119-f52470849376",
|
||||
field: "saldoDisp",
|
||||
title: "Saldo<br>Disponibile",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.saldoDisp && this.numberFormat(data.saldoDisp) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({saldoDisp, saldoBudget}) =>
|
||||
saldoDisp?.sum &&
|
||||
this.numberFormat(saldoDisp.sum, saldoDisp.sum < saldoBudget?.sum ? "negative" : "positive") || ""
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "65499819-8d5a-4ae1-be29-172ee8a9f3f1",
|
||||
title: `SETTIMANA ${moment().isoWeek()}`,
|
||||
columns: [
|
||||
{
|
||||
id: "bf487217-d482-44a5-91e7-f3bfb4b1041c",
|
||||
field: "QtaOrdVendSetC",
|
||||
title: "Qta<br>Budget",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaOrdVendSetC && this.numberFormat(data.QtaOrdVendSetC) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaOrdVendSetC, QtaVendSetC}) =>
|
||||
QtaOrdVendSetC?.sum &&
|
||||
this.numberFormat(QtaOrdVendSetC.sum, QtaOrdVendSetC?.sum < QtaVendSetC.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "3eac6ed7-a62f-4fe2-bfcc-b0c22fa0133c",
|
||||
field: "QtaVendSetC",
|
||||
title: "Qta<br>Vendute",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaVendSetC && this.numberFormat(data.QtaVendSetC) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaVendSetC, QtaOrdVendSetC}) =>
|
||||
QtaVendSetC?.sum &&
|
||||
this.numberFormat(QtaVendSetC.sum, QtaOrdVendSetC?.sum < QtaVendSetC.sum ? "negative" : "positive") || ""
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "9ce8091c-2514-4bd7-9840-c6db56493c39",
|
||||
title: `SETTIMANA ${moment().isoWeek() + 1}`,
|
||||
columns: [
|
||||
{
|
||||
id: "fa63a08d-02f6-4896-901c-ef60ceb4ef30",
|
||||
field: "QtaOrdVendSetP",
|
||||
title: "Budget<br>Vendite",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaOrdVendSetP && this.numberFormat(data.QtaOrdVendSetP) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaOrdVendSetP, QtaPrevAcqSetP}) =>
|
||||
QtaOrdVendSetP?.sum &&
|
||||
this.numberFormat(QtaOrdVendSetP.sum, QtaPrevAcqSetP?.sum < QtaOrdVendSetP.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "f46bd2de-07a7-4b4d-99b7-03ea4a75fbf7",
|
||||
field: "QtaPrevAcqSetP",
|
||||
title: "Qta Racc.<br>Prevista",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: true,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetP && this.numberFormat(data.QtaPrevAcqSetP) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetP, QtaOrdVendSetP}) =>
|
||||
QtaPrevAcqSetP?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetP.sum, QtaPrevAcqSetP.sum < QtaOrdVendSetP?.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "7eef5256-c8ad-47a0-9412-edf642d19a47",
|
||||
field: "QtaPrevAcqSetPPremium",
|
||||
title: "Qta<br>Premium",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetPPremium
|
||||
&& this.numberFormat(data.QtaPrevAcqSetPPremium/* , undefined, "", "%"*/) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetPPremium}) =>
|
||||
QtaPrevAcqSetPPremium?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetPPremium.sum/* / QtaPrevAcqSetP?.sum * 100, undefined, "", "%"*/) || ""
|
||||
},
|
||||
{
|
||||
id: "8ec1d89f-4230-4150-8bd8-d7e1c3a279e7",
|
||||
field: "QtaPrevAcqSetPClas1",
|
||||
title: "Qta<br>Classe 1",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetPClas1
|
||||
&& this.numberFormat(data.QtaPrevAcqSetPClas1/*, undefined, "", "%"*/) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetPClas1}) =>
|
||||
QtaPrevAcqSetPClas1?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetPClas1.sum/*/ QtaPrevAcqSetP?.sum * 100, undefined, "", "%"*/) || ""
|
||||
},
|
||||
{
|
||||
id: "ff5412fb-511f-46e3-9271-71d3956aa399",
|
||||
field: "QtaPrevAcqSetPClas2",
|
||||
title: "Qta<br>Classe 2",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetPClas2
|
||||
&& this.numberFormat(data.QtaPrevAcqSetPClas2/*, undefined, "", "%"*/) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetPClas2}) =>
|
||||
QtaPrevAcqSetPClas2?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetPClas2.sum/* / QtaPrevAcqSetP?.sum * 100, undefined, "", "%"*/) || ""
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "53d1b4d0-f56d-4480-8a5b-e767eb148489",
|
||||
title: `SETTIMANA ${moment().isoWeek() + 2}`,
|
||||
columns: [
|
||||
{
|
||||
id: "8172513d-c6c7-4c14-93e2-d75a0a165801",
|
||||
field: "QtaOrdVendSetPP",
|
||||
title: "Budget<br>Vendite",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-positive"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaOrdVendSetPP && this.numberFormat(data.QtaOrdVendSetPP) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaOrdVendSetPP, QtaPrevAcqSetPP}) =>
|
||||
QtaOrdVendSetPP?.sum &&
|
||||
this.numberFormat(QtaOrdVendSetPP.sum, QtaPrevAcqSetPP?.sum < QtaOrdVendSetPP.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "04504e29-b3fd-4efa-ba69-844694a2e4ea",
|
||||
field: "QtaPrevAcqSetPP",
|
||||
title: "Qta Racc.<br>Prevista",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-right"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: true,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetPP && this.numberFormat(data.QtaPrevAcqSetPP) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetPP, QtaOrdVendSetP}) =>
|
||||
QtaPrevAcqSetPP?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetPP.sum, QtaPrevAcqSetPP.sum < QtaOrdVendSetP?.sum ? "negative" : "positive") || ""
|
||||
},
|
||||
{
|
||||
id: "ac057b8d-e2e5-4db3-8aee-382025569934",
|
||||
field: "QtaPrevAcqSetPPPremium",
|
||||
title: "Qta<br>Premium",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetPPPremium
|
||||
&& this.numberFormat(data.QtaPrevAcqSetPPPremium/*, undefined, "", "%"*/) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetPPPremium}) =>
|
||||
QtaPrevAcqSetPPPremium?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetPPPremium.sum/* / QtaPrevAcqSetPP?.sum * 100, undefined, "", "%"*/) || ""
|
||||
},
|
||||
{
|
||||
id: "48d7fc12-83b5-4b3e-aac2-cbb79b37ece0",
|
||||
field: "QtaPrevAcqSetPPClas1",
|
||||
title: "Qta<br>Classe 1",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetPPClas1
|
||||
&& this.numberFormat(data.QtaPrevAcqSetPPClas1/*, undefined, "", "%"*/) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetPPClas1}) =>
|
||||
QtaPrevAcqSetPPClas1?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetPPClas1.sum/* / QtaPrevAcqSetPP?.sum * 100, undefined, "", "%"*/) || ""
|
||||
},
|
||||
{
|
||||
id: "ecd5ce01-451e-4158-ad83-c2cd36fa02b8",
|
||||
field: "QtaPrevAcqSetPPClas2",
|
||||
title: "Qta<br>Classe 2",
|
||||
type: "number",
|
||||
attributes: {
|
||||
class: "!k-text-center"
|
||||
},
|
||||
headerAttributes: {
|
||||
class: "text-negative"
|
||||
},
|
||||
filterable: false,
|
||||
groupable: false,
|
||||
editable: () => false,
|
||||
template: (data: Budget) => data.QtaPrevAcqSetPPClas2
|
||||
&& this.numberFormat(data.QtaPrevAcqSetPPClas2/*, undefined, "", "%"*/) || "",
|
||||
aggregates: ["sum"],
|
||||
groupHeaderColumnTemplate: ({QtaPrevAcqSetPPClas2}) =>
|
||||
QtaPrevAcqSetPPClas2?.sum &&
|
||||
this.numberFormat(QtaPrevAcqSetPPClas2.sum/* / QtaPrevAcqSetPP?.sum * 100, undefined, "", "%"*/) || ""
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// id: "f015525c-9800-4bac-909d-9dd0baa30667",
|
||||
// title: `SETTIMANE FUTURE`,
|
||||
// columns: [
|
||||
// {
|
||||
// id: "65089b9a-cf16-4c79-b996-96588696028f",
|
||||
// field: "QtaBdgResiduo",
|
||||
// title: "Bdg. Vend.<br>Residuo",
|
||||
// type: "number",
|
||||
// attributes: {
|
||||
// class: "!k-text-right"
|
||||
// },
|
||||
// headerAttributes: {
|
||||
// class: "text-positive"
|
||||
// },
|
||||
// filterable: false,
|
||||
// groupable: false,
|
||||
// editable: () => false,
|
||||
// template: (data: Budget) => data.QtaBdgResiduo && this.numberFormat(data.QtaBdgResiduo) || "",
|
||||
// aggregates: ["sum"],
|
||||
// groupHeaderColumnTemplate: ({QtaBdgResiduo, QtaPrevResidua}) =>
|
||||
// QtaBdgResiduo?.sum &&
|
||||
// this.numberFormat(QtaBdgResiduo.sum, QtaPrevResidua?.sum < QtaBdgResiduo.sum ? "negative" : "positive") || ""
|
||||
// },
|
||||
// {
|
||||
// id: "7b44f0f1-40e5-4d87-b928-860c996c8df6",
|
||||
// field: "QtaPrevResidua",
|
||||
// title: "Qta Da<br>Raccogliere<br>Residua",
|
||||
// type: "number",
|
||||
// attributes: {
|
||||
// class: "!k-text-right"
|
||||
// },
|
||||
// headerAttributes: {
|
||||
// class: "text-negative"
|
||||
// },
|
||||
// filterable: false,
|
||||
// groupable: false,
|
||||
// editable: () => false,
|
||||
// template: (data: Budget) => data.QtaPrevResidua && this.numberFormat(data.QtaPrevResidua) || "",
|
||||
// aggregates: ["sum"],
|
||||
// groupHeaderColumnTemplate: ({QtaPrevResidua, QtaBdgResiduo}) =>
|
||||
// QtaPrevResidua?.sum &&
|
||||
// this.numberFormat(QtaPrevResidua.sum, QtaPrevResidua.sum < QtaBdgResiduo?.sum ? "negative" : "positive") || ""
|
||||
// }
|
||||
// ]
|
||||
// }
|
||||
]);
|
||||
|
||||
const aggregates = [
|
||||
{field: "QtaBdgVend", aggregate: "sum"},
|
||||
{field: "QtaVend", aggregate: "sum"},
|
||||
{field: "saldoBudget", aggregate: "sum"},
|
||||
{field: "QtaPrevAcq", aggregate: "sum"},
|
||||
{field: "QtaConsAcq", aggregate: "sum"},
|
||||
{field: "saldoDisp", aggregate: "sum"},
|
||||
{field: "QtaOrdVendSetP", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetP", aggregate: "sum"},
|
||||
{field: "QtaOrdVendSetPP", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetPP", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetPPremium", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetPClas1", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetPClas2", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetPPPremium", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetPPClas1", aggregate: "sum"},
|
||||
{field: "QtaPrevAcqSetPPClas2", aggregate: "sum"},
|
||||
{field: "qtaBdgResiduo", aggregate: "sum"},
|
||||
{field: "qtaPrevResidua", aggregate: "sum"},
|
||||
{field: "QtaOrdVendSetC", aggregate: "sum"},
|
||||
{field: "QtaVendSetC", aggregate: "sum"},
|
||||
];
|
||||
|
||||
this.dataSourceGrid = new kendo.data.DataSource({
|
||||
transport: {
|
||||
read: async (options) => {
|
||||
_kendo.checkFilterValuesColumns(
|
||||
options.data.filter,
|
||||
this.columns
|
||||
);
|
||||
|
||||
try {
|
||||
const data = await this.getAnalisiBudget({
|
||||
idBdg: this.store.idBdg,
|
||||
...options.data,
|
||||
filter: {
|
||||
filters: [
|
||||
...options.data.filter?.filters || []
|
||||
],
|
||||
logic: "and"
|
||||
}
|
||||
});
|
||||
|
||||
options.success(data);
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
options.success([]);
|
||||
}
|
||||
},
|
||||
update: async (options) => {
|
||||
try {
|
||||
options.success(await this.updateAnalisiBudget(options.data));
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
options.error(e);
|
||||
}
|
||||
}
|
||||
},
|
||||
batch: true,
|
||||
schema: {
|
||||
data: "data",
|
||||
total: "total",
|
||||
model: {
|
||||
id: "row_number",
|
||||
fields: {
|
||||
row_number: {type: "number"},
|
||||
causale: {type: "string"},
|
||||
macroclasse: {type: "string"},
|
||||
classe: {type: "string"},
|
||||
id_bdg: {type: "number"},
|
||||
id_row: {type: "number"},
|
||||
cod_mart: {type: "string"},
|
||||
articolo: {type: "string"},
|
||||
cod_anag: {type: "string"},
|
||||
rag_soc: {type: "string"},
|
||||
QtaBdgVend: {type: "number"},
|
||||
QtaVend: {type: "number"},
|
||||
saldoBudget: {type: "number"},
|
||||
QtaPrevAcq: {type: "number"},
|
||||
QtaConsAcq: {type: "number"},
|
||||
QtaOrdVendSetC: {type: "number"},
|
||||
QtaVendSetC: {type: "number"},
|
||||
saldoDisp: {type: "number"},
|
||||
QtaOrdVendSetP: {type: "number"},
|
||||
QtaPrevAcqSetP: {type: "number"},
|
||||
QtaPrevAcqSetPPremium: {type: "number"},
|
||||
QtaPrevAcqSetPClas1: {type: "number"},
|
||||
QtaPrevAcqSetPClas2: {type: "number"},
|
||||
QtaOrdVendSetPP: {type: "number"},
|
||||
QtaPrevAcqSetPP: {type: "number"},
|
||||
QtaPrevAcqSetPPPremium: {type: "number"},
|
||||
QtaPrevAcqSetPPClas1: {type: "number"},
|
||||
QtaPrevAcqSetPPClas2: {type: "number"},
|
||||
QtaBdgResiduo: {type: "number"},
|
||||
QtaPrevResidua: {type: "number"}
|
||||
}
|
||||
}
|
||||
},
|
||||
sort: [
|
||||
{
|
||||
field: "macroclasse",
|
||||
dir: "asc"
|
||||
},
|
||||
{
|
||||
field: "classe",
|
||||
dir: "asc"
|
||||
},
|
||||
{
|
||||
field: "causale",
|
||||
dir: "asc"
|
||||
},
|
||||
{
|
||||
field: "rag_soc",
|
||||
dir: "asc"
|
||||
}
|
||||
],
|
||||
group: [
|
||||
{
|
||||
field: "macroclasse",
|
||||
aggregates
|
||||
},
|
||||
{
|
||||
field: "classe",
|
||||
aggregates
|
||||
},
|
||||
{
|
||||
field: "causale",
|
||||
aggregates
|
||||
}
|
||||
],
|
||||
serverPaging: false,
|
||||
serverFiltering: false,
|
||||
serverSorting: false
|
||||
});
|
||||
}
|
||||
|
||||
async content(): Promise<string> {
|
||||
// language=HTML
|
||||
return `
|
||||
<div class="row mx-0">
|
||||
<div class="col-xs-12 col-lg-4 col-lg-offset-4 mb-10"
|
||||
style="display: flex; gap: 3px;">
|
||||
<div id="budgetSelector"></div>
|
||||
|
||||
${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>` || ""
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div id="contextMenuTableAnalisiBudget"></div>
|
||||
<div id="tableAnalisiBudget"></div>
|
||||
`;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
async onLoad() {
|
||||
await super.onLoad();
|
||||
|
||||
// this.$container.parents("#content").find("div").css("max-height", "88vh");
|
||||
|
||||
let elementsSet = false;
|
||||
|
||||
document.addEventListener("reef:store", async () => {
|
||||
if (this.store.idBdg && !elementsSet) {
|
||||
elementsSet = true;
|
||||
|
||||
const groupsOpen = {};
|
||||
|
||||
const rowGroupKey = (row: JQuery, grid: kendo.ui.Grid) => {
|
||||
const next = row.nextUntil("[data-uid]").next(),
|
||||
item = grid.dataItem(next.length ? next : row.next()),
|
||||
groupIdx = row.children(".k-group-cell").length,
|
||||
field = grid.dataSource.group()[groupIdx].field,
|
||||
groupValue = item[field];
|
||||
|
||||
return "" + groupIdx + groupValue;
|
||||
};
|
||||
|
||||
this.kendoGrid = await _kendo.savableTable(this.$container.find("#tableAnalisiBudget"), "ANALISI_BUDGET", {
|
||||
columns: this.columns,
|
||||
dataSource: this.dataSourceGrid,
|
||||
filterable: {
|
||||
mode: "menu"
|
||||
},
|
||||
sortable: {
|
||||
mode: "mixed"
|
||||
},
|
||||
pageable: false,
|
||||
reorderable: true,
|
||||
resizable: true,
|
||||
groupable: true,
|
||||
// height: "84vh",
|
||||
scrollable: false,
|
||||
editable: true,
|
||||
toolbar: [
|
||||
{
|
||||
// language=HTML
|
||||
template: `
|
||||
<button type="button"
|
||||
class="k-button k-button-md k-rounded-md k-button-solid k-button-solid-base"
|
||||
id="saveChanges">
|
||||
<span class="k-icon k-i-check k-button-icon"></span>
|
||||
<span class="k-button-text">Salva modifiche</span>
|
||||
</button>
|
||||
<button type="button"
|
||||
class="k-button k-button-md k-rounded-md k-button-solid k-button-solid-base ml-8"
|
||||
id="cancelChanges">
|
||||
<span class="k-icon k-i-cancel k-button-icon"></span>
|
||||
<span class="k-button-text">Annulla modifiche</span>
|
||||
</button>
|
||||
`
|
||||
}
|
||||
],
|
||||
dataBound: (e) => {
|
||||
$(".k-grouping-row").each(function () {
|
||||
const groupKey = rowGroupKey($(this), e.sender);
|
||||
|
||||
if (!groupsOpen[groupKey]) {
|
||||
e.sender.collapseGroup(this);
|
||||
}
|
||||
});
|
||||
},
|
||||
save: (e) => {
|
||||
const budget = e.model as Budget;
|
||||
|
||||
if (e.values?.QtaBdgVend || e.values?.QtaVend) {
|
||||
e.model.set("saldoBudget",
|
||||
(e.values?.QtaBdgVend || budget.QtaBdgVend) - (e.values?.QtaVend || budget.QtaVend)
|
||||
);
|
||||
}
|
||||
|
||||
if (e.values?.QtaPrevAcq || e.values?.QtaConsAcq) {
|
||||
e.model.set("saldoDisp",
|
||||
(e.values?.QtaPrevAcq || budget.QtaPrevAcq) - (e.values?.QtaConsAcq || budget.QtaConsAcq)
|
||||
);
|
||||
}
|
||||
|
||||
if (e.values?.QtaOrdVendSetP || e.values?.QtaOrdVendSetPP) {
|
||||
e.model.set("QtaBdgResiduo",
|
||||
budget.saldoBudget - (e.values?.QtaOrdVendSetP || budget.QtaOrdVendSetP) - (e.values?.QtaOrdVendSetPP || budget.QtaOrdVendSetPP)
|
||||
);
|
||||
}
|
||||
|
||||
if (e.values?.QtaPrevAcqSetP || e.values?.QtaPrevAcqSetPP) {
|
||||
e.model.set("QtaPrevResidua",
|
||||
budget.saldoDisp - (e.values?.QtaPrevAcqSetP || budget.QtaPrevAcqSetP) - (e.values?.QtaPrevAcqSetPP || budget.QtaPrevAcqSetPP)
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.kendoGrid.element.find(".k-grid-toolbar").first().addClass("k-grid-toolbar-sticky").css("border-width", "1px");
|
||||
this.kendoGrid.element.find(".k-grouping-header").first().css("border-width", "0px 1px 1px 1px");
|
||||
this.kendoGrid.element.find(".k-grid-header").first().addClass("k-grid-header-sticky");
|
||||
this.kendoGrid.element.find(".k-grid-table").css("border-width", "0 1px 1px");
|
||||
|
||||
$("#saveChanges").on("click", () => {
|
||||
this.kendoGrid.saveChanges();
|
||||
});
|
||||
|
||||
$("#cancelChanges").on("click", () => {
|
||||
this.kendoGrid.cancelChanges();
|
||||
});
|
||||
|
||||
this.kendoGrid.table.on("click", ".k-grouping-row .k-i-caret-alt-right, .k-grouping-row .k-i-caret-alt-down", e => {
|
||||
const row = $(e.target).closest("tr"),
|
||||
groupKey = rowGroupKey(row, this.kendoGrid);
|
||||
|
||||
groupsOpen[groupKey] = $(e.target).hasClass("k-i-caret-alt-down");
|
||||
});
|
||||
} else {
|
||||
this.dataSourceGrid.read();
|
||||
}
|
||||
});
|
||||
|
||||
$("#budgetSelector").kendoDropDownList({
|
||||
filter: "contains",
|
||||
dataTextField: "descrizione",
|
||||
dataValueField: "id_bdg",
|
||||
optionLabel: "Seleziona il budget da caricare",
|
||||
dataBound: (e) => {
|
||||
e.sender.list.find(".k-list-optionlabel").hide();
|
||||
|
||||
if (this.store.idBdg) {
|
||||
e.sender.value(this.store.idBdg);
|
||||
}
|
||||
},
|
||||
dataSource: {
|
||||
serverFiltering: true,
|
||||
sort: {
|
||||
field: "descrizione",
|
||||
dir: "asc"
|
||||
},
|
||||
transport: {
|
||||
read: async (options) => {
|
||||
try {
|
||||
const ret = await this.ajax()
|
||||
.get("getBudgets")
|
||||
.data({
|
||||
...options.data
|
||||
})
|
||||
.noticeAsToast()
|
||||
.execute();
|
||||
|
||||
const savedIdBdg = localStorage.getItem(LAST_ID_BDG_KEY) || undefined;
|
||||
|
||||
if (savedIdBdg && (ret?.returnData as Array<{
|
||||
id_bdg
|
||||
}>).map(bdg => bdg.id_bdg).find(idBdg => idBdg.toString() === savedIdBdg)) {
|
||||
this.store.idBdg = savedIdBdg;
|
||||
}
|
||||
|
||||
options.success(ret?.returnData);
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
options.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
select: async (e) => {
|
||||
this.store.idBdg = e.dataItem.id_bdg;
|
||||
|
||||
if (this.store.idBdg) {
|
||||
localStorage.setItem(LAST_ID_BDG_KEY, this.store.idBdg);
|
||||
} else {
|
||||
localStorage.removeItem(LAST_ID_BDG_KEY);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async getAnalisiBudget(data: object) {
|
||||
const ret = await this.ajax()
|
||||
.get("getAnalisiBudget")
|
||||
.data(data)
|
||||
.noticeAsModal()
|
||||
.execute();
|
||||
|
||||
return ret?.returnData as RetGetAnalisiBudget;
|
||||
}
|
||||
|
||||
async updateAnalisiBudget(budget: Budget) {
|
||||
const ret = await this.ajax()
|
||||
.post("updateAnalisiBudget")
|
||||
.data({budget})
|
||||
.noticeAsModal()
|
||||
.execute();
|
||||
|
||||
return ret?.returnId === 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
class AnalisiBudgetOfdemo extends AnalisiBudget {
|
||||
public static function getAnalisiBudget($data) {
|
||||
$idBdg = array_get($data, "idBdg");
|
||||
|
||||
if (is_null($idBdg)) {
|
||||
$ret = new Ret();
|
||||
return $ret->set_error("Id budget da caricare non fornito.");
|
||||
}
|
||||
|
||||
$query = KendoService::queryInitializerService(
|
||||
$data,
|
||||
ROOT . DIRECTORY_SEPARATOR . Azienda::getPathHomeCurrentModulo() . "get-analisi-budget.sql",
|
||||
"macroclasse, classe, causale, rag_soc"
|
||||
);
|
||||
|
||||
$query->setVar("idBdg", $idBdg);
|
||||
|
||||
$ret = $query->toRet()->execute();
|
||||
|
||||
if ($ret->is_OK()) {
|
||||
$budget = from($ret->get_data())
|
||||
->select(function ($row) {
|
||||
$row["saldoBudget"] = $row["QtaBdgVend"] - $row["QtaVend"];
|
||||
$row["saldoDisp"] = $row["QtaPrevAcq"] - $row["QtaConsAcq"];
|
||||
$row["QtaBdgResiduo"] = $row["saldoBudget"] - $row["QtaOrdVendSetP"] - $row["QtaOrdVendSetP"];
|
||||
$row["QtaPrevResidua"] = $row["saldoDisp"] - $row["QtaPrevAcqSetP"] - $row["QtaPrevAcqSetP"];
|
||||
$row["valQtaPrevAcqSetPPremium"] = ($row["causale"] == "Acquisti" ? $row["QtaPrevAcqSetP"] : $row["QtaOrdVendSetP"]) * $row["QtaPrevAcqSetPPremium"] / 100;
|
||||
$row["valQtaPrevAcqSetPClas1"] = ($row["causale"] == "Acquisti" ? $row["QtaPrevAcqSetP"] : $row["QtaOrdVendSetP"]) * $row["QtaPrevAcqSetPClas1"] / 100;
|
||||
$row["valQtaPrevAcqSetPClas2"] = ($row["causale"] == "Acquisti" ? $row["QtaPrevAcqSetP"] : $row["QtaOrdVendSetP"]) * $row["QtaPrevAcqSetPClas2"] / 100;
|
||||
$row["valQtaPrevAcqSetPPPremium"] = ($row["causale"] == "Acquisti" ? $row["QtaPrevAcqSetPP"] : $row["QtaOrdVendSetPP"]) * $row["QtaPrevAcqSetPPPremium"] / 100;
|
||||
$row["valQtaPrevAcqSetPPClas1"] = ($row["causale"] == "Acquisti" ? $row["QtaPrevAcqSetPP"] : $row["QtaOrdVendSetPP"]) * $row["QtaPrevAcqSetPPClas1"] / 100;
|
||||
$row["valQtaPrevAcqSetPPClas2"] = ($row["causale"] == "Acquisti" ? $row["QtaPrevAcqSetPP"] : $row["QtaOrdVendSetPP"]) * $row["QtaPrevAcqSetPPClas2"] / 100;
|
||||
|
||||
return $row;
|
||||
})
|
||||
->toArray();
|
||||
|
||||
$firstRow = reset($budget);
|
||||
|
||||
$ret->set_data(array(
|
||||
"data" => $budget,
|
||||
"total" => array_get($firstRow, "rows_count", 0)
|
||||
));
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
SELECT causale,
|
||||
macroclasse,
|
||||
classe,
|
||||
vb.id_bdg,
|
||||
vb.id_row,
|
||||
gab.cod_mart,
|
||||
articolo,
|
||||
gab.cod_anag,
|
||||
rag_soc,
|
||||
cod_anag + ' - ' + rag_soc AS cliente,
|
||||
QtaBdgVend,
|
||||
QtaVend,
|
||||
QtaPrevAcq,
|
||||
QtaConsAcq,
|
||||
QtaOrdVendSetC,
|
||||
QtaVendSetC,
|
||||
QtaOrdVendSetP,
|
||||
QtaPrevAcqSetP,
|
||||
QtaPrevAcqSetPPremium,
|
||||
QtaPrevAcqSetPClas1,
|
||||
QtaPrevAcqSetPClas2,
|
||||
QtaOrdVendSetPP,
|
||||
QtaPrevAcqSetPP,
|
||||
QtaPrevAcqSetPPPremium,
|
||||
QtaPrevAcqSetPPClas1,
|
||||
QtaPrevAcqSetPPClas2,
|
||||
unt_mis
|
||||
FROM GetAnalisiBudget([idBdg]) gab
|
||||
OUTER APPLY (SELECT id_bdg, id_row
|
||||
FROM vtb_bdgr
|
||||
WHERE vtb_bdgr.id_bdg = [idBdg]
|
||||
AND vtb_bdgr.cod_anag = gab.cod_anag
|
||||
AND vtb_bdgr.cod_mart = gab.cod_mart) AS vb
|
||||
where macroclasse is not null
|
||||
-- ORDER BY macroclasse, classe, causale, rag_soc
|
||||
Reference in New Issue
Block a user