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..464e2f46 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableOrdineLavoro.java @@ -0,0 +1,99 @@ +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.gest.prod_versamento_materiale.core.ChooseOrdsLavFromListItemModel; + +public class CheckableOrdineLavoro { + + + private ChooseOrdsLavFromListItemModel item; + private BindableBoolean checked = new BindableBoolean(false); + private BindableBoolean hidden = new BindableBoolean(false); + private String testata; + + public CheckableOrdineLavoro(ChooseOrdsLavFromListItemModel item) { + this.item = item; + this.item.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + hidden.set(item.isHidden()); + } + }); + } + + public ChooseOrdsLavFromListItemModel getItem() { + return item; + } + + public CheckableOrdineLavoro setItem(ChooseOrdsLavFromListItemModel 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; + } + + 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 31e2299a..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; @@ -37,14 +38,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 +58,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 +66,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 +100,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 +119,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 +144,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 +189,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 +223,87 @@ 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()) + .setQtaCnf(original.getQtaCnf()) + .setCodTagl(original.getCodTagl()) + .setPartitaMag(original.getPartitaMag()) + .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()); + 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 +324,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 +343,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 +382,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 +420,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 +429,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 +437,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 +461,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ }, onFailed); - } @Override @@ -403,10 +478,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 +492,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 +527,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 +564,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 +610,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } - public static void doesColloContainsAnyRow(MtbColt mtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { HashMap params = new HashMap<>(); @@ -558,12 +623,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/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/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java new file mode 100644 index 00000000..cd6dee09 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java @@ -0,0 +1,194 @@ +package it.integry.integrywmsnative.gest.prod_versamento_materiale.core; + +import android.content.Context; +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.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.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; +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 ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private MtbColt mMtbColt; + private MtbColr mMtbColr; + private List mDataset; + private HashMap mDatasetPositions = new HashMap<>(); + + + public ChooseOrdsLavFromListAdapter(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(UtilityString.formatHtmlStringFromResId(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); + itemModel.setNumCnf(0); + } + calculateMtbColtShare(); + notifyDataSetChanged(); + } + + + private void calculateMtbColtShare() { + MtbColr mtbColr = mMtbColt.getMtbColr().get(0); + BigDecimal residuoCol = mtbColr.getQtaCol(); + BigDecimal residuoCnf = mtbColr.getNumCnf(); + BigDecimal offset = BigDecimal.ZERO.add(residuoCol); + mtbColr.setQtaCnf(mtbColr.getQtaCol().divide(mtbColr.getNumCnf(),5,BigDecimal.ROUND_HALF_UP)); + + List ordiniSelezionati = getSelectedData(); + int totalHr = Stream.of(ordiniSelezionati).mapToInt(x -> x.getItem().getOrdineLav().getHrNum()).sum(); + for (CheckableOrdineLavoro c : ordiniSelezionati) { + 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 FragmentChooseOrdsLavFromListItemModelBinding mViewDataBinding; + + + public ViewHolder(FragmentChooseOrdsLavFromListItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(CheckableOrdineLavoro checkableOrdineLavoro, MtbColr mtbColr) { + mViewDataBinding.setCheckableOrdineLav(checkableOrdineLavoro); + mViewDataBinding.setMtbColr(mtbColr); + mViewDataBinding.executePendingBindings(); + + if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissa())) { + String text = UtilityNumber.decimalToString(checkableOrdineLavoro.getQtaCol().get()); + + if (mtbColr.getMtbAart() != null) { + text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : ""; + } + + mViewDataBinding.qtaTextview.setText(text); + } else { + mViewDataBinding.qtaTextview.setText(UtilityNumber.decimalToString(checkableOrdineLavoro.getNumCnf().get()) + "\n" + UtilityResources.getString(R.string.unt_mis_col)); + } + + mViewDataBinding.setMtbColr(mtbColr); + mViewDataBinding.executePendingBindings(); + } + } + + @Override + public ChooseOrdsLavFromListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + FragmentChooseOrdsLavFromListItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.fragment_choose_ords_lav_from_list__item_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(ChooseOrdsLavFromListAdapter.ViewHolder holder, int position) { + CheckableOrdineLavoro item = mDataset.get(position); + holder.bind(item, mMtbColr); + + } + + @Override + public void onViewRecycled(ChooseOrdsLavFromListAdapter.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/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListItemModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListItemModel.java new file mode 100644 index 00000000..747fd4ce --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListItemModel.java @@ -0,0 +1,32 @@ +package it.integry.integrywmsnative.gest.prod_versamento_materiale.core; + +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; + +public class ChooseOrdsLavFromListItemModel { + + private OrdineLavorazioneDTO ordineLav; + private BindableBoolean hidden = new BindableBoolean(false); + + public OrdineLavorazioneDTO getOrdineLav() { + return ordineLav; + } + + public ChooseOrdsLavFromListItemModel setOrdineLav(OrdineLavorazioneDTO ordineLav) { + this.ordineLav= ordineLav; + return this; + } + + public boolean isHidden() { + return hidden.get(); + } + + public ChooseOrdsLavFromListItemModel setHidden(boolean hidden) { + this.hidden.set(hidden); + return this; + } + + public BindableBoolean getHidden() { + return hidden; + } +} 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..3cf14678 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java @@ -0,0 +1,466 @@ +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(); + private BindableFloat numCnfVersamento = 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); + } + + public BindableFloat getNumCnfVersamento() { + return numCnfVersamento; + } + + public void setNumCnfVersamento(float numCnfVersamento) { + this.numCnfVersamento.set(numCnfVersamento); + } +} 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..99a30c7c 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,24 +2,42 @@ 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 android.view.View; +import android.widget.Toast; import androidx.databinding.ObservableField; +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.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.exception.DateNotRecognizedException; +import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; 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.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityResources; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentProdVersamentoMaterialeBinding; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.core.ChooseOrdsLavFromListAdapter; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.core.ChooseOrdsLavFromListItemModel; 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; @@ -35,7 +53,8 @@ public class ProdVersamentoMaterialViewModel { private FragmentProdVersamentoMaterialeBinding mBinding; private ProdVersamentoMaterialHelper mHelper; private Runnable mOnVersamentoCompleted; - + private List mDataset = new ArrayList<>(); + private ChooseOrdsLavFromListAdapter currentAdapter; public ObservableField mtbColt = new ObservableField<>(); @@ -48,14 +67,31 @@ public class ProdVersamentoMaterialViewModel { BarcodeManager.enable(); } + public void setMtbColr(MtbColr mtbColr) { + mBinding.descrArt.setText(mtbColr.getDescrizione()); + mBinding.codArt.setText(mtbColr.getCodMart()); + mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getRifPartitaMag() != null) ? " - "+ mtbColr.getRifPartitaMag().getDescrizione() : "")); + if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissa())) { + String text = UtilityNumber.decimalToString(mtbColr.getQtaCol()); + + if (mtbColr.getMtbAart() != null) { + text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? " " + mtbColr.getMtbAart().getUntMis() : ""; + } + + mBinding.qtaCol.setText(text); + } else { + mBinding.qtaCol.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + " " + UtilityResources.getString(R.string.unt_mis_col)); + } + } + 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 +111,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,25 +146,26 @@ 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)); } public void setMtbColt(MtbColt mtbColt) { this.mtbColt.set(mtbColt); + this.setMtbColr(mtbColt.getMtbColr().get(0)); } public void resetMtbColt() { @@ -120,5 +173,51 @@ public class ProdVersamentoMaterialViewModel { openLU(); } + public void richiediOrdiniPerVersamento(List ordini, MtbDepoPosizione mtbDepoPosizione) { + + if (ordini == null || ordini.size() <= 0) { + mBinding.positiveFab.setVisibility(View.GONE); + mBinding.positiveFab.setOnClickListener(null); + mBinding.emptyView.setVisibility(View.VISIBLE); + return; + } + mBinding.positiveFab.setVisibility(View.VISIBLE); + + mBinding.positiveFab.setOnClickListener(c -> onPositiveClick(mtbDepoPosizione)); + for (OrdineLavorazioneDTO ordineLav : ordini) { + mDataset.add(new ChooseOrdsLavFromListItemModel().setOrdineLav(ordineLav)); + } + mBinding.emptyView.setVisibility(mDataset != null && mDataset.size() > 0 ? View.GONE : View.VISIBLE); + try { + initRecyclerView(); + } catch (Exception e) { + UtilityExceptions.defaultException(mContext, e); + } + + } + + private void onPositiveClick(MtbDepoPosizione mtbDepoPosizione) { + List ordLavs = currentAdapter.getSelectedItems(); + 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 { + Toast.makeText(mContext, "Nessun ordine selezionato!", Toast.LENGTH_SHORT).show(); + } + } + + private void initRecyclerView() throws ParseException, TimeNotRecognizedException, DateNotRecognizedException { + mBinding.dialogChooseArtsFromListaArtMainList.setNestedScrollingEnabled(false); + + mBinding.dialogChooseArtsFromListaArtMainList.setHasFixedSize(true); + + mBinding.dialogChooseArtsFromListaArtMainList.setLayoutManager(new LinearLayoutManager(mContext)); + + currentAdapter = new ChooseOrdsLavFromListAdapter(mContext, mDataset, mtbColt.get()); + mBinding.dialogChooseArtsFromListaArtMainList.setAdapter(currentAdapter); + } } diff --git a/app/src/main/res/layout/fragment_choose_ords_lav_from_list__item_model.xml b/app/src/main/res/layout/fragment_choose_ords_lav_from_list__item_model.xml new file mode 100644 index 00000000..555215de --- /dev/null +++ b/app/src/main/res/layout/fragment_choose_ords_lav_from_list__item_model.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_versamento_materiale.xml b/app/src/main/res/layout/fragment_prod_versamento_materiale.xml index 27c88901..52de0715 100644 --- a/app/src/main/res/layout/fragment_prod_versamento_materiale.xml +++ b/app/src/main/res/layout/fragment_prod_versamento_materiale.xml @@ -1,18 +1,183 @@ - + - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..d964b564 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 @@ -131,6 +132,7 @@ Lotto %s]]> + %s]]> Data scad Num cnf @@ -164,6 +166,7 @@ Nessun articolo da prelevare Nessun documento da mostrare Nessun ordine da evadere + Nessun ordine compatibile Nessun articolo Nessuna UL versata in produzione @@ -296,4 +299,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..074a3a91 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 @@ -130,6 +131,7 @@ Level Not valid %s]]> + %s]]> Expire date Pcks num Qty x pck @@ -165,6 +167,7 @@ No items to pick No documents to show No orders to dispatch + .no compatible orders found No items No LU poured into production @@ -302,4 +305,6 @@ Delete Edit SaporVeri Customization + Distribute quantity + Article