[Piano Arrivi]

- Aggiunta colonna In Ritardo
- Fix scaduti
This commit is contained in:
2023-05-31 15:42:40 +02:00
parent e3d2a6a39c
commit c9a6d2af4f
7 changed files with 203 additions and 139 deletions

View File

@@ -41,27 +41,35 @@ class PianoArrivi {
$setup = new GestSetup();
$exclusion = null;
$excludedForn = $setup->keySection("EXCLUDED_COD_ATIP")->get();
if ($excludedForn) {
$exclusion = implode("','", array_unique(explode(";", $excludedForn)));
}
$Query = new Query;
$Query->importSqlFile("list-consegne")
$query = new Query;
$query->importSqlFile("list-consegne")
->setVar("user_name", User::get_current_username())
->whereDate("ord.data_cons", $data["day"]);
if ($exclusion) {
$Query->where("(cod_atip is null or cod_atip not in ('[exclusion]'))")->setVar("exclusion", $exclusion);
$query->where("(cod_atip is null or cod_atip not in ('[exclusion]'))")->setVar("exclusion", $exclusion);
}
$Ret = $Query->toRet()->execute();
if ($Ret->is_OK()) {
$listConsegne = $Ret->get_data();
$ret = $query->toRet()->execute();
if ($ret->is_OK()) {
$listConsegne = $ret->get_data();
foreach ($listConsegne as $i => $consegna) {
$consegna = self::setFlags($consegna);
$consegna["stato"] = \PianoArrivi\Stato::getInfo($consegna);
$listConsegne[$i] = $consegna;
}
$Ret->set_data($listConsegne);
$ret->set_data($listConsegne);
}
return $Ret;
return $ret;
}
public static function setFlags($item) {

View File

@@ -41,8 +41,10 @@ class Stato {
$flagInviato = $item["isInviato"];
$flagRicevuto = $item["isRicevuto"];
$flagEvaso = $item["isEvaso"];
$flagScaduto = $item["is_scaduto"];
$flagInserito = !$flagInviato && !$flagEvaso;
return $item["is_scaduto"] ? self::SCADUTO : ($flagInserito ? self::INSERITO : ($flagEvaso ? self::EVASO : ($flagRicevuto ? self::RICEVUTO : self::INVIATO)));
return $flagScaduto ? self::SCADUTO : ($flagInserito ? self::INSERITO : ($flagEvaso ? self::EVASO : ($flagRicevuto ? self::RICEVUTO : self::INVIATO)));
}
private static function getColorStyle($item) {

View File

@@ -67,17 +67,19 @@ var _pianoArrivi = {
stato: {
getCode: function (item) {
var codes = [];
const codes = [];
_.each(item.flagsRows, function (_flagsRow) {
var isInserito = !_flagsRow.isInviato && !_flagsRow.isEvaso;
codes.push(_.eq(parseInt(_flagsRow.is_scaduto), 1) ? 5 : isInserito ? 1 : (_flagsRow.isEvaso ? 4 : (_flagsRow.isRicevuto ? 3 : 2)));
const isInserito = !_flagsRow.isInviato && !_flagsRow.isEvaso;
codes.push(_flagsRow.is_scaduto ? 5 : isInserito ? 1 : (_flagsRow.isEvaso ? 4 : (_flagsRow.isRicevuto ? 3 : 2)));
});
return _.uniq(codes);
},
getInfo: function (item) {
var self = this;
var listStatiInfo = [];
const self = this;
const listStatiInfo = [];
_.each(self.getCode(item), function (_code) {
listStatiInfo.push(_.find(self.getItems(), function (x) {

View File

@@ -30,8 +30,7 @@ _pianoArrivi.plannerUtils = {
.data({day: day})
.noticeAsToast()
.onSuccess(function (ret) {
var items = Enumerable.From(ret.returnData)
const items = Enumerable.From(ret.returnData)
.Where(function (x) {
return x.flag_evaso !== "A";
})
@@ -43,8 +42,8 @@ _pianoArrivi.plannerUtils = {
})
.ToArray();
for (var i = 0; i < items.length; i++) {
var item = items[i];
for (let i = 0; i < items.length; i++) {
let item = items[i];
var rows = Enumerable.From(ret.returnData)
.Where(function (x) {
@@ -72,7 +71,7 @@ _pianoArrivi.plannerUtils = {
return x.isInserito;
}).Count() > 0;
item.isScaduto = Enumerable.From(rows).Where(function (x) {
return _.eq(parseInt(x.is_scaduto), 1);
return x.is_scaduto;
}).Count() > 0;
item.flagsRows = _.map(rows, function (x) {

View File

@@ -6,16 +6,17 @@ _pianoArrivi.planner = {
$planner: null,
init: function () {
var self = this;
const self = this;
_pianoArrivi.loadModule("planner").done(function () {
$("#container").enableAll();
_APP.stayinAlive.start();
self.$planner = $("[data-planner='weekly']");
var wpOptions = {
const wpOptions = {
$selector: $("#weeklyPlannerSelector"),
noWorkingWeekDay: 7,
vediColonnaScaduti: true,
queryStringParameter: "d",
onChange: function () {
self.refreshItems();
@@ -82,12 +83,13 @@ _pianoArrivi.planner = {
},
refreshItems: function () {
var self = this;
const self = this;
self.$planner.weekPlanner("cleanDaysItems");
self.$planner.weekPlanner("resetHeight");
var limitDays = self.getLimitDaysCurrentView();
const limitDays = self.getLimitDaysCurrentView();
_pianoArrivi.plannerUtils.getGiorniUtiliPlanner(limitDays).done(function (days) {
self.refreshOrdiniGiorni(days).then(function () {
self.$planner.weekPlanner("refreshHeight");
@@ -96,18 +98,20 @@ _pianoArrivi.planner = {
},
loadAttivitaGiorno: function (day) {
var self = this;
const self = this;
return _pianoArrivi.plannerUtils.loadConsegneGiorno(day, function (listConsegne) {
self.buildConsegneGiorno(day, listConsegne);
});
},
buildConsegneGiorno: function (day, listConsegne) {
var self = this;
const self = this;
self.$planner.weekPlanner("cleanDayItems", day);
console.log(listConsegne);
if (listConsegne.length > 0) {
for (var i = 0; i < listConsegne.length; i++) {
for (let i = 0; i < listConsegne.length; i++) {
self._appendConsegnaPlanner(listConsegne[i]);
}
}
@@ -139,9 +143,15 @@ _pianoArrivi.planner = {
},
_appendConsegnaPlanner: function (consegna) {
var self = this;
var $plannerItem = _pianoArrivi.plannerUtils.buildItem(consegna);
self.$planner.weekPlanner("appendItem", startOfDay(consegna.data_cons), $plannerItem);
const self = this;
const $plannerItem = _pianoArrivi.plannerUtils.buildItem(consegna);
if (consegna.isScaduto) {
self.$planner.weekPlanner("appendItem", null, $plannerItem);
} else {
self.$planner.weekPlanner("appendItem", startOfDay(consegna.data_cons), $plannerItem);
}
if (_pianoArrivi.plannerUtils.isConsegnaEditabile(consegna) && _pianoArrivi.getAbilitazioni("gestioneAcquisti")) {
self.$planner.weekPlanner("makeDraggable", $plannerItem);
}

View File

@@ -1,68 +1,63 @@
SELECT *
FROM (
SELECT dtb_ordt.gestione,
dtb_ordt.data_ord,
dtb_ordt.num_ord,
dtb_ordr.riga_ord,
dtb_ordt.cod_anag,
dtb_ordt.data_ricezione,
dtb_ordr.flag_evaso,
dtb_ordr.flag_evaso_forzato,
dtb_ordr.cod_mart,
dtb_ordr.qta_evasa,
dtb_ordr.qta_ord,
dtb_ordr.unt_ord,
dtb_ordr.descrizione_estesa AS descr_articolo,
CAST(CASE
WHEN dtb_ordr.flag_evaso = 'I' AND dtb_ordr.qta_evasa = 0 AND
DATEDIFF(DAY, dtb_ordr.data_cons, GETDATE()) > 0 AND
DATEDIFF(WEEK, dtb_ordr.data_cons, GETDATE()) > 0 THEN 1
ELSE 0 END AS BIT) AS is_scaduto,
CAST(CAST(CASE
WHEN dtb_ordr.flag_evaso = 'I' AND dtb_ordr.qta_evasa = 0 AND
DATEDIFF(DAY, dtb_ordr.data_cons, GETDATE()) > 0 AND
DATEDIFF(WEEK, dtb_ordr.data_cons, GETDATE()) > 0
THEN dbo.f_getFirstDayOfWeek(GETDATE())
ELSE dtb_ordr.data_cons END AS DATE) AS DATETIME) AS data_cons,
mtb_unt_mis.flag_dig,
gtb_anag.rag_soc AS rag_soc_fornitore,
(
SELECT TOP 1 dtb_ord_pdf.data_stampa
FROM dtb_ord_pdf
WHERE data_stampa IS NOT NULL
AND filecontent IS NOT NULL
AND mail_dest_invio IS NOT NULL
AND dtb_ord_pdf.gestione = dtb_ordt.gestione
AND dtb_ord_pdf.data_ord = dtb_ordt.data_ord
AND dtb_ord_pdf.num_ord = dtb_ordt.num_ord
ORDER BY versione DESC
) AS data_esportazione,
atb_forn.cod_atip
FROM dtb_ordt
INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND
dtb_ordt.data_ord = dtb_ordr.data_ord AND
dtb_ordt.num_ord = dtb_ordr.num_ord
INNER JOIN mtb_aart ON dtb_ordr.cod_mart = mtb_aart.cod_mart
INNER JOIN mtb_grup ON mtb_aart.cod_mgrp = mtb_grup.cod_mgrp
LEFT OUTER JOIN mtb_unt_mis ON dtb_ordr.unt_ord = mtb_unt_mis.unt_mis
LEFT OUTER JOIN gtb_anag ON dtb_ordt.cod_anag = gtb_anag.cod_anag
LEFT OUTER JOIN atb_forn ON gtb_anag.cod_anag = atb_forn.cod_anag
WHERE dtb_ordt.gestione = 'A'
AND dtb_ordt.flag_annulla = 'N'
AND dtb_ordr.data_cons IS NOT NULL
AND dtb_ordt.data_ord_rif IS NULL
AND dtb_ordt.cod_mdep IN (SELECT cod_mdep
FROM mtb_depo
WHERE (dbo.getGestSetup('PVM', 'PIANO_ARRIVI', 'FLAG_ALTRI_DEPOSITI') = 'S' OR
(dbo.getGestSetup('PVM', 'PIANO_ARRIVI', 'FLAG_ALTRI_DEPOSITI') = 'N' AND
mtb_depo.cod_anag IN (SELECT gtb_anag.cod_anag
FROM gtb_anag
INNER JOIN azienda ON gtb_anag.part_iva = azienda.part_iva)))
)
AND (mtb_aart.cod_mgrp IN (SELECT value_string
FROM dbo.ParseStringIntoArray(
(SELECT [dbo].[getGestSetupUser]('[user_name]', 'PVM ', 'PIANO_ARRIVI',
'FILTRO_GRP_MERC')), '|'))
OR [dbo].[getGestSetupUser]('[user_name]', 'PVM ', 'PIANO_ARRIVI', 'FILTRO_GRP_MERC') IS NULL)
) ord
FROM (SELECT dtb_ordt.gestione,
dtb_ordt.data_ord,
dtb_ordt.num_ord,
dtb_ordr.riga_ord,
dtb_ordt.cod_anag,
dtb_ordt.data_ricezione,
dtb_ordr.flag_evaso,
dtb_ordr.flag_evaso_forzato,
dtb_ordr.cod_mart,
dtb_ordr.qta_evasa,
dtb_ordr.qta_ord,
dtb_ordr.unt_ord,
dtb_ordr.descrizione_estesa AS descr_articolo,
CAST(CASE
WHEN dtb_ordr.flag_evaso = 'I' AND dtb_ordr.qta_evasa = 0 AND
DATEDIFF(DAY, dtb_ordr.data_cons, GETDATE()) > 0 AND
DATEDIFF(WEEK, dtb_ordr.data_cons, GETDATE()) > 0 THEN 1
ELSE 0 END AS BIT) AS is_scaduto,
CAST(CAST(CASE
WHEN dtb_ordr.flag_evaso = 'I' AND dtb_ordr.qta_evasa = 0 AND
DATEDIFF(DAY, dtb_ordr.data_cons, GETDATE()) > 0 AND
DATEDIFF(WEEK, dtb_ordr.data_cons, GETDATE()) > 0
THEN dbo.f_getFirstDayOfWeek(GETDATE())
ELSE dtb_ordr.data_cons END AS DATE) AS DATETIME) AS data_cons,
mtb_unt_mis.flag_dig,
gtb_anag.rag_soc AS rag_soc_fornitore,
(SELECT TOP 1 dtb_ord_pdf.data_stampa
FROM dtb_ord_pdf
WHERE data_stampa IS NOT NULL
AND filecontent IS NOT NULL
AND mail_dest_invio IS NOT NULL
AND dtb_ord_pdf.gestione = dtb_ordt.gestione
AND dtb_ord_pdf.data_ord = dtb_ordt.data_ord
AND dtb_ord_pdf.num_ord = dtb_ordt.num_ord
ORDER BY versione DESC) AS data_esportazione,
atb_forn.cod_atip
FROM dtb_ordt
INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND
dtb_ordt.data_ord = dtb_ordr.data_ord AND
dtb_ordt.num_ord = dtb_ordr.num_ord
INNER JOIN mtb_aart ON dtb_ordr.cod_mart = mtb_aart.cod_mart
INNER JOIN mtb_grup ON mtb_aart.cod_mgrp = mtb_grup.cod_mgrp
LEFT OUTER JOIN mtb_unt_mis ON dtb_ordr.unt_ord = mtb_unt_mis.unt_mis
LEFT OUTER JOIN gtb_anag ON dtb_ordt.cod_anag = gtb_anag.cod_anag
LEFT OUTER JOIN atb_forn ON gtb_anag.cod_anag = atb_forn.cod_anag
WHERE dtb_ordt.gestione = 'A'
AND dtb_ordt.flag_annulla = 'N'
AND dtb_ordr.data_cons IS NOT NULL
AND dtb_ordt.data_ord_rif IS NULL
AND dtb_ordt.cod_mdep IN (SELECT cod_mdep
FROM mtb_depo
WHERE (dbo.getGestSetup('PVM', 'PIANO_ARRIVI', 'FLAG_ALTRI_DEPOSITI') = 'S' OR
(dbo.getGestSetup('PVM', 'PIANO_ARRIVI', 'FLAG_ALTRI_DEPOSITI') = 'N' AND
mtb_depo.cod_anag IN (SELECT gtb_anag.cod_anag
FROM gtb_anag
INNER JOIN azienda ON gtb_anag.part_iva = azienda.part_iva))))
AND (mtb_aart.cod_mgrp IN (SELECT value_string
FROM dbo.ParseStringIntoArray(
(SELECT [dbo].[getGestSetupUser]('[user_name]', 'PVM ', 'PIANO_ARRIVI',
'FILTRO_GRP_MERC')), '|'))
OR [dbo].[getGestSetupUser]('[user_name]', 'PVM ', 'PIANO_ARRIVI', 'FILTRO_GRP_MERC') IS NULL)) ord
WHERE 1 = 1

View File

@@ -10,20 +10,23 @@ $.widget("nmk.weekPlanner", {
onItemDrag: null,
limitDroppables: null,
onTitleClick: null,
onDayTaphold: null
onDayTaphold: null,
vediColonnaScaduti: false
},
_startWeekDate: null,
_create: function () {
var self = this;
const self = this;
self.setStartDate(self._getInitDay(), false)
._build();
},
_getInitDay: function () {
var self = this;
var options = self.options;
const self = this;
const options = self.options;
if (!is_null(options.initDay) && is_numeric(options.initDay)) {
return startOfDay(options.initDay);
@@ -35,22 +38,24 @@ $.widget("nmk.weekPlanner", {
},
_getQueryStringDay: function () {
var self = this;
var options = self.options;
const self = this;
const options = self.options;
if (!is_null(options.queryStringParameter) && isset_urlParameter(options.queryStringParameter)) {
var day = get_urlParameter(options.queryStringParameter);
if (is_numeric(day)) {
return startOfDay(+day);
}
}
return null;
},
_prevNext: function (prevOrNext) {
var self = this;
const self = this;
const mStartDay = moment.unix(self._startWeekDate);
var mStartDay = moment.unix(self._startWeekDate);
mStartDay.add(1 * (prevOrNext == "prev" ? -1 : 1), "weeks");
mStartDay.add(1 * (prevOrNext === "prev" ? -1 : 1), "weeks");
self.setStartDate(mStartDay.unix(), true)
._refreshSelector()
@@ -58,10 +63,10 @@ $.widget("nmk.weekPlanner", {
},
_buildSelector: function () {
var self = this;
var btnSize = self.options.selectorBtnSize;
const self = this;
const btnSize = self.options.selectorBtnSize;
var $h = $("<div>", {class: "input-group"})
const $h = $("<div>", {class: "input-group"})
.append(" <div class='input-group-btn'>\n\
<button type='button' class='btn btn-default btn-block btn-" + btnSize + " prev'>\n\
<i class='fa fa-angle-left'></i>\n\
@@ -74,7 +79,8 @@ $.widget("nmk.weekPlanner", {
</button>\n\
</div>");
var $date = $h.find("input[type='text']");
const $date = $h.find("input[type='text']");
$date.datepicker({
dateFormat: "dd/mm/yy",
firstDay: self.options.firstIsoWeekDay,
@@ -82,7 +88,7 @@ $.widget("nmk.weekPlanner", {
selectOtherMonths: true,
numberOfMonths: 2,
changeMonth: true,
showWeek: self.options.firstIsoWeekDay == 1,
showWeek: self.options.firstIsoWeekDay === 1,
changeYear: true,
beforeShow: function () {
setTimeout(function () {
@@ -134,7 +140,7 @@ $.widget("nmk.weekPlanner", {
$this.on("swiperight", function(){
self._prevNext("prev");
});
$this.on("swipeleft", function(){
self._prevNext("next");
});*/
@@ -204,21 +210,19 @@ $.widget("nmk.weekPlanner", {
},
_buildPlannerDay: function (day) {
var self = this;
var options = self.options;
const self = this;
const options = self.options;
let noWorkingWeekDay = self.options.noWorkingWeekDay;
var noWorkingWeekDay = self.options.noWorkingWeekDay;
if (is_null(noWorkingWeekDay)) {
noWorkingWeekDay = [];
} else if (!is_array(noWorkingWeekDay)) {
noWorkingWeekDay = [noWorkingWeekDay];
}
var isNotWorking = noWorkingWeekDay.indexOf(getIsoDayOfWeek(day)) >= 0;
var $col = $("<div>", {class: "col p-0", style: "overflow-x: hidden;"});
var $panel =
const isNotWorking = noWorkingWeekDay.indexOf(getIsoDayOfWeek(day)) >= 0;
const $col = $("<div>", {class: "col p-0", style: "overflow-x: hidden;"});
const $panel =
$("<div>", {class: "panel panel-sm panel-default no-border-radius-top no-border-radius-bottom"})
.append($("<div>", {class: "panel-heading text-center"})
.append(
@@ -248,21 +252,49 @@ $.widget("nmk.weekPlanner", {
return $col.append($panel);
},
_buildPlannerPreviousDays: function () {
const self = this;
const $col = $("<div>", {class: "col p-0", style: "overflow-x: hidden;"});
const $panel =
$("<div>", {class: "panel panel-sm panel-default no-border-radius-top no-border-radius-bottom"})
.append($("<div>", {class: "panel-heading text-center"})
.append(
$("<span>", {
class: "small ",
html: "<span class='hidden-xs hidden-sm'>In Ritardo</span>" + "<span class='visible-xs visible-sm'>In Ritardo</span>"
})
)
.append($("<div>", {class: "icon-holder pull-right"}))
)
.append($("<div>", {
"data-day": "no",
class: "px-2 py-2 scaduti",
css: {minHeight: "80vh"}
}));
return $col.append($panel);
},
_buildPlanner: function () {
var self = this;
var $this = self.element;
const self = this;
const $this = self.element;
const $content = $this.find(".planner-content");
const $weekContainer = $this.find(".week-container");
var $content = $this.find(".planner-content");
$content.html("");
var $weekContainer = $this.find(".week-container");
$weekContainer.html("");
var isoWeeks = [], days = self.getWeekDates();
for (var i = 0; i < days.length; i++) {
var day = days[i];
var dayWeek = moment(day * 1000).isoWeek();
var search = _.find(isoWeeks, {isoWeek: dayWeek});
const isoWeeks = [], days = self.getWeekDates();
if (self.options.vediColonnaScaduti) {
$content.append(self._buildPlannerPreviousDays());
}
for (let i = 0; i < days.length; i++) {
const day = days[i];
const dayWeek = moment(day * 1000).isoWeek();
const search = _.find(isoWeeks, {isoWeek: dayWeek});
if (_.isNil(search)) {
isoWeeks.push({isoWeek: dayWeek, count: 1});
} else {
@@ -272,8 +304,10 @@ $.widget("nmk.weekPlanner", {
$content.append(self._buildPlannerDay(day));
}
console.log(isoWeeks);
_.each(isoWeeks, function (week) {
var $week = $("<div class='week text-center panel-heading'><b>Settimana " + week.isoWeek + "</b></div>")
const $week = $("<div class='week text-center panel-heading'><b>Settimana " + week.isoWeek + "</b></div>")
$week.css("width", "calc(100% / " + days.length + " * " + week.count + ")");
$weekContainer.append($week);
});
@@ -284,9 +318,9 @@ $.widget("nmk.weekPlanner", {
},
_initDroppables: function () {
var self = this;
var $this = self.element;
var options = self.options;
const self = this;
const $this = self.element;
const options = self.options;
self.getDaysCells().on("dragenter dragover", function (e) {
e.preventDefault();
@@ -296,7 +330,7 @@ $.widget("nmk.weekPlanner", {
var $dayTo = $(this);
var to = $dayTo.getDataAttr("day");
var from = e.originalEvent.dataTransfer.getData("day-from");
if (from != to && (is_null(options.limitDroppables) || (is_function(options.limitDroppables) && options.limitDroppables(to)))) {
if (from !== to && (is_null(options.limitDroppables) || (is_function(options.limitDroppables) && options.limitDroppables(to)))) {
var plannerItemId = e.originalEvent.dataTransfer.getData("bc-planner_item");
var $de = $this.find(".planner-content [data-bc-planner_item='" + plannerItemId + "']");
@@ -384,7 +418,15 @@ $.widget("nmk.weekPlanner", {
},
getDayContent: function (day) {
return this.element.find(".planner-content > .col > .panel > [data-day='" + startOfDay(day) + "']");
let content;
if (day) {
content = this.element.find(".planner-content > .col > .panel > [data-day='" + startOfDay(day) + "']")
} else {
content = this.element.find(".planner-content > .col > .panel > .scaduti")
}
return content;
},
enable_dayColumn: function (day, v) {
@@ -410,8 +452,9 @@ $.widget("nmk.weekPlanner", {
},
appendItem: function (day, $item) {
var self = this;
var $subItems = $item.find("[data-key]");
const self = this;
const $subItems = $item.find("[data-key]");
if ($subItems.length > 0) {
_.forEach($subItems, function (subItem) {
$(subItem).attr("data-bc-planner_item", self._calcItemId());
@@ -419,7 +462,9 @@ $.widget("nmk.weekPlanner", {
} else {
$item.attr("data-bc-planner_item", self._calcItemId());
}
self.getDayContent(day).append($item);
return this;
},
@@ -460,12 +505,15 @@ $.widget("nmk.weekPlanner", {
},
refreshHeight: function () {
var self = this;
const self = this;
self.resetHeight();
var maxDayHeight = 0;
let maxDayHeight = 0;
self.getDaysCells().each(function () {
var dayHeight = $(this).height();
const dayHeight = $(this).height();
if (dayHeight > maxDayHeight) {
maxDayHeight = dayHeight;
}