From 54142500aa6bfbd06529b7258973c37d9841b896 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Thu, 2 Jan 2020 16:28:07 +0100 Subject: [PATCH 1/2] [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 From fd2f8edf40085043e6bcac17f07c8d5012aad8a5 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Fri, 3 Jan 2020 15:20:18 +0100 Subject: [PATCH 2/2] [FRUDIS - VERSAMENTO MERCE] - versamento merce su linea di produzione --- app/build.gradle | 4 +- .../core/model/CheckableOrdineLavoro.java | 21 +- .../consumers/ColliMagazzinoRESTConsumer.java | 11 +- .../core/utility/UtilityString.java | 14 ++ .../core/ChooseOrdsLavFromListAdapter.java} | 86 ++++--- .../core/ChooseOrdsLavFromListItemModel.java} | 8 +- .../dto/OrdineLavorazioneDTO.java | 9 + .../ProdVersamentoMaterialViewModel.java | 105 ++++++-- .../DialogChooseOrdsLavFromList.java | 108 -------- ...ialog_choose_ords_lav_from_list_layout.xml | 232 ------------------ ...choose_ords_lav_from_list__item_model.xml} | 63 +++-- .../fragment_prod_versamento_materiale.xml | 185 +++++++++++++- app/src/main/res/values-it/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 14 files changed, 410 insertions(+), 440 deletions(-) rename app/src/main/java/it/integry/integrywmsnative/{view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListAdapter.java => gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java} (53%) rename app/src/main/java/it/integry/integrywmsnative/{view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListItemModel.java => gest/prod_versamento_materiale/core/ChooseOrdsLavFromListItemModel.java} (67%) delete mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromList.java delete mode 100644 app/src/main/res/layout/dialog_choose_ords_lav_from_list_layout.xml rename app/src/main/res/layout/{dialog_choose_ords_lav_from_list__item_model.xml => fragment_choose_ords_lav_from_list__item_model.xml} (58%) diff --git a/app/build.gradle b/app/build.gradle index d338e40d..d21fc5dc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 116 - def appVersionName = '1.10.13' + def appVersionCode = 117 + def appVersionName = '1.10.14' signingConfigs { release { 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 index 3ef612a7..464e2f46 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableOrdineLavoro.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableOrdineLavoro.java @@ -2,20 +2,21 @@ package it.integry.integrywmsnative.core.model; import androidx.databinding.Observable; +import java.util.List; + 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; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.core.ChooseOrdsLavFromListItemModel; public class CheckableOrdineLavoro { - private DialogChooseOrdsLavFromListItemModel item; + private ChooseOrdsLavFromListItemModel item; private BindableBoolean checked = new BindableBoolean(false); private BindableBoolean hidden = new BindableBoolean(false); private String testata; - public CheckableOrdineLavoro(DialogChooseOrdsLavFromListItemModel item) { + public CheckableOrdineLavoro(ChooseOrdsLavFromListItemModel item) { this.item = item; this.item.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override @@ -25,11 +26,11 @@ public class CheckableOrdineLavoro { }); } - public DialogChooseOrdsLavFromListItemModel getItem() { + public ChooseOrdsLavFromListItemModel getItem() { return item; } - public CheckableOrdineLavoro setItem(DialogChooseOrdsLavFromListItemModel item) { + public CheckableOrdineLavoro setItem(ChooseOrdsLavFromListItemModel item) { this.item = item; this.item.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @@ -87,4 +88,12 @@ public class CheckableOrdineLavoro { public void setTestata(String testata) { this.testata = testata; } + + public BindableFloat getNumCnf() { + return item.getOrdineLav().getNumCnfVersamento(); + } + + public void setNumCnf(float numCnf) { + this.item.getOrdineLav().setNumCnfVersamento(numCnf); + } } 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 f60a03d7..37ac48e7 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 @@ -13,6 +13,7 @@ import com.google.gson.reflect.TypeToken; import org.jetbrains.annotations.NotNull; import java.lang.reflect.Type; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; @@ -253,12 +254,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { if (posizione != null) { - newMtbColt - .setPosizione(posizione.getPosizione()); - + newMtbColt.setPosizione(posizione.getPosizione()); if (posizione.isFlagLineaProduzione()) { - newMtbColt - .setCodJfas(posizione.getPosizione()); + newMtbColt.setCodJfas(posizione.getPosizione()); } } @@ -280,13 +278,14 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { .setSerColloRif(sourceMtbColt.getSerCollo()) .setCodMart(original.getCodMart()) .setCodCol(original.getCodCol()) + .setQtaCnf(original.getQtaCnf()) .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.setNumCnf(ordLav.getNumCnfVersamento().getBigDecimal()); ordColr.setDataOrd(ordLav.getDataOrdProd()) .setNumOrd(ordLav.getNumOrdProd()) .setRigaOrd(ordLav.getRigaOrdProd()); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java index 3a1b6f09..094e3664 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java @@ -1,5 +1,11 @@ package it.integry.integrywmsnative.core.utility; +import android.text.Html; +import android.text.Spanned; + +import androidx.annotation.IdRes; +import androidx.annotation.StringRes; + import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -58,4 +64,12 @@ public class UtilityString { return value; } + public static Spanned formatHtmlString(String format, String... params){ + return Html.fromHtml(String.format(format,params)); + } + + public static Spanned formatHtmlStringFromResId(@StringRes int stringId, String... params){ + return Html.fromHtml(String.format(UtilityResources.getString(stringId),params)); + } + } 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/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java similarity index 53% rename from app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListAdapter.java rename to app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java index df6710ae..cd6dee09 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_ordsLav_from_list/DialogChooseOrdsLavFromListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java @@ -1,7 +1,6 @@ -package it.integry.integrywmsnative.view.dialogs.choose_ordsLav_from_list; +package it.integry.integrywmsnative.gest.prod_versamento_materiale.core; import android.content.Context; -import android.text.Html; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -14,7 +13,6 @@ 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; @@ -24,11 +22,15 @@ 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.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.databinding.DialogChooseOrdsLavFromListItemModelBinding; +import it.integry.integrywmsnative.core.utility.UtilityNumber; +import it.integry.integrywmsnative.core.utility.UtilityResources; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.FragmentChooseOrdsLavFromListItemModelBinding; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; -public class DialogChooseOrdsLavFromListAdapter extends RecyclerView.Adapter { +public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter { protected Context mContext; @@ -38,7 +40,7 @@ public class DialogChooseOrdsLavFromListAdapter extends RecyclerView.Adapter mDatasetPositions = new HashMap<>(); - public DialogChooseOrdsLavFromListAdapter(Context context, List myDataset, MtbColt mtbColt) throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { + public ChooseOrdsLavFromListAdapter(Context context, List myDataset, MtbColt mtbColt) throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { mContext = context; mMtbColt = mtbColt; mMtbColr = mtbColt.getMtbColr().get(0); @@ -50,7 +52,7 @@ public class DialogChooseOrdsLavFromListAdapter extends RecyclerView.Adapter 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()); + BigDecimal usedCol, usedCnf; + float perc = (c.getItem().getOrdineLav().getHrNum() * 100) / totalHr; + if (SettingsManager.iDB().isFlagForceAllToColli() || (mtbColr.getMtbAart() != null && !mtbColr.getMtbAart().isFlagQtaCnfFissa())) { + usedCnf = residuoCnf.multiply(BigDecimal.valueOf(perc)).divide(BigDecimal.valueOf(100)).setScale(0, BigDecimal.ROUND_CEILING); + usedCol = usedCnf.multiply(mtbColr.getQtaCnf()).setScale(0,BigDecimal.ROUND_FLOOR); + } else { + usedCol = residuoCol.multiply(BigDecimal.valueOf(perc)).divide(BigDecimal.valueOf(100)).setScale(0, BigDecimal.ROUND_FLOOR); + usedCnf = usedCol.divide(mtbColr.getQtaCnf()).setScale(0, BigDecimal.ROUND_CEILING); } + offset = offset.subtract(usedCol); + c.setQtaCol(usedCol.floatValue()); + c.setNumCnf(usedCnf.floatValue()); + } + if (ordiniSelezionati.size() > 0 && offset.floatValue() != 0) { + CheckableOrdineLavoro majorOrder = Stream.of(ordiniSelezionati).max((o1, o2) -> Integer.compare(o1.getItem().getOrdineLav().getHrNum(), o2.getItem().getOrdineLav().getHrNum())).get(); + if (majorOrder == null) { + majorOrder = ordiniSelezionati.get(0); + } + majorOrder.setQtaCol(majorOrder.getQtaCol().get() + offset.floatValue()); } - - } public static class ViewHolder extends RecyclerView.ViewHolder { - protected DialogChooseOrdsLavFromListItemModelBinding mViewDataBinding; + protected FragmentChooseOrdsLavFromListItemModelBinding mViewDataBinding; - public ViewHolder(DialogChooseOrdsLavFromListItemModelBinding v) { + public ViewHolder(FragmentChooseOrdsLavFromListItemModelBinding v) { super(v.getRoot()); mViewDataBinding = v; } @@ -127,26 +136,41 @@ public class DialogChooseOrdsLavFromListAdapter extends RecyclerView.Adapter