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 fb6ce904..04b234c8 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 @@ -74,6 +74,23 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } + + public static void saveColli(List mtbColtsToSave, RunnableArgs> onComplete, RunnableArgs onFailed){ + + EntityRESTConsumer.processEntityList(mtbColtsToSave, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }, true); + + } + public static void saveRigaCollo(MtbColr mtbColrToSave, RunnableArgs onComplete, RunnableArgs onFailed){ EntityRESTConsumer.processEntity(mtbColrToSave, new ISimpleOperationCallback() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumer.java index dc7ba934..8995ffd4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumer.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.core.REST.consumers; import android.util.Log; import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; @@ -59,6 +60,53 @@ public class EntityRESTConsumer { } + public static void processEntityList(List entitiesToSave, final ISimpleOperationCallback> callback, boolean singleTransaction){ + + EntityRESTConsumerService service = RESTBuilder.getService(EntityRESTConsumerService.class); + Call>> request = service.processEntityList(singleTransaction, entitiesToSave); + request.enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if(response.isSuccessful()) { + + if(response.body() != null) { + + ArrayList responseList = new ArrayList<>(); + Gson gson = new Gson(); + Type typeOfObjectsList = new TypeToken() {}.getType(); + + for(ServiceRESTResponse jsonSingleObject : response.body()) { + + if (jsonSingleObject.getEsito() == EsitoType.OK) { + responseList.add(gson.fromJson(jsonSingleObject.getEntity(), typeOfObjectsList)); + } else { + Log.e("EntityRESTConsumer", jsonSingleObject.getErrorMessage()); + callback.onFailed(new Exception(jsonSingleObject.getErrorMessage())); + + return; + } + } + + callback.onSuccess(responseList); + } else { + Log.e("EntityRESTConsumer", response.message()); + callback.onFailed(new Exception(response.message())); + } + } else { + Log.e("EntityRESTConsumer", "Status " + response.code() + ": " + response.message()); + callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("EntityRESTConsumer", t.toString()); + callback.onFailed(new Exception(t)); + } + }); + + } + diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumerService.java index d74ed113..e9fc7319 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumerService.java @@ -3,15 +3,21 @@ package it.integry.integrywmsnative.core.REST.consumers; import com.google.gson.JsonObject; +import java.util.List; + import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.model.EntityBase; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.POST; +import retrofit2.http.Query; public interface EntityRESTConsumerService { @POST("processEntity") Call> processEntity(@Body Object entity); + @POST("processEntityList") + Call>> processEntityList(@Query("forceTransaction") boolean singleTransaction, @Body Object entity); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java index 3f02c82a..c8403f29 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java @@ -184,7 +184,7 @@ public class VersamentoMerceViewModel { showNoULFound(); BarcodeManager.enable(); progressDialog.dismiss(); - } else if(mtbColt != null && (mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.VENDITA)) { + } else if(mtbColt != null && (/*mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO ||*/ mtbColt.getGestioneEnum() == GestioneEnum.VENDITA)) { showWrongGestioneUL(); BarcodeManager.enable(); progressDialog.dismiss(); @@ -242,6 +242,8 @@ public class VersamentoMerceViewModel { private void pickMerceULtoUL(MtbColt destMtbColt, ProgressDialog progressDialog) { + MtbColt sourceMtbColt = mtbColt.get(); + List mtbColrsToPick = Stream.of(mtbColt.get().getMtbColr()) .filter(x -> x.getQtaCol().floatValue() > 0) .toList(); @@ -256,34 +258,61 @@ public class VersamentoMerceViewModel { BarcodeManager.enable(); if(destNewMtbColr != null && destNewMtbColr.size() > 0){ - MtbColt clonedTestata = (MtbColt) destMtbColt.clone(); - ObservableArrayList mtbColrObservableField = new ObservableArrayList<>(); + MtbColt clonedSourceTestata = (MtbColt) sourceMtbColt.clone(); + MtbColt clonedDestTestata = (MtbColt) destMtbColt.clone(); + + ObservableArrayList mtbColrSourceObservableField = new ObservableArrayList<>(); + ObservableArrayList mtbColrDestObservableField = new ObservableArrayList<>(); for(int i = 0; i < destNewMtbColr.size(); i++) { MtbColr cloneMtbColr = (MtbColr) destNewMtbColr.get(i).clone(); - cloneMtbColr - .setGestioneRif(cloneMtbColr.getGestione()) - .setGestione(null); + boolean destroyMtbColrReferences = false; + + //Se le gestioni sono uguali faccio uno storno sulla sorgente e non lavoro con + //i riferimenti + if(sourceMtbColt.getGestioneEnum() == destMtbColt.getGestioneEnum()){ + destroyMtbColrReferences = true; + + MtbColr stornoSourceMtbColr = (MtbColr) destNewMtbColr.get(i).clone(); + + stornoSourceMtbColr + .setGestione(null) + .setNumCollo(null) + .setSerCollo(null) + .setDataCollo(null) + .setGestioneRif(null) + .setNumColloRif(null) + .setSerColloRif(null) + .setDataColloRif((String) null) + + .setQtaCol(stornoSourceMtbColr.getQtaCol().multiply(new BigDecimal(-1))); + + mtbColrSourceObservableField.add(stornoSourceMtbColr); + } + + if(!destroyMtbColrReferences) { + cloneMtbColr + .setGestioneRif(cloneMtbColr.getGestione()) + .setSerColloRif(cloneMtbColr.getSerCollo()) + .setNumColloRif(cloneMtbColr.getNumCollo()) + .setDataColloRif(cloneMtbColr.getDataColloS()); + } cloneMtbColr - .setSerColloRif(cloneMtbColr.getSerCollo()) - .setSerCollo(null); - - cloneMtbColr - .setNumColloRif(cloneMtbColr.getNumCollo()) - .setNumCollo(null); - - cloneMtbColr - .setDataColloRif(cloneMtbColr.getDataColloS()) + .setGestione(null) + .setSerCollo(null) + .setNumCollo(null) .setDataCollo(null); - mtbColrObservableField.add(cloneMtbColr); + mtbColrDestObservableField.add(cloneMtbColr); } - clonedTestata.setMtbColr(mtbColrObservableField); + clonedSourceTestata.setMtbColr(mtbColrSourceObservableField); + clonedDestTestata.setMtbColr(mtbColrDestObservableField); - saveLU(clonedTestata); + + saveLUs(clonedSourceTestata, clonedDestTestata); } }); @@ -345,7 +374,7 @@ public class VersamentoMerceViewModel { private void showWrongGestioneUL() { DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml(mContext.getResources().getText(R.string.gestione_A_V_not_accepted_message).toString())), + new SpannableString(Html.fromHtml(mContext.getResources().getText(R.string.gestione_V_not_accepted_message).toString())), null, null).show(); } @@ -356,15 +385,22 @@ public class VersamentoMerceViewModel { } */ - private void saveLU(MtbColt mtbColt) { - mtbColt.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + private void saveLUs(MtbColt mtbColt1, MtbColt mtbColt2) { - for(int i = 0; i < mtbColt.getMtbColr().size(); i++) { - mtbColt.getMtbColr().get(i).setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + ArrayList mtbColts = new ArrayList<>(); + mtbColts.add(mtbColt1); + mtbColts.add(mtbColt2); + + for(MtbColt mtbColt : mtbColts) { + mtbColt.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + for (int i = 0; i < mtbColt.getMtbColr().size(); i++) { + mtbColt.getMtbColr().get(i).setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + } } - ColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> { + ColliMagazzinoRESTConsumer.saveColli(mtbColts, value -> { showDataSavedDialog(() -> { mOnVersamentoCompleted.run(); });