From 54142500aa6bfbd06529b7258973c37d9841b896 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Thu, 2 Jan 2020 16:28:07 +0100 Subject: [PATCH] [FRUDIS - VERSAMENTO MERCE] - versamento merce su linea di produzione --- .../core/model/CheckableOrdineLavoro.java | 90 ++++ .../consumers/ColliMagazzinoRESTConsumer.java | 226 ++++++--- .../core/rest/consumers/MesRESTConsumer.java | 31 ++ .../consumers/MesRESTConsumerService.java | 17 + .../core/settings/DBSettingsModel.java | 10 + .../core/settings/SettingsManager.java | 5 + .../dto/OrdineLavorazioneDTO.java | 457 ++++++++++++++++++ .../ProdVersamentoMaterialViewModel.java | 86 +++- .../DialogChooseOrdsLavFromList.java | 108 +++++ .../DialogChooseOrdsLavFromListAdapter.java | 170 +++++++ .../DialogChooseOrdsLavFromListItemModel.java | 32 ++ ..._choose_ords_lav_from_list__item_model.xml | 120 +++++ ...ialog_choose_ords_lav_from_list_layout.xml | 232 +++++++++ app/src/main/res/values-it/strings.xml | 6 +- app/src/main/res/values/strings.xml | 3 + 15 files changed, 1493 insertions(+), 100 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/model/CheckableOrdineLavoro.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumerService.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromList.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListAdapter.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListItemModel.java create mode 100644 app/src/main/res/layout/dialog_choose_ords_lav_from_list__item_model.xml create mode 100644 app/src/main/res/layout/dialog_choose_ords_lav_from_list_layout.xml diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableOrdineLavoro.java b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableOrdineLavoro.java new file mode 100644 index 00000000..3ef612a7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableOrdineLavoro.java @@ -0,0 +1,90 @@ +package it.integry.integrywmsnative.core.model; + +import androidx.databinding.Observable; + +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.di.BindableFloat; +import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsItemModel; +import it.integry.integrywmsnative.view.dialogs.choose_ordsLav_from_list.DialogChooseOrdsLavFromListItemModel; + +public class CheckableOrdineLavoro { + + + private DialogChooseOrdsLavFromListItemModel item; + private BindableBoolean checked = new BindableBoolean(false); + private BindableBoolean hidden = new BindableBoolean(false); + private String testata; + + public CheckableOrdineLavoro(DialogChooseOrdsLavFromListItemModel item) { + this.item = item; + this.item.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + hidden.set(item.isHidden()); + } + }); + } + + public DialogChooseOrdsLavFromListItemModel getItem() { + return item; + } + + public CheckableOrdineLavoro setItem(DialogChooseOrdsLavFromListItemModel item) { + this.item = item; + + this.item.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + hidden.set(item.isHidden()); + } + }); + + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public CheckableOrdineLavoro setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } + + public BindableBoolean getHidden() { + return hidden; + } + + public boolean isHidden() { + return hidden.get(); + } + + public CheckableOrdineLavoro setHidden(BindableBoolean hidden) { + this.hidden = hidden; + return this; + } + + public BindableFloat getQtaCol() { + return item.getOrdineLav().getQtaColVersamento(); + } + + public void setQtaCol(float qtaCnf) { + this.item.getOrdineLav().setQtaColVersamento(qtaCnf); + } + + public void toggleCheck() { + this.checked.set(!this.checked.get()); + } + + public boolean isChecked() { + return checked.get(); + } + + public String getTestata() { + return testata; + } + + public void setTestata(String testata) { + this.testata = testata; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index 31e2299a..f60a03d7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -37,14 +37,14 @@ import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityQuery; import it.integry.integrywmsnative.core.utility.UtilityString; -import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ +public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { - public static void saveCollo(MtbColt mtbColtToSave, final ISimpleOperationCallback callback){ + public static void saveCollo(MtbColt mtbColtToSave, final ISimpleOperationCallback callback) { for (int i = 0; i < mtbColtToSave.getMtbColr().size(); i++) { mtbColtToSave.getMtbColr().get(i) @@ -57,7 +57,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } - public static void saveCollo(MtbColt mtbColtToSave, RunnableArgs onComplete, RunnableArgs onFailed){ + public static void saveCollo(MtbColt mtbColtToSave, RunnableArgs onComplete, RunnableArgs onFailed) { MtbColt mtbColtToSaveClone = (MtbColt) mtbColtToSave.clone(); mtbColtToSaveClone.setMtbColr(new ObservableArrayList<>()); @@ -65,28 +65,28 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ for (int i = 0; i < mtbColtToSave.getMtbColr().size(); i++) { mtbColtToSaveClone.getMtbColr().add( ((MtbColr) mtbColtToSave.getMtbColr().get(i).clone()) - .setMtbAart(null) - .setRifPartitaMag(null)); + .setMtbAart(null) + .setRifPartitaMag(null)); } EntityRESTConsumer.processEntity(mtbColtToSaveClone, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColt value) { - if(onComplete != null) onComplete.run(value); + if (onComplete != null) onComplete.run(value); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }, MtbColt.class); } - public static void saveColli(List mtbColtsToSave, RunnableArgs> onComplete, RunnableArgs onFailed){ + public static void saveColli(List mtbColtsToSave, RunnableArgs> onComplete, RunnableArgs onFailed) { - for(MtbColt mtbColt : mtbColtsToSave) { + for (MtbColt mtbColt : mtbColtsToSave) { mtbColt.setMtbCols(null); for (int i = 0; i < mtbColt.getMtbColr().size(); i++) { @@ -99,18 +99,18 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ EntityRESTConsumer.processEntityList(mtbColtsToSave, new ISimpleOperationCallback>() { @Override public void onSuccess(List value) { - if(onComplete != null) onComplete.run(value); + if (onComplete != null) onComplete.run(value); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }, true, MtbColt.class); } - public static void saveRigaCollo(MtbColr mtbColrToSave, RunnableArgs onComplete, RunnableArgs onFailed){ + public static void saveRigaCollo(MtbColr mtbColrToSave, RunnableArgs onComplete, RunnableArgs onFailed) { mtbColrToSave.setMtbAart(null); mtbColrToSave.setRifPartitaMag(null); @@ -118,12 +118,12 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ EntityRESTConsumer.processEntity(mtbColrToSave, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColr value) { - if(onComplete != null) onComplete.run(value); + if (onComplete != null) onComplete.run(value); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }, MtbColr.class); @@ -143,12 +143,12 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ saveCollo(mtbColtToCreate, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColt value) { - if(onComplete != null) onComplete.run(value); + if (onComplete != null) onComplete.run(value); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }); } @@ -188,17 +188,17 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ // .setCodVdes(null) // .setOperation(CommonModelConsts.OPERATION.INSERT); - if(posizione != null) { + if (posizione != null) { newMtbColt - .setPosizione(posizione.getPosizione()); + .setPosizione(posizione.getPosizione()); - if(posizione.isFlagLineaProduzione()) { + if (posizione.isFlagLineaProduzione()) { newMtbColt .setCodJfas(posizione.getPosizione()); } } - for(int i = 0; i < sourceMtbColt.getMtbColr().size(); i++) { + for (int i = 0; i < sourceMtbColt.getMtbColr().size(); i++) { MtbColr mtbColrClone = (MtbColr) sourceMtbColt.getMtbColr().get(i).clone(); @@ -222,12 +222,89 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ saveCollo(newMtbColt, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColt value) { - if(onComplete != null) onComplete.run(value); + if (onComplete != null) onComplete.run(value); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); + } + }); + } + + public static void createColliScaricoDaOrdineLavorazione(MtbColt sourceMtbColt, MtbDepoPosizione posizione, List ordini, RunnableArgs onComplete, RunnableArgs onFailed) { + + MtbColt newMtbColt = new MtbColt() + .initDefaultFields() + .setCodAnag(null) + .setGestione(GestioneEnum.LAVORAZIONE) + .setSegno(-1) + .setCodTcol(sourceMtbColt.getCodTcol()) + .setPesoKg(sourceMtbColt.getPesoKg()) + .setPesoNettoKg(sourceMtbColt.getPesoNettoKg()) + .setLarghezzaCm(sourceMtbColt.getLarghezzaCm()) + .setLunghezzaCm(sourceMtbColt.getLunghezzaCm()) + .setAltezzaCm(sourceMtbColt.getAltezzaCm()) + .setCodMdep(sourceMtbColt.getCodMdep()) + .setDataVers(UtilityDate.getDateInstance()) + .setOraFinePrep(UtilityDate.getDateInstance()); + + newMtbColt.setOperation(CommonModelConsts.OPERATION.INSERT); + + + if (posizione != null) { + newMtbColt + .setPosizione(posizione.getPosizione()); + + if (posizione.isFlagLineaProduzione()) { + newMtbColt + .setCodJfas(posizione.getPosizione()); + } + } + + + if (sourceMtbColt.getMtbColr().size() != 1) { + onFailed.run(new Exception()); + return; + } + MtbColr original = sourceMtbColt.getMtbColr().get(0); + MtbColr mtbColrClone = new MtbColr(); + mtbColrClone + .setNumCollo(null) + .setDataCollo(null) + .setRiga(null) + .setGestione(GestioneEnum.LAVORAZIONE) + .setDataColloRif(sourceMtbColt.getDataColloD()) + .setNumColloRif(sourceMtbColt.getNumCollo()) + .setGestioneRif(sourceMtbColt.getGestione()) + .setSerColloRif(sourceMtbColt.getSerCollo()) + .setCodMart(original.getCodMart()) + .setCodCol(original.getCodCol()) + .setCodTagl(original.getCodTagl()) + .setPartitaMag(original.getPartitaMag()) + .setNumCnf(original.getNumCnf()) + .setOperation(CommonModelConsts.OPERATION.INSERT); + for (OrdineLavorazioneDTO ordLav : ordini) { + MtbColr ordColr = (MtbColr) mtbColrClone.clone(); + ordColr.setQtaCol(ordLav.getQtaColVersamento().getBigDecimal()); + ordColr.setDataOrd(ordLav.getDataOrdProd()) + .setNumOrd(ordLav.getNumOrdProd()) + .setRigaOrd(ordLav.getRigaOrdProd()); + newMtbColt.getMtbColr().add(ordColr); + + + } + + + saveCollo(newMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if (onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if (onFailed != null) onFailed.run(ex); } }); } @@ -248,15 +325,15 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ Integer customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcode); String customSerCollo = CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE; - if(customNumCollo != null) { + if (customNumCollo != null) { mtbColtToCreate.setNumCollo(customNumCollo); } - if(!UtilityString.isNullOrEmpty(customSerCollo)) { + if (!UtilityString.isNullOrEmpty(customSerCollo)) { mtbColtToCreate.setSerCollo(customSerCollo); } - if(!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcode)) { + if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcode)) { onFailed.run(new Exception("Per continuare scansiona un'etichetta dell'anno corrente")); return; } @@ -267,29 +344,29 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ saveCollo(mtbColtToCreate, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColt value) { - if(onComplete != null) onComplete.run(value); + if (onComplete != null) onComplete.run(value); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }); } - public static void deleteCollo(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs onFailed){ + public static void deleteCollo(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs onFailed) { mtbColtToDelete.setOperation(CommonModelConsts.OPERATION.DELETE); saveCollo(mtbColtToDelete, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColt value) { - if(onComplete != null) onComplete.run(); + if (onComplete != null) onComplete.run(); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }); @@ -306,34 +383,34 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); colliMagazzinoRESTConsumerService.distribuisciCollo(distribuzioneColloDTO) - .enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - analyzeAnswerList(response, "DistribuzioneCollo", obj -> { + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswerList(response, "DistribuzioneCollo", obj -> { - Gson gson = new Gson(); - List jsons = response.body().getEntityList(); + Gson gson = new Gson(); + List jsons = response.body().getEntityList(); - List newList = new ArrayList<>(); + List newList = new ArrayList<>(); - if(jsons != null) { - for (int i = 0; i < jsons.size(); i ++){ - JsonObject jsonTmp = jsons.get(i); + if (jsons != null) { + for (int i = 0; i < jsons.size(); i++) { + JsonObject jsonTmp = jsons.get(i); - newList.add(gson.fromJson(jsonTmp, MtbColt.class)); - } + newList.add(gson.fromJson(jsonTmp, MtbColt.class)); + } + } + + + onComplete.run(newList); + }, onFailed); } - - onComplete.run(newList); - }, onFailed); - } - - @Override - public void onFailure(Call> call, Throwable t) { - onFailed.run(new Exception(t)); - } - }); + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); } @@ -344,7 +421,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ public void onResponse(Call> call, Response> response) { analyzeAnswer(response, "GetBySSCC", mtbColt -> { - if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0){ + if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { List codMarts = Stream.of(mtbColt.getMtbColr()) .map(MtbColr::getCodMart) .withoutNulls() @@ -353,7 +430,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ ArticoloRESTConsumer.getByCodMart(codMarts, arts -> { - if(arts != null && arts.size() > 0) { + if (arts != null && arts.size() > 0) { for (MtbColr mtbColr : mtbColt.getMtbColr()) { MtbAart foundMtbAart = null; @@ -361,7 +438,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ List mtbAartStream = Stream.of(arts) .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())).toList(); - if(mtbAartStream != null && mtbAartStream.size() > 0){ + if (mtbAartStream != null && mtbAartStream.size() > 0) { foundMtbAart = mtbAartStream.get(0); } @@ -385,7 +462,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ }, onFailed); - } @Override @@ -403,10 +479,8 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } - - private static void cyclicGetMultipleByTestate(@NotNull Iterator sourceMtbColts, boolean onlyResiduo, ArrayList resultMtbColt, Runnable onComplete, RunnableArgs onAbort) { - if(sourceMtbColts.hasNext()){ + if (sourceMtbColts.hasNext()) { getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> { resultMtbColt.add(mtbColt); cyclicGetMultipleByTestate(sourceMtbColts, onlyResiduo, resultMtbColt, onComplete, onAbort); @@ -419,7 +493,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ public static void getByTestata(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs onComplete, RunnableArgs onFailed) { String ssccString = null; - if(testata.getSerCollo().equalsIgnoreCase(CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE)){ + if (testata.getSerCollo().equalsIgnoreCase(CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE)) { ssccString = "U"; SimpleDateFormat sdf = new SimpleDateFormat("yy"); @@ -454,32 +528,29 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } - - public static void changePosizione(MtbColt testata, MtbDepoPosizione posizione, Runnable onComplete, RunnableArgs onFailed) { testata.setOperation(CommonModelConsts.OPERATION.UPDATE); - if(posizione == null) testata.setPosizione(null); + if (posizione == null) testata.setPosizione(null); else testata.setPosizione(posizione.getPosizione()); ColliMagazzinoRESTConsumer.saveCollo(testata, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColt value) { - if(onComplete != null) onComplete.run(); + if (onComplete != null) onComplete.run(); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }); } - - public static void deleteRiga(MtbColr mtbColrToDelete, Runnable onComplete, RunnableArgs onFailed){ + public static void deleteRiga(MtbColr mtbColrToDelete, Runnable onComplete, RunnableArgs onFailed) { MtbColr newMtbColr = new MtbColr(); newMtbColr.setNumCollo(mtbColrToDelete.getNumCollo()); @@ -494,40 +565,36 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ EntityRESTConsumer.processEntity(newMtbColr, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColr value) { - if(onComplete != null) onComplete.run(); + if (onComplete != null) onComplete.run(); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }, MtbColr.class); } - public static void updateRiga(MtbColr mtbColrToUpdate, Runnable onComplete, RunnableArgs onFailed){ + public static void updateRiga(MtbColr mtbColrToUpdate, Runnable onComplete, RunnableArgs onFailed) { mtbColrToUpdate.setOperation(CommonModelConsts.OPERATION.UPDATE); EntityRESTConsumer.processEntity(mtbColrToUpdate, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColr value) { - if(onComplete != null) onComplete.run(); + if (onComplete != null) onComplete.run(); } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }, MtbColr.class); } - - - - public static void updateDataFine(Context context, Dialog progress, MtbColt mtbColt, Runnable onComplete) { MtbColt cloneMtbColt = (MtbColt) mtbColt.clone(); @@ -544,7 +611,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } - public static void doesColloContainsAnyRow(MtbColt mtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { HashMap params = new HashMap<>(); @@ -558,12 +624,12 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ String query = "SELECT COUNT(*) as value FROM mtb_colr " + "WHERE " + whereCond; - Type typeOfObjectsList = new TypeToken>>() {}.getType(); + Type typeOfObjectsList = new TypeToken>>() { + }.getType(); SystemRESTConsumer.>>processSql(query, typeOfObjectsList, data -> { onComplete.run(data.get(0).getValue() > 0); }, onFailed); } - } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java new file mode 100644 index 00000000..d5187e59 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java @@ -0,0 +1,31 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class MesRESTConsumer extends _BaseRESTConsumer { + + public static void getOrdiniLavorazioneMateriale(String codJfas, String idMateriale, RunnableArgs> onComplete, RunnableArgs onFailed){ + MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class); + mesRESTConsumerService.getOrdiniLavorazioneMateriale(codJfas,idMateriale).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "getAvailablePosizioni", (m) -> onComplete.run(response.body().getDto()), onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumerService.java new file mode 100644 index 00000000..09a058fd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumerService.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface MesRESTConsumerService { + + + @GET("mes/getOrdiniLavorazioneMateriale") + Call>> getOrdiniLavorazioneMateriale(@Query("codJfas") String codJfas, @Query("idMateriale") String idMateriale); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index dd7a8266..ef2a1734 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -27,6 +27,7 @@ public class DBSettingsModel { private boolean flagCanAddExtraQuantitySpedizione; private boolean flagEnableCheckDepositoSpedizione; private boolean flagUseNewPickingListSpedizione; + private boolean flagVersamentoDirettoProduzione; private boolean flagAskPesoColloSpedizione; private boolean flagForceAllToColli; @@ -180,4 +181,13 @@ public class DBSettingsModel { this.flagUseNewPickingListSpedizione = flagUseNewPickingListSpedizione; return this; } + + public boolean isFlagVersamentoDirettoProduzione() { + return flagVersamentoDirettoProduzione; + } + + public DBSettingsModel setFlagVersamentoDirettoProduzione(boolean flagVersamentoDirettoProduzione) { + this.flagVersamentoDirettoProduzione = flagVersamentoDirettoProduzione; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 10146eab..37d5d32a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -230,6 +230,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("SPEDIZIONE") .setKeySection("FLAG_USE_NEW_PICKING_LIST")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PICKING") + .setSection("PRODUZIONE") + .setKeySection("FLAG_VERSAMENTO_DIRETTO")); GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { @@ -246,6 +250,7 @@ public class SettingsManager { dbSettingsModelIstance.setFlagForceAllToColli(getValueFromList(list, "FLAG_FORCE_ALL_TO_COLLI", Boolean.class)); dbSettingsModelIstance.setFlagAskPesoColloSpedizione(getValueFromList(list, "FLAG_ASK_PESO_COLLO", Boolean.class)); dbSettingsModelIstance.setFlagUseNewPickingListSpedizione(getValueFromList(list, "FLAG_USE_NEW_PICKING_LIST", Boolean.class)); + dbSettingsModelIstance.setFlagVersamentoDirettoProduzione(getValueFromList(list, "FLAG_VERSAMENTO_DIRETTO", Boolean.class)); if(onComplete != null) onComplete.run(); }, onFailed); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java new file mode 100644 index 00000000..4d33ce05 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java @@ -0,0 +1,457 @@ +package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.util.Date; + +import it.integry.integrywmsnative.core.di.BindableFloat; +import it.integry.integrywmsnative.core.exception.DateNotRecognizedException; +import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class OrdineLavorazioneDTO { + + private String dataOrdProd; + + private Integer numOrdProd; + + private Integer rigaOrdProd; + + private String flagAvviabile; + + private String untOrd; + + private BigDecimal rapConv; + + private Integer posRiga; + + private BigDecimal numPezzi; + + private BigDecimal numCnf; + + private BigDecimal qtaCnf; + + private Integer ggScadPartita; + + private BigDecimal colliPedana; + + private BigDecimal numPedane; + + private String dataOrd; + + private String flagEvasoProd; + + private String gestione; + + private Integer numOrd; + + private String descrizioneProd; + + private String codJfas; + + private String partitaMag; + + private String dataScad; + + private String partitaMagSuggested; + + private String dataScadSuggested; + + private String codProd; + + private Integer maxStep; + + private String dataInizProd; + + private String dataIniz; + + private String dataFine; + + private BigDecimal qtaProd; + + private BigDecimal qtaTrasferite; + + private String stato; + + private String codTcolUl; + + private String codAnag; + + private String rifOrd; + + private String codVdes; + + private String codMdep; + + private String codJcom; + + private String noteLav; + + private BigDecimal tempoTrascorso; + + private String descCommessa; + + private BigDecimal prodStd; + + private Object mtbColtToEdit; + + private int hrNum; + + + private BindableFloat qtaColVersamento = new BindableFloat(); + + public String getDataOrdProd() { + return dataOrdProd; + } + + public void setDataOrdProd(String dataOrdProd) { + this.dataOrdProd = dataOrdProd; + } + + public Integer getNumOrdProd() { + return numOrdProd; + } + + public void setNumOrdProd(Integer numOrdProd) { + this.numOrdProd = numOrdProd; + } + + public Integer getRigaOrdProd() { + return rigaOrdProd; + } + + public void setRigaOrdProd(Integer rigaOrdProd) { + this.rigaOrdProd = rigaOrdProd; + } + + public Integer getPosRiga() { + return posRiga; + } + + public void setPosRiga(Integer posRiga) { + this.posRiga = posRiga; + } + + public String getDataOrd() { + return dataOrd; + } + public Date getDateOrd() throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { + return UtilityDate.recognizeDate(dataOrd); + } + + public void setDataOrd(String dataOrd) { + this.dataOrd = dataOrd; + } + + public String getFlagEvasoProd() { + return flagEvasoProd; + } + + public void setFlagEvasoProd(String flagEvasoProd) { + this.flagEvasoProd = flagEvasoProd; + } + + public String getGestione() { + return gestione; + } + + public void setGestione(String gestione) { + this.gestione = gestione; + } + + public Integer getNumOrd() { + return numOrd; + } + + public void setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + } + + public String getDescrizioneProd() { + return descrizioneProd; + } + + public void setDescrizioneProd(String descrizioneProd) { + this.descrizioneProd = descrizioneProd; + } + + public String getCodJfas() { + return codJfas; + } + + public void setCodJfas(String codJfas) { + this.codJfas = codJfas; + } + + public Integer getMaxStep() { + return maxStep; + } + + public void setMaxStep(Integer maxStep) { + this.maxStep = maxStep; + } + + public String getDataIniz() { + return dataIniz; + } + + public void setDataIniz(String dataIniz) { + this.dataIniz = dataIniz; + } + + public String getDataFine() { + return dataFine; + } + + public void setDataFine(String dataFine) { + this.dataFine = dataFine; + } + + public BigDecimal getQtaProd() { + return qtaProd; + } + + public void setQtaProd(BigDecimal qtaProd) { + this.qtaProd = qtaProd; + } + + public BigDecimal getQtaTrasferite() { + return qtaTrasferite; + } + + public void setQtaTrasferite(BigDecimal qtaTrasferite) { + this.qtaTrasferite = qtaTrasferite; + } + + public String getStato() { + return stato; + } + + public void setStato(String stato) { + this.stato = stato; + } + + public String getUntOrd() { + return untOrd; + } + + public void setUntOrd(String untOrd) { + this.untOrd = untOrd; + } + + public BigDecimal getRapConv() { + return rapConv; + } + + public void setRapConv(BigDecimal rapConv) { + this.rapConv = rapConv; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public void setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public void setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + } + + public String getPartitaMag() { + return partitaMag; + } + + public void setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + } + + public String getDataScad() { + return dataScad; + } + + public void setDataScad(String dataScad) { + this.dataScad = dataScad; + } + + public String getPartitaMagSuggested() { + return partitaMagSuggested; + } + + public void setPartitaMagSuggested(String partitaMagSuggested) { + this.partitaMagSuggested = partitaMagSuggested; + } + + public String getDataScadSuggested() { + return dataScadSuggested; + } + + public void setDataScadSuggested(String dataScadSuggested) { + this.dataScadSuggested = dataScadSuggested; + } + + public String getCodProd() { + return codProd; + } + + public void setCodProd(String codProd) { + this.codProd = codProd; + } + + public String getDataInizProd() { + return dataInizProd; + } + + public void setDataInizProd(String dataInizProd) { + this.dataInizProd = dataInizProd; + } + + public String getCodTcolUl() { + return codTcolUl; + } + + public void setCodTcolUl(String codTcolUl) { + this.codTcolUl = codTcolUl; + } + + public String getCodAnag() { + return codAnag; + } + + public void setCodAnag(String codAnag) { + this.codAnag = codAnag; + } + + public String getRifOrd() { + return rifOrd; + } + + public void setRifOrd(String rifOrd) { + this.rifOrd = rifOrd; + } + + public String getCodVdes() { + return codVdes; + } + + public void setCodVdes(String codVdes) { + this.codVdes = codVdes; + } + + public String getCodMdep() { + return codMdep; + } + + public void setCodMdep(String codMdep) { + this.codMdep = codMdep; + } + + public String getCodJcom() { + return codJcom; + } + + public void setCodJcom(String codJcom) { + this.codJcom = codJcom; + } + + public BigDecimal getColliPedana() { + return colliPedana; + } + + public void setColliPedana(BigDecimal colliPedana) { + this.colliPedana = colliPedana; + } + + public BigDecimal getTempoTrascorso() { + return tempoTrascorso; + } + + public void setTempoTrascorso(BigDecimal tempoTrascorso) { + this.tempoTrascorso = tempoTrascorso; + } + + public String getDescCommessa() { + return descCommessa; + } + + public void setDescCommessa(String descCommessa) { + this.descCommessa = descCommessa; + } + + public BigDecimal getProdStd() { + return prodStd; + } + + public void setProdStd(BigDecimal prodStd) { + this.prodStd = prodStd; + } + + public String getFlagAvviabile() { + return flagAvviabile; + } + + public void setFlagAvviabile(String flagAvviabile) { + this.flagAvviabile = flagAvviabile; + } + + public BigDecimal getNumPezzi() { + return numPezzi; + } + + public void setNumPezzi(BigDecimal numPezzi) { + this.numPezzi = numPezzi; + } + + public BigDecimal getNumPedane() { + return numPedane; + } + + public void setNumPedane(BigDecimal numPedane) { + this.numPedane = numPedane; + } + + public Object getMtbColtToEdit() { + return mtbColtToEdit; + } + + public void setMtbColtToEdit(Object mtbColtToEdit) { + this.mtbColtToEdit = mtbColtToEdit; + } + + public Integer getGgScadPartita() { + return ggScadPartita; + } + + public void setGgScadPartita(Integer ggScadPartita) { + this.ggScadPartita = ggScadPartita; + } + + public String getNoteLav() { + return noteLav; + } + + public void setNoteLav(String noteLav) { + this.noteLav = noteLav; + } + + public int getHrNum() { + return hrNum; + } + + public void setHrNum(int hrNum) { + this.hrNum = hrNum; + } + + public BindableFloat getQtaColVersamento() { + return qtaColVersamento; + } + + public void setQtaColVersamento(float qtaColVersamento) { + this.qtaColVersamento.set(qtaColVersamento); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java index a8f263de..fc9e5a55 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java @@ -2,28 +2,35 @@ package it.integry.integrywmsnative.gest.prod_versamento_materiale.viewmodel; import android.app.Activity; import android.app.Dialog; -import android.app.ProgressDialog; import android.content.Context; import android.text.Html; import android.text.SpannableString; import androidx.databinding.ObservableField; -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import java.util.List; + import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; +import it.integry.integrywmsnative.core.model.CheckableOrdineLavoro; +import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentProdVersamentoMaterialeBinding; import it.integry.integrywmsnative.gest.prod_versamento_materiale.core.ProdVersamentoMaterialHelper; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; import it.integry.integrywmsnative.view.dialogs.DialogCommon; import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.choose_ordsLav_from_list.DialogChooseOrdsLavFromList; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; @@ -51,11 +58,11 @@ public class ProdVersamentoMaterialViewModel { public void openLU() { DialogScanOrCreateLU.make(mContext, true, true, false, mtbColt -> { - if(mtbColt == null) { - ((IPoppableActivity)mContext).pop(); - } else if((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColt.getSegno().equals(+1)){ + if (mtbColt == null) { + ((IPoppableActivity) mContext).pop(); + } else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColt.getSegno().equals(+1)) { - if(mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) { + if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) { DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")), null, this::openLU).show(); @@ -75,12 +82,28 @@ public class ProdVersamentoMaterialViewModel { private void choosePosition() { DialogAskPositionOfLU.makeBase(mContext, null, true, (status, mtbDepoPosizione) -> { - if(status == DialogConsts.Results.ABORT) { - ((IPoppableActivity)mContext).pop(); + if (status == DialogConsts.Results.ABORT) { + ((IPoppableActivity) mContext).pop(); } else { - if (mtbDepoPosizione != null && mtbDepoPosizione.isFlagLineaProduzione() && mtbColt.get() != null) { - createColloScarico(mtbDepoPosizione); + if (!SettingsManager.iDB().isFlagVersamentoDirettoProduzione()) { + createColloScarico(mtbDepoPosizione); + } else { + if (mtbColt == null || mtbColt.get() == null || mtbColt.get().getMtbColr() == null || mtbColt.get().getMtbColr().size()<=0){ + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml("Il collo selezionato non presenta articoli versabili sulla linea.")), + null, this::openLU).show(); + return; + }else if (mtbColt.get().getMtbColr().size() > 1){ + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml("Il collo selezionato contiene più articoli, per versarli in produzione vanno separati in colli differenti.")), + null, this::openLU).show(); + return; + } + MesRESTConsumer.getOrdiniLavorazioneMateriale(mtbDepoPosizione.getPosizione(), getIdMaterialeFromCollo(mtbColt.get()) ,ordini-> richiediOrdiniPerVersamento(ordini,mtbDepoPosizione), e-> DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml(e.getMessage())), + null, this::openLU).show()); + } } else { DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")), @@ -94,20 +117,20 @@ public class ProdVersamentoMaterialViewModel { }).show(); } + private String getIdMaterialeFromCollo(MtbColt mtbColt) { + MtbAart articolo = mtbColt.getMtbColr().get(0).getMtbAart(); + return UtilityString.isNullOrEmpty(articolo.getIdArtEqui())? articolo.getCodMart():articolo.getIdArtEqui(); + } private void createColloScarico(MtbDepoPosizione mtbDepoPosizione) { Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - ColliMagazzinoRESTConsumer.createColloScaricoDaCarico(mtbColt.get(), mtbDepoPosizione, generatedMtbColt -> { - DialogCommon.showDataSaved(mContext, () -> { - progressDialog.dismiss(); - mOnVersamentoCompleted.run(); - }); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex); - }); + ColliMagazzinoRESTConsumer.createColloScaricoDaCarico(mtbColt.get(), mtbDepoPosizione, generatedMtbColt -> DialogCommon.showDataSaved(mContext, () -> { + progressDialog.dismiss(); + mOnVersamentoCompleted.run(); + }), ex -> UtilityExceptions.defaultException(mContext, ex)); } @@ -120,5 +143,30 @@ public class ProdVersamentoMaterialViewModel { openLU(); } + public void richiediOrdiniPerVersamento(List ordini, MtbDepoPosizione mtbDepoPosizione){ + + try { + DialogChooseOrdsLavFromList.make(mContext, mtbColt.get(), ordini, ordLavs -> { + if (ordLavs.size() > 0){ + Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + ColliMagazzinoRESTConsumer.createColliScaricoDaOrdineLavorazione(mtbColt.get(), mtbDepoPosizione, ordLavs, generatedMtbColt -> DialogCommon.showDataSaved(mContext, () -> { + progressDialog.dismiss(); + mOnVersamentoCompleted.run(); + }), ex -> UtilityExceptions.defaultException(mContext, ex)); + }else{ + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml("Nessun ordine selezionato!")), + null, this::openLU).show(); + mOnVersamentoCompleted.run(); + } + },()->{ + mOnVersamentoCompleted.run(); + }).show(); + } catch (Exception e) { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")), + null, this::openLU).show(); + } + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromList.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromList.java new file mode 100644 index 00000000..52fb67e3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromList.java @@ -0,0 +1,108 @@ +package it.integry.integrywmsnative.view.dialogs.choose_ordsLav_from_list; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.exception.DateNotRecognizedException; +import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.databinding.DialogChooseOrdsLavFromListLayoutBinding; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; + +public class DialogChooseOrdsLavFromList { + + private Context currentContext; + private Dialog mDialog; + + private DialogChooseOrdsLavFromListAdapter currentAdapter; + + private RunnableArgs> mOnItemsChoosed; + private Runnable mOnAbort; + private MtbColt mMtbColt; + + private List mDataset; + + public static Dialog make(final Context context, MtbColt collo, List listaOrdini, RunnableArgs> onItemsChoosed, Runnable onAbort) throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { + return new DialogChooseOrdsLavFromList(context, collo, listaOrdini, onItemsChoosed, onAbort).mDialog; + } + + + private DialogChooseOrdsLavFromList(Context context, MtbColt collo, List listaOrdiniLavoro, RunnableArgs> onItemsChoosed, Runnable onAbort) throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { + currentContext = context; + mOnItemsChoosed = onItemsChoosed; + mOnAbort = onAbort; + mMtbColt = collo; + + mDataset = new ArrayList<>(); + + if(listaOrdiniLavoro != null){ + for (OrdineLavorazioneDTO ordineLav : listaOrdiniLavoro) { + mDataset.add(new DialogChooseOrdsLavFromListItemModel().setOrdineLav(ordineLav)); + } + } + + LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + DialogChooseOrdsLavFromListLayoutBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_ords_lav_from_list_layout, null, false); + binding.setMtbColr(mMtbColt.getMtbColr().get(0)); + + binding.emptyView.setVisibility(mDataset != null && mDataset.size() > 0 ? View.GONE : View.VISIBLE); + + mDialog = new Dialog(context); + mDialog.setContentView(binding.getRoot()); + mDialog.setCanceledOnTouchOutside(false); + mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + + initRecyclerView(binding); + + binding.positiveButton.setOnClickListener(v -> { + mDialog.dismiss(); + onPositiveClick(); + }); + + binding.negativeButton.setOnClickListener(v -> { + mDialog.dismiss(); + onNegativeClick(); + }); + } + + private void initRecyclerView(DialogChooseOrdsLavFromListLayoutBinding binding) throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { + binding.dialogChooseArtsFromListaArtMainList.setNestedScrollingEnabled(false); + + binding.dialogChooseArtsFromListaArtMainList.setHasFixedSize(true); + + binding.dialogChooseArtsFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); + + currentAdapter = new DialogChooseOrdsLavFromListAdapter(currentContext, mDataset, mMtbColt); + binding.dialogChooseArtsFromListaArtMainList.setAdapter(currentAdapter); + } + + + + private void onPositiveClick() { + if(mOnItemsChoosed != null) { + mOnItemsChoosed.run(currentAdapter.getSelectedItems()); + } + } + + + private void onNegativeClick() { + if(this.mOnAbort != null) mOnAbort.run(); + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListAdapter.java new file mode 100644 index 00000000..df6710ae --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListAdapter.java @@ -0,0 +1,170 @@ +package it.integry.integrywmsnative.view.dialogs.choose_ordsLav_from_list; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.databinding.Observable; +import androidx.recyclerview.widget.RecyclerView; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.exception.DateNotRecognizedException; +import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; +import it.integry.integrywmsnative.core.model.CheckableOrdineLavoro; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.databinding.DialogChooseOrdsLavFromListItemModelBinding; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; + +public class DialogChooseOrdsLavFromListAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private MtbColt mMtbColt; + private MtbColr mMtbColr; + private List mDataset; + private HashMap mDatasetPositions = new HashMap<>(); + + + public DialogChooseOrdsLavFromListAdapter(Context context, List myDataset, MtbColt mtbColt) throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { + mContext = context; + mMtbColt = mtbColt; + mMtbColr = mtbColt.getMtbColr().get(0); + if (myDataset != null) { + mDataset = Stream.of(myDataset) + .withoutNulls() + .map(CheckableOrdineLavoro::new).toList(); + + for (int i = 0; i < mDataset.size(); i++) { + final CheckableOrdineLavoro itemModel = mDataset.get(i); + OrdineLavorazioneDTO ordine = itemModel.getItem().getOrdineLav(); + itemModel.setTestata(Html.fromHtml(String.format(mContext.getString(R.string.ord_testata), String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDateOrd(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))).toString()); + mDatasetPositions.put(itemModel, i); + + itemModel.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + onItemHidden(itemModel); + } + }); + itemModel.getChecked().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + onItemChecked(itemModel); + } + }); + } + } + } + + private void onItemHidden(CheckableOrdineLavoro itemModel) { + if (itemModel.isHidden()) { + mDataset.remove(itemModel); + } else { + mDataset.add(mDatasetPositions.get(itemModel), itemModel); + } + calculateMtbColtShare(); + notifyDataSetChanged(); + } + private void onItemChecked(CheckableOrdineLavoro itemModel) { + if (!itemModel.isChecked()){ + itemModel.setQtaCol(0); + } + calculateMtbColtShare(); + notifyDataSetChanged(); + } + + + private void calculateMtbColtShare() { + MtbColr mtbColr = mMtbColt.getMtbColr().get(0); + BigDecimal residuo = mtbColr.getQtaCol(); + BigDecimal offset = BigDecimal.ZERO.add(residuo); + + + List ordiniSelezionati = getSelectedData(); + + int totalHr = Stream.of(ordiniSelezionati).mapToInt(x -> x.getItem().getOrdineLav().getHrNum()).sum(); + for (CheckableOrdineLavoro c : ordiniSelezionati) { + float perc = (c.getItem().getOrdineLav().getHrNum() * 100)/ totalHr; + BigDecimal used = residuo.multiply(BigDecimal.valueOf(perc)).divide(BigDecimal.valueOf(100)).setScale(0,BigDecimal.ROUND_HALF_DOWN); + offset = offset.subtract(used); + c.setQtaCol(used.floatValue()); + } + if (ordiniSelezionati.size() > 0 && offset.floatValue() > 0){ + Optional majorOrder = Stream.of(ordiniSelezionati).max((o1,o2)-> Integer.compare(o1.getItem().getOrdineLav().getHrNum(),o2.getItem().getOrdineLav().getHrNum())); + if (!majorOrder.isEmpty()){ + majorOrder.get().setQtaCol(majorOrder.get().getQtaCol().get()+offset.floatValue()); + }else{ + ordiniSelezionati.get(0).setQtaCol(ordiniSelezionati.get(0).getQtaCol().get()+offset.floatValue()); + } + } + + + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogChooseOrdsLavFromListItemModelBinding mViewDataBinding; + + + public ViewHolder(DialogChooseOrdsLavFromListItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(CheckableOrdineLavoro checkableOrdineLavoro, MtbColr mtbColr) { + mViewDataBinding.setCheckableOrdineLav(checkableOrdineLavoro); + mViewDataBinding.setMtbColr(mtbColr); + mViewDataBinding.executePendingBindings(); + } + } + + @Override + public DialogChooseOrdsLavFromListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogChooseOrdsLavFromListItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_ords_lav_from_list__item_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogChooseOrdsLavFromListAdapter.ViewHolder holder, int position) { + CheckableOrdineLavoro item = mDataset.get(position); + holder.bind(item, mMtbColr); + + } + + @Override + public void onViewRecycled(DialogChooseOrdsLavFromListAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + public List getSelectedItems() { + return Stream.of(mDataset) + .filter(y -> y.getChecked().get()) + .map(x -> x.getItem().getOrdineLav()).toList(); + } + + public List getSelectedData() { + return Stream.of(mDataset) + .filter(y -> y.getChecked().get()) + .map(x -> x).toList(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListItemModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListItemModel.java new file mode 100644 index 00000000..36a9bf35 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListItemModel.java @@ -0,0 +1,32 @@ +package it.integry.integrywmsnative.view.dialogs.choose_ordsLav_from_list; + +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; + +public class DialogChooseOrdsLavFromListItemModel { + + private OrdineLavorazioneDTO ordineLav; + private BindableBoolean hidden = new BindableBoolean(false); + + public OrdineLavorazioneDTO getOrdineLav() { + return ordineLav; + } + + public DialogChooseOrdsLavFromListItemModel setOrdineLav(OrdineLavorazioneDTO ordineLav) { + this.ordineLav= ordineLav; + return this; + } + + public boolean isHidden() { + return hidden.get(); + } + + public DialogChooseOrdsLavFromListItemModel setHidden(boolean hidden) { + this.hidden.set(hidden); + return this; + } + + public BindableBoolean getHidden() { + return hidden; + } +} diff --git a/app/src/main/res/layout/dialog_choose_ords_lav_from_list__item_model.xml b/app/src/main/res/layout/dialog_choose_ords_lav_from_list__item_model.xml new file mode 100644 index 00000000..8943cea0 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_ords_lav_from_list__item_model.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_ords_lav_from_list_layout.xml b/app/src/main/res/layout/dialog_choose_ords_lav_from_list_layout.xml new file mode 100644 index 00000000..dbc97ddf --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_ords_lav_from_list_layout.xml @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 73fc969c..9675daef 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -10,8 +10,9 @@ Completato %s del %s]]> %s del %s]]> + %s del %s]]> %s]]> - Cerca... + Cerca… Login Accettazione Ordine di accettazione @@ -296,4 +297,7 @@ Seleziona una azione Elimina Modifica + Distribuisci quantità + Articolo + Personalizzazione SaporiVeri \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 815c14cb..a72d8ade 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,7 @@ Permissions are required for app to work properly %s of %s]]> %s of %s]]> + %s of %s]]> %s]]> Check in Check in order @@ -302,4 +303,6 @@ Delete Edit SaporVeri Customization + Distribute quantity + Article