diff --git a/app/build.gradle b/app/build.gradle index 10b174c0..d4a650a5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 103 - def appVersionName = '1.10.0' + def appVersionCode = 105 + def appVersionName = '1.10.2' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index 2bd0ca9c..574fc65a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -167,6 +167,9 @@ public class MainActivity extends BaseActivity Menu menu = mBinding.navView.getMenu(); ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION); + + if(customConfiguration == null) return; + BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION); List menuGroups = menuConfiguration.getGroups(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java index f250a0f3..c501cc7f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java @@ -1,10 +1,12 @@ package it.integry.integrywmsnative.core.data_store.db.dao; import androidx.room.Dao; +import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update; +import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; @@ -13,6 +15,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; public interface ArticoloGrigliaDao { @Query("SELECT * from articoli_griglia") List getAll(); + @Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE cod_mart = :codMart AND id_griglia = :idGriglia") Integer getIdArticoloByGrigliaAndCodMart(int idGriglia, String codMart); @@ -25,6 +28,9 @@ public interface ArticoloGrigliaDao { @Update void update(ArticoloGriglia articolo); + @Delete + void deleteList(List toDelete); + @Query("SELECT * FROM articoli_griglia WHERE bar_code = :barcode AND id_griglia = :idGriglia LIMIT 1") ArticoloGriglia findArticoloByBarcodeAndGriglia(String barcode, int idGriglia); @@ -36,4 +42,7 @@ public interface ArticoloGrigliaDao { @Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode )AND id_griglia = :idGriglia LIMIT 1") Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart); + + @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId") + List getArticoliFromGriglia(int grigliaId); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java index 32b13095..593515bf 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java @@ -1,5 +1,8 @@ package it.integry.integrywmsnative.core.data_store.db.repository; +import com.annimon.stream.Collectors; +import com.annimon.stream.Stream; + import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; @@ -8,6 +11,7 @@ import java.util.List; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; +import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.expansion.RunnableArgs; public class ArticoliGrigliaRepository extends Repository{ @@ -18,13 +22,15 @@ public class ArticoliGrigliaRepository extends Repository{ this.mRepository = MainApplication.getArticoliGrigliaRepository(); } - public void saveArticoliToGriglia(List articoli, Runnable onSuccess, RunnableArgs onFail) { + public void saveArticoliToGriglia(List articoli, Griglia griglia, Runnable onSuccess, RunnableArgs onFail) { execute(()->{ try{ List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); + List codMarts = new ArrayList<>(); for (ArticoloGriglia art : articoli){ - Integer id = mRepository.getIdArticoloByGrigliaAndBarcodeAndCodMart(art.getIdGriglia(),art.getBarCode(),art.getCodMart()); + Integer id = mRepository.getIdArticoloByGrigliaAndBarcodeAndCodMart(griglia.getGrigliaId(),art.getBarCode(),art.getCodMart()); + codMarts.add(art.getCodMart()); if (id != null){ art.setArticoloGrigliaId(id); toUpdate.add(art); @@ -34,6 +40,9 @@ public class ArticoliGrigliaRepository extends Repository{ } mRepository.insertAll(toInsert); mRepository.updateAll(toUpdate); + List articoliGriglia = mRepository.getArticoliFromGriglia(griglia.getGrigliaId()); + List toDelete =Stream.of(articoliGriglia).filter(articolo-> !codMarts.contains(articolo.getCodMart())).toList(); + mRepository.deleteList(toDelete); onSuccess.run(); }catch (Exception e){ onFail.run(e); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java index 23103b9b..96fc38d7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java @@ -12,10 +12,20 @@ public class BaseActivity extends AppCompatActivity { @Override public boolean dispatchKeyEvent(KeyEvent event) { if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) { - if (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) { + if (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE && !isControlKey(event)) { return BarcodeManager.onKeyDown(event.getKeyCode(), event); } } return super.dispatchKeyEvent(event); } + + private boolean isControlKey(KeyEvent keyEvent) { + int keyCode = keyEvent.getKeyCode(); + return ( + keyCode == KeyEvent.KEYCODE_BACK || + keyCode == KeyEvent.KEYCODE_SHIFT_LEFT || + keyCode == KeyEvent.KEYCODE_DEL + + ); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialog.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialog.java index 278c3380..593338a8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialog.java @@ -18,7 +18,7 @@ public class BaseDialog extends Dialog { public BaseDialog(@NonNull Context context) { super(context); - if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()){ + if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) { setOnKeyListener((dialog, keyCode, event) -> { if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) { return BarcodeManager.onKeyDown(event.getKeyCode(), event); @@ -32,8 +32,8 @@ public class BaseDialog extends Dialog { int keyCode = keyEvent.getKeyCode(); return ( keyCode == KeyEvent.KEYCODE_BACK || - keyCode == KeyEvent.KEYCODE_SHIFT_LEFT - + keyCode == KeyEvent.KEYCODE_SHIFT_LEFT || + keyCode == KeyEvent.KEYCODE_DEL ); } 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 b2d41182..5f3af6dc 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 @@ -8,11 +8,14 @@ import androidx.databinding.ObservableArrayList; import com.annimon.stream.Stream; import com.google.gson.Gson; import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; import org.jetbrains.annotations.NotNull; +import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -28,10 +31,13 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.rest.model.SingleValueDTO; import it.integry.integrywmsnative.core.utility.UtilityBarcode; 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 retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -106,6 +112,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ public static void saveRigaCollo(MtbColr mtbColrToSave, RunnableArgs onComplete, RunnableArgs onFailed){ + mtbColrToSave.setMtbAart(null); + mtbColrToSave.setRifPartitaMag(null); + EntityRESTConsumer.processEntity(mtbColrToSave, new ISimpleOperationCallback() { @Override public void onSuccess(MtbColr value) { @@ -507,6 +516,25 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ + public static void doesColloContainsAnyRow(MtbColt mtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { + + HashMap params = new HashMap<>(); + params.put("gestione", mtbColt.getGestione()); + params.put("ser_collo", mtbColt.getSerCollo()); + params.put("num_collo", mtbColt.getNumCollo()); + params.put("data_collo", mtbColt.getDataColloD()); + + String whereCond = UtilityQuery.concatFieldsInWhereCond(params); + + String query = "SELECT COUNT(*) as value FROM mtb_colr " + + "WHERE " + whereCond; + + 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/SystemRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java index bd75142f..ac17f208 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java @@ -32,7 +32,7 @@ import retrofit2.Response; public class SystemRESTConsumer extends _BaseRESTConsumer { - public static void processSql(String nativeSql, final Type clazz, final ISimpleOperationCallback callback) { + public static void processSql(String nativeSql, final Type clazz, RunnableArgs onComplete, RunnableArgs onFailed) { NativeSqlRequestDTO nativeSqlDTO = new NativeSqlRequestDTO(); nativeSqlDTO.nativeSql = nativeSql; @@ -51,12 +51,12 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { Reader reader = new InputStreamReader(ims); T gsonObj = gson.fromJson(reader, clazz); - callback.onSuccess(gsonObj); + onComplete.run(gsonObj); } @Override public void onFailed(Exception ex) { - callback.onFailed(ex); + onFailed.run(ex); } }); } @@ -64,12 +64,18 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { @Override public void onFailure(Call> call, Throwable t) { Log.e("ProcessSql", t.toString()); - callback.onFailed(new Exception(t)); - // UtilityLogger.errorMe(new Exception(t), nativeSql); + onFailed.run(new Exception(t)); } }); } + public static void processSql(String nativeSql, final Type clazz, final ISimpleOperationCallback callback) { + + processSql(nativeSql, clazz, data -> { + callback.onSuccess((T) data); + }, callback::onFailed); + + } public static void getAvailableProfiles(final ISimpleOperationCallback> callback){ diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SingleValueDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SingleValueDTO.java new file mode 100644 index 00000000..b100af04 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SingleValueDTO.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.core.rest.model; + +public class SingleValueDTO { + + private T value; + + public T getValue() { + return value; + } + + public SingleValueDTO setValue(T value) { + this.value = value; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SlackMessageDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SlackMessageDTO.java deleted file mode 100644 index 2efbf28e..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SlackMessageDTO.java +++ /dev/null @@ -1,4 +0,0 @@ -package it.integry.integrywmsnative.core.rest.model; - -public class SlackMessageDTO { -} 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 5a64a1c4..8cd781ee 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 @@ -25,6 +25,7 @@ public class DBSettingsModel { private boolean flagCanAddExtraItemSpedizione; private boolean flagCanAutoOpenNewULAccettazione; private boolean flagCanAddExtraQuantitySpedizione; + private boolean flagEnableCheckDepositoSpedizione; public List getAvailableProfiles() { return availableProfiles; @@ -139,4 +140,14 @@ public class DBSettingsModel { this.flagCanAddExtraQuantitySpedizione = flagCanAddExtraQuantitySpedizione; return this; } + + + public boolean isFlagEnableCheckDepositoSpedizione() { + return flagEnableCheckDepositoSpedizione; + } + + public DBSettingsModel setFlagEnableCheckDepositoSpedizione(boolean flagEnableCheckDepositoSpedizione) { + this.flagEnableCheckDepositoSpedizione = flagEnableCheckDepositoSpedizione; + 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 fa8e835c..e4b4a43d 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 @@ -214,6 +214,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("SPEDIZIONE") .setKeySection("FLAG_CAN_ADD_EXTRA_QUANTITY")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PICKING") + .setSection("SPEDIZIONE") + .setKeySection("ENABLE_CHECK_DEPOSITO")); GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { @@ -226,6 +230,7 @@ public class SettingsManager { dbSettingsModelIstance.setFlagCanAddExtraItemSpedizione(getValueFromList(list, "FLAG_CAN_ADD_EXTRA_ITEMS", Boolean.class)); dbSettingsModelIstance.setFlagCanAutoOpenNewULAccettazione(getValueFromList(list, "FLAG_AUTO_OPEN_NEW_UL", Boolean.class)); dbSettingsModelIstance.setFlagCanAddExtraQuantitySpedizione(getValueFromList(list, "FLAG_CAN_ADD_EXTRA_QUANTITY", Boolean.class)); + dbSettingsModelIstance.setFlagEnableCheckDepositoSpedizione(getValueFromList(list, "ENABLE_CHECK_DEPOSITO", Boolean.class)); if(onComplete != null) onComplete.run(); }, onFailed); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java index c4b53366..c87ce266 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java @@ -11,6 +11,11 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; public class UtilityBarcode { + + public static boolean isBarcodeOrdineV(BarcodeScanDTO barcodeScanDTO) { + return (isEan13(barcodeScanDTO) || isEtichetta128(barcodeScanDTO)) && barcodeScanDTO.getStringValue().startsWith("3"); + } + public static boolean isEtichettaAnonima(BarcodeScanDTO barcodeScanDTO){ return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128 && barcodeScanDTO.getStringValue().startsWith("U"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityQuery.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityQuery.java new file mode 100644 index 00000000..cad443f8 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityQuery.java @@ -0,0 +1,31 @@ +package it.integry.integrywmsnative.core.utility; + +import java.util.HashMap; + +public class UtilityQuery { + + public static String concatFieldsInWhereCond(HashMap inputData) { + + StringBuilder sbWhereCond = new StringBuilder(); + + HashMap singleInputData = inputData; + Object[] keys = singleInputData.keySet().toArray(); + + sbWhereCond.append("("); + + for(int k = 0; k < keys.length; k++) { + Object value = singleInputData.get(keys[k]); + + sbWhereCond.append(keys[k] + (value == null ? " IS NULL" : " = " + UtilityDB.valueToString(value))); + + if(k < keys.length - 1) sbWhereCond.append(" AND "); + } + + sbWhereCond.append(")"); + + + + return sbWhereCond.toString(); + } + +} 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 d26b80b4..3a1b6f09 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 @@ -40,4 +40,22 @@ public class UtilityString { return tmp; } + + public static String mid(String string, Integer start) { + return mid(string, start, 0); + } + + public static String mid(String string, Integer start, Integer length){ + String value = ""; + if(start <= string.length()) { + if(length == 0){ + length = string.length() - start + 1; + } else if (length > string.length() - start){ + length = string.length() - start + 1; + } + value = string.substring(start - 1, start + length - 1).trim(); + } + return value; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java index 6cff0929..cdc4fa7b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java @@ -107,14 +107,12 @@ public class ListaBancaliActivity extends BaseActivity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); // Check which request we're responding to if (requestCode == PICK_UL_REQUEST) { // Make sure the request was successful if (resultCode == RESULT_OK) { - // MtbColt recoveredMtbColt = data.getParcelableExtra("key"); - - this.setResult(RESULT_OK, data); this.finish(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java index e0bfc964..0b953e1c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java @@ -50,9 +50,7 @@ public class OrdineAcquistoPvHelper { griglia.setDescrLisa(dto.getDescrLisa()); griglia.setDescrDepo(dto.getDescrDepo()); griglia.setCountArticoli(dto.getGrigliaAcquistiChild().size()); - mGrigliaRepository.saveGriglia(griglia, id -> { - saveLisAToGriglia(dto.getGrigliaAcquistiChild(), griglia, onSave, onFail); - }, onFail); + mGrigliaRepository.saveGriglia(griglia, id -> saveLisAToGriglia(dto.getGrigliaAcquistiChild(), griglia, onSave, onFail), onFail); }, onFail); } @@ -64,7 +62,7 @@ public class OrdineAcquistoPvHelper { toSave.setIdGriglia(griglia.getGrigliaId()); articoliGriglia.add(toSave); } - mArticoliGrigliaRepository.saveArticoliToGriglia(articoliGriglia, () -> onSave.run(griglia), onFail); + mArticoliGrigliaRepository.saveArticoliToGriglia(articoliGriglia,griglia, () -> onSave.run(griglia), onFail); } public void createNewOrder(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onError) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java index 83045003..447bd2cb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java @@ -97,6 +97,8 @@ public class VenditaHelper { Trace perfTrace = UtilityFirebase.getNewPerformanceTrace("db_load_pick_v"); perfTrace.start(); + codMdep = SettingsManager.iDB().isFlagEnableCheckDepositoSpedizione() ? codMdep : null; + service.getPickingList(codMdep, dateCons, joinedBarcodes).enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/viewmodel/VenditaViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/viewmodel/VenditaViewModel.java index 9ecf77fc..613ff3e8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/viewmodel/VenditaViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/viewmodel/VenditaViewModel.java @@ -8,7 +8,10 @@ import android.text.SpannableString; import com.annimon.stream.Stream; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import it.integry.integrywmsnative.R; @@ -57,7 +60,9 @@ public class VenditaViewModel { BarcodeManager.disable(); final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - if(UtilityBarcode.isEtichettaAnonima(data)) { + if(UtilityBarcode.isBarcodeOrdineV(data)) { + this.executeEtichettaOrdineV(data.getStringValue(), progressDialog); + } else if(UtilityBarcode.isEtichettaAnonima(data)) { this.executeEtichettaLU(data.getStringValue(), progressDialog); } else if(UtilityBarcode.isEtichetta128(data)){ this.executeEtichettaEan128(data, progressDialog); @@ -103,6 +108,46 @@ public class VenditaViewModel { } + + private void executeEtichettaOrdineV(String barcode, Dialog progressDialog) { + String gestione = ""; + + char c = barcode.charAt(0); + if (c == '1') + gestione = "A"; + else if (c == '2') + gestione = "L"; + else if (c == '3') + gestione = "V"; + + int numOrd = Integer.parseInt(UtilityString.mid(barcode, 10)); + + Date date = null; + try { + date = new SimpleDateFormat("ddMMyyyy") + .parse(UtilityString.mid(barcode, 2, 8)); + } catch (ParseException ex) { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + + return; + } + + + final String finalGestione = gestione; + final Date finalDate = date; + + List filteredOrders = Stream.of(mOrdini) + .filter(x -> x.getNumOrd() == numOrd && x.getGestione().equalsIgnoreCase(finalGestione) && x.getDataOrdD().equals(finalDate)).toList(); + + mFragment.refreshOrdini(filteredOrders); + mFragment.refreshRecyclerView(); + + + progressDialog.dismiss(); + BarcodeManager.enable(); + } + private void executeEtichettaLU(String SSCC, Dialog progressDialog) { ColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java index fb5bf3f0..28c18d60 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java @@ -305,7 +305,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO } } - public void refreshOrderBy(boolean forceHiddenCheck){ + private void refreshOrderBy(boolean forceHiddenCheck){ try { List mtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get() != null ? mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr() : null; @@ -317,7 +317,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO } } - public void applyFilter(String descriptionText) { + private void applyFilter(String descriptionText) { this.mBindings.filteredArtsInListExpandableLayout.expand(true); @@ -750,20 +750,20 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO if (matchedRows.get(0).getTempPickData() != null && matchedRows.get(0).getTempPickData().getSourceMtbColt() != null ) { - MtbColt tempSourceMtbColt = matchedRows.get(0).getTempPickData().getSourceMtbColt(); +// MtbColt tempSourceMtbColt = matchedRows.get(0).getTempPickData().getSourceMtbColt(); - if (tempSourceMtbColt.getGestione().equals(matchedRows.get(0).getGestione()) && - tempSourceMtbColt.getNumCollo() == matchedRows.get(0).getNumCollo() && - tempSourceMtbColt.getSerCollo().equals(matchedRows.get(0).getSerCollo()) && - tempSourceMtbColt.getDataColloS().equals(matchedRows.get(0).getDataColloS())) { +// if (tempSourceMtbColt.getGestione().equals(matchedRows.get(0).getGestione()) && +// tempSourceMtbColt.getNumCollo() == matchedRows.get(0).getNumCollo() && +// tempSourceMtbColt.getSerCollo().equals(matchedRows.get(0).getSerCollo()) && +// tempSourceMtbColt.getDataColloS().equals(matchedRows.get(0).getDataColloS())) { onOrdineRowDispatch(matchedRows.get(0)); - } else { - //Se sto pickando da una UL diversa da quella suggerita allora non te la apro in - //automatico ma ti mostro il filtro - applyFilter(""); - refreshOrderBy(false); - } +// } else { +// //Se sto pickando da una UL diversa da quella suggerita allora non te la apro in +// //automatico ma ti mostro il filtro +// applyFilter(""); +// refreshOrderBy(false); +// } } else if(matchedRows.get(0).isDeactivated()) { applyFilter(""); @@ -861,22 +861,31 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO final Dialog progress = UtilityProgress.createDefaultProgressDialog(mActivity); - if(thereIsAnyRowInUL()) { - ColliMagazzinoRESTConsumer.updateDataFine( - mActivity, - progress, - mArticoliInColloBottomSheetViewModel.mtbColt.get(), - () -> distribuisciCollo(progress, (generatedMtbColts) -> { - if(shouldPrint) printCollo(progress, generatedMtbColts, onComplete); - else { - postCloseOperations(generatedMtbColts, onComplete); - progress.dismiss(); - } - })); - } else { - if(mtbColtSessionID != null) ColliDataRecover.closeSession(mtbColtSessionID); - deleteCollo(progress, onComplete); - } + final MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + + ColliMagazzinoRESTConsumer.doesColloContainsAnyRow(currentMtbColt, containRows -> { + + if(containRows) { + ColliMagazzinoRESTConsumer.updateDataFine( + mActivity, + progress, + currentMtbColt, + () -> distribuisciCollo(progress, (generatedMtbColts) -> { + if(shouldPrint) printCollo(progress, generatedMtbColts, onComplete); + else { + postCloseOperations(generatedMtbColts, onComplete); + progress.dismiss(); + } + })); + } else { + if(mtbColtSessionID != null) ColliDataRecover.closeSession(mtbColtSessionID); + deleteCollo(progress, onComplete); + } + + + }, ex -> { + UtilityExceptions.defaultException(mActivity, ex, progress); + }); } else { if(onComplete != null) onComplete.run(); @@ -1115,10 +1124,10 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO batchLotEnabled = tmpPickData.getMtbPartitaMag().getFlagStato() == null || tmpPickData.getMtbPartitaMag().getFlagStato().equalsIgnoreCase("A"); } - boolean useQtaDaEvadere; + boolean useQtaDaEvadere = false; if(tmpPickData.getQtaTot() != null) { - useQtaDaEvadere = qtaDaEvadere.floatValue() < tmpPickData.getQtaTot().floatValue() && item.getMtbAart().isFlagQtaCnfFissa(); + useQtaDaEvadere = qtaDaEvadere.floatValue() < tmpPickData.getQtaTot().floatValue();// && item.getMtbAart().isFlagQtaCnfFissa(); if (useQtaDaEvadere) { dto.setQtaTot(qtaDaEvadere); dto.setMaxQta(qtaDaEvadere); @@ -1141,8 +1150,12 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO } - if(dto.getQtaTot() != null && dto.getQtaTot().floatValue() > 0 && dto.getQtaCnf() != null && dto.getQtaCnf().floatValue() > 0) { - dto.setNumCnf(dto.getQtaTot().divide(dto.getQtaCnf()).intValue()); + if(dto.getQtaDaEvadere() != null && dto.getQtaDaEvadere().floatValue() > 0 && dto.getQtaCnf() != null && dto.getQtaCnf().floatValue() > 0) { + if(useQtaDaEvadere && (dto.getQtaDaEvadere() != null && dto.getQtaDaEvadere().floatValue() > 0)) { + dto.setNumCnf(dto.getQtaDaEvadere().divide(dto.getQtaCnf()).intValue()); + } else { + dto.setNumCnf((dto.getQtaTot().compareTo(dto.getQtaDaEvadere()) < 0 ? dto.getQtaTot() : dto.getQtaDaEvadere()).divide(dto.getQtaCnf()).intValue()); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java index 67b5fe02..1061de90 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java @@ -5,6 +5,7 @@ import android.app.ProgressDialog; import android.content.Context; import androidx.databinding.DataBindingUtil; import androidx.databinding.Observable; +import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableField; import androidx.databinding.ObservableList; import androidx.annotation.NonNull; @@ -22,8 +23,11 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import java.lang.ref.WeakReference; +import java.math.BigDecimal; +import java.util.ArrayList; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; @@ -32,6 +36,7 @@ import it.integry.integrywmsnative.core.model.MtbColt; 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.UtilityString; import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetMtbcolrItemBinding; import it.integry.integrywmsnative.view.bottomsheet.ArticoliInColloBottomSheetHelper; @@ -153,18 +158,27 @@ public class ArticoliInColloBottomSheetViewModel { mBindings.bottomSheetActionsTitle.setText(clickedItem.getDescrizione()); mBindings.bottomSheetActionsSubtitle.setText(clickedItem.getCodMart()); + + //Setting qty with unt_mis + if(clickedItem.getMtbAart() != null) { + if (clickedItem.getMtbAart().isFlagQtaCnfFissa()) { + mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol()) + (!UtilityString.isNullOrEmpty(clickedItem.getMtbAart().getUntMis()) ? ("" + clickedItem.getMtbAart().getUntMis()) : "")); + } else { + mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getNumCnf()) + " " + mContext.getString(R.string.unt_mis_col)); + } + } else { + mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol())); + } + mBindings.bottomSheetActionsEditBtn.setOnClickListener(v -> onItemEdit(position)); mBindings.bottomSheetActionsDeleteBtn.setOnClickListener(v -> onItemDelete(position)); - - mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol()) + " " + clickedItem.getUntMis()); - - }; private void onItemEdit(int position) { MtbColr itemToEdit = mtbColt.get().getMtbColr().get(position); + MtbColr cloneItemToEdit = (MtbColr) itemToEdit.clone(); MtbColr originalItem = (MtbColr) itemToEdit.clone(); @@ -184,12 +198,16 @@ public class ArticoliInColloBottomSheetViewModel { final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext); - itemToEdit.setQtaCol(quantityDTO.qtaTot.getBigDecimal()); - itemToEdit.setNumCnf(quantityDTO.numCnf.getBigDecimal()); - ColliMagazzinoRESTConsumer.updateRiga(itemToEdit, () ->{ + cloneItemToEdit.setQtaCol(quantityDTO.qtaTot.getBigDecimal()); + cloneItemToEdit.setNumCnf(quantityDTO.numCnf.getBigDecimal()); + + ColliMagazzinoRESTConsumer.updateRiga(cloneItemToEdit, () ->{ mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + itemToEdit.setQtaCol(quantityDTO.qtaTot.getBigDecimal()); + itemToEdit.setNumCnf(quantityDTO.numCnf.getBigDecimal()); + progress.dismiss(); mtbColt.get().getMtbColr().set(position, itemToEdit); @@ -205,19 +223,29 @@ public class ArticoliInColloBottomSheetViewModel { String text = mContext.getResources().getString(R.string.alert_delete_mtb_colr); DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(text), null, () -> { - MtbColr itemToDelete = mtbColt.get().getMtbColr().get(position); - final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext); - progress.show(); + MtbColt mtbColtClone = (MtbColt) mtbColt.get().clone(); + mtbColtClone.setMtbColr(new ObservableArrayList<>()); + mtbColtClone.setOperation(CommonModelConsts.OPERATION.NO_OP); - ColliMagazzinoRESTConsumer.deleteRiga(itemToDelete, () -> { + MtbColr itemToDelete = (MtbColr) mtbColt.get().getMtbColr().get(position).clone(); + itemToDelete.setQtaCol(itemToDelete.getQtaCol().multiply(new BigDecimal(-1))); + itemToDelete.setNumCnf(itemToDelete.getNumCnf().multiply(new BigDecimal(-1))); + itemToDelete.setRiga(null); + itemToDelete.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + mtbColtClone.getMtbColr().add(itemToDelete); + + ColliMagazzinoRESTConsumer.saveCollo(mtbColtClone, (newMtbColt) -> { mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); - progress.dismiss(); - mtbColt.get().getMtbColr().remove(position); + MtbColr deletedItem = mtbColt.get().getMtbColr().get(position); + mtbColt.get().getMtbColr().remove(deletedItem); - if(this.mOnItemDeletedCallback != null) this.mOnItemDeletedCallback.run(itemToDelete); + progress.dismiss(); + + if(this.mOnItemDeletedCallback != null) this.mOnItemDeletedCallback.run(deletedItem); }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); }, null).show();