[CARELLI - Ordini Acquisto]

aggiunto controllo su ctMaxOrd
migrazione a nuovo servizio
This commit is contained in:
Valerio Castellana 2023-03-22 16:58:02 +01:00
parent d3c518b7df
commit 0f08d704ac
28 changed files with 830 additions and 520 deletions

View File

@ -40,8 +40,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
InventarioRoomDTO.class, InventarioRoomDTO.class,
InventarioRowRoomDTO.class InventarioRowRoomDTO.class
}, },
version = 14, version = 15)
exportSchema = true)
@TypeConverters({ @TypeConverters({
DateConverter.class, DateConverter.class,
BigDecimalConverter.class, BigDecimalConverter.class,
@ -135,4 +134,24 @@ public abstract class AppDatabase extends RoomDatabase {
+ " ADD COLUMN new INTEGER"); + " ADD COLUMN new INTEGER");
} }
}; };
static final Migration MIGRATION_14_15 = new Migration(14, 15) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
// rimuovo vincoli "not null" dai campi id_griglia e cod_alis
database.execSQL("DROP TABLE IF EXISTS ordini_tmp;");
database.execSQL("CREATE TABLE ordini_tmp (ordine_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, data_ins INTEGER, annotazioni TEXT, transmitted INTEGER NOT NULL, transmission_date INTEGER, gestione TEXT, data_ord INTEGER, num_ord INTEGER, cod_mdep TEXT, id_griglia INTEGER, cod_alis TEXT);");
database.execSQL("INSERT INTO ordini_tmp(ordine_id,data_ins,annotazioni,transmitted,transmission_date,gestione,data_ord,num_ord,cod_mdep,id_griglia,cod_alis) SELECT ordini.ordine_id,ordini.data_ins,ordini.annotazioni,ordini.transmitted,ordini.transmission_date,ordini.gestione,ordini.data_ord,ordini.num_ord,ordini.cod_mdep,ordini.id_griglia,griglie.cod_alis from ordini left outer join griglie on ordini.id_griglia = griglie.griglia_id;");
database.execSQL("DROP TABLE ordini;");
database.execSQL("ALTER TABLE ordini_tmp RENAME TO ordini;");
// aggiungo campo cod_alis sulle righe dell'ordine
database.execSQL("DROP TABLE IF EXISTS art_ord_tmp;");
database.execSQL("CREATE TABLE IF NOT EXISTS art_ord_tmp( articolo_ordine_id INTEGER PRIMARY KEY AUTOINCREMENT, cod_mart TEXT, descrizione TEXT, unt_mis TEXT, qta_cnf REAL NOT NULL, bar_code TEXT, merce_da_ric REAL NOT NULL, media_sett REAL NOT NULL, flag_qta_multipla TEXT, qta_min_ordinabile REAL NOT NULL, id_ordine INTEGER NOT NULL, qta_ord REAL NOT NULL, data_ins INTEGER, new_no_promo INTEGER NOT NULL, system_note TEXT, cod_alis TEXT , FOREIGN KEY(id_ordine) REFERENCES ordini(ordine_id) ON UPDATE NO ACTION ON DELETE CASCADE );");
database.execSQL("INSERT INTO art_ord_tmp(articolo_ordine_id, cod_mart, descrizione, unt_mis, qta_cnf, bar_code, merce_da_ric, media_sett, flag_qta_multipla, qta_min_ordinabile, id_ordine, qta_ord, data_ins, new_no_promo, system_note, cod_alis) SELECT articolo_ordine_id, cod_mart, descrizione, unt_mis, qta_cnf, bar_code, merce_da_ric, media_sett, flag_qta_multipla, qta_min_ordinabile, id_ordine, qta_ord, data_ins, new_no_promo, system_note, null from articoli_ordine;");
database.execSQL("DROP TABLE articoli_ordine;");
database.execSQL("ALTER TABLE art_ord_tmp RENAME TO articoli_ordine;");
database.execSQL("CREATE INDEX IF NOT EXISTS index_articoli_ordine_id_ordine ON articoli_ordine (id_ordine);");
database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index_articoli_ordine_id_ordine_cod_mart ON articoli_ordine (id_ordine, cod_mart);");
}
};
} }

View File

@ -19,7 +19,7 @@ public interface OrdineDao {
@Query("SELECT ordini.* from ordini where ordini.transmitted = 1") @Query("SELECT ordini.* from ordini where ordini.transmitted = 1")
List<Ordine> getAllTrasnmitted(); List<Ordine> getAllTrasnmitted();
@Query("SELECT ordini.*, count(articolo_ordine_id) as countArticoli from ordini left join articoli_ordine ON ordini.ordine_id = articoli_ordine.id_ordine where ordini.transmitted = 0 and ordini.cod_alis = :codAlis group by ordini.ordine_id") @Query("SELECT ordini.*, count(articolo_ordine_id) as countArticoli from ordini left join articoli_ordine ON ordini.ordine_id = articoli_ordine.id_ordine where ordini.transmitted = 0 and ((:codAlis is null and ordini.cod_alis is null) OR (ordini.cod_alis = :codAlis)) group by ordini.ordine_id")
List<OrdineWrapper> getAllOpenOrdersByGriglia(String codAlis); List<OrdineWrapper> getAllOpenOrdersByGriglia(String codAlis);
@Insert @Insert

View File

@ -73,6 +73,9 @@ public class ArticoloOrdine {
@ColumnInfo(name = "system_note") @ColumnInfo(name = "system_note")
private String systemNote; private String systemNote;
@ColumnInfo(name = "cod_alis")
private String codAlis;
@Ignore @Ignore
private int ggScadenza = 0; private int ggScadenza = 0;
@ -85,6 +88,9 @@ public class ArticoloOrdine {
@Ignore @Ignore
private BigDecimal qtaProposta = BigDecimal.ZERO; private BigDecimal qtaProposta = BigDecimal.ZERO;
@Ignore
private BigDecimal ctMaxOrd = BigDecimal.ZERO;
@Ignore @Ignore
private int bgTint; private int bgTint;
@ -277,4 +283,21 @@ public class ArticoloOrdine {
public void setSystemNote(String systemNote) { public void setSystemNote(String systemNote) {
this.systemNote = systemNote; this.systemNote = systemNote;
} }
public String getCodAlis() {
return codAlis;
}
public void setCodAlis(String codAlis) {
this.codAlis = codAlis;
}
public BigDecimal getCtMaxOrd() {
return ctMaxOrd;
}
public ArticoloOrdine setCtMaxOrd(BigDecimal ctMaxOrd) {
this.ctMaxOrd = ctMaxOrd;
return this;
}
} }

View File

@ -1,6 +1,5 @@
package it.integry.integrywmsnative.core.data_store.db.entity; package it.integry.integrywmsnative.core.data_store.db.entity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
@ -55,7 +54,6 @@ public class Ordine {
private int idGriglia; private int idGriglia;
@ColumnInfo(name = "cod_alis") @ColumnInfo(name = "cod_alis")
@NonNull
private String codAlis; private String codAlis;
public int getOrdineId() { public int getOrdineId() {

View File

@ -1,218 +0,0 @@
package it.integry.integrywmsnative.core.data_store.db.view_model;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.HashMap;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class ArticoloDTO {
public String codMart;
public String descrizione;
public String untMis;
public float qtaCnf;
public String barcode;
public float merceDaRic;
public float mediaSett;
public String flagQtaMultipla;
public String flagTracciabilita;
public float qtaMinOrdinabile;
public boolean newNoPromo;
private int ggScadenza;
private float giacenza;
private float qtaPrevistaVendita;
private float qtaProposta;
private float qtaOrd;
public String getCodMart() {
return codMart;
}
public void setCodMart(String codMart) {
this.codMart = codMart;
}
public String getDescrizione() {
return descrizione;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public String getUntMis() {
return untMis;
}
public void setUntMis(String untMis) {
this.untMis = untMis;
}
public float getQtaCnf() {
return qtaCnf;
}
public void setQtaCnf(float qtaCnf) {
this.qtaCnf = qtaCnf;
}
public String getBarCode() {
return barcode;
}
public void setBarCode(String barCode) {
this.barcode = barCode;
}
public float getMerceDaRic() {
return merceDaRic;
}
public void setMerceDaRic(float merceDaRic) {
this.merceDaRic = merceDaRic;
}
public float getMediaSett() {
return mediaSett;
}
public void setMediaSett(float mediaSett) {
this.mediaSett = mediaSett;
}
public String getFlagQtaMultipla() {
return flagQtaMultipla;
}
public void setFlagQtaMultipla(String flagQtaMultipla) {
this.flagQtaMultipla = flagQtaMultipla;
}
public float getQtaMinOrdinabile() {
return qtaMinOrdinabile;
}
public void setQtaMinOrdinabile(float qtaMinOrdinabile) {
this.qtaMinOrdinabile = qtaMinOrdinabile;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public int getGgScadenza() {
return ggScadenza;
}
public void setGgScadenza(int ggScadenza) {
this.ggScadenza = ggScadenza;
}
public float getGiacenza() {
return giacenza;
}
public void setGiacenza(float giacenza) {
this.giacenza = giacenza;
}
public float getQtaPrevistaVendita() {
return qtaPrevistaVendita;
}
public void setQtaPrevistaVendita(float qtaPrevistaVendita) {
this.qtaPrevistaVendita = qtaPrevistaVendita;
}
public float getQtaProposta() {
return qtaProposta;
}
public void setQtaProposta(float qtaProposta) {
this.qtaProposta = qtaProposta;
}
public String getFlagTracciabilita() {
return flagTracciabilita;
}
public ArticoloDTO setFlagTracciabilita(String flagTracciabilita) {
this.flagTracciabilita = flagTracciabilita;
return this;
}
public boolean isNewNoPromo() {
return newNoPromo;
}
public ArticoloDTO setNewNoPromo(boolean newNoPromo) {
this.newNoPromo = newNoPromo;
return this;
}
public float getQtaOrd() {
return qtaOrd;
}
public ArticoloDTO setQtaOrd(float qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public ArticoloOrdine convertToArticoloOrdine(Ordine ordine) {
ArticoloOrdine articolo = new ArticoloOrdine();
articolo.setIdOrdine(ordine.getOrdineId());
articolo.setBarCode(this.getBarCode());
articolo.setCodMart(this.getCodMart());
articolo.setMediaSett(this.getMediaSett());
articolo.setFlagQtaMultipla(this.getFlagQtaMultipla());
articolo.setQtaMinOrdinabile(this.getQtaMinOrdinabile());
articolo.setMerceDaRic(this.getMerceDaRic());
articolo.setQtaCnf(this.getQtaCnf());
articolo.setUntMis(this.getUntMis());
articolo.setDescrizione(this.getDescrizione());
articolo.setDataIns(UtilityDate.getDateInstance());
articolo.setGgScadenza(this.getGgScadenza());
articolo.setGiacenza(BigDecimal.valueOf(this.getGiacenza()));
articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita()));
articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta()));
articolo.setNewNoPromo(this.isNewNoPromo());
articolo.setSystemNote(generateSystemNote());
articolo.setQtaOrd(this.getQtaOrd());
return articolo;
}
public String generateSystemNote() {
HashMap<String, String> pairs = new HashMap<>();
pairs.put("qta_proposta", String.valueOf(qtaProposta));
pairs.put("giacenza", String.valueOf(giacenza));
return new JSONObject(pairs).toString();
}
public int getSortByBarcodeCondition(String barcode) {
if (codMart.equalsIgnoreCase(barcode))
return 1;
if (barcode != null) {
if (barcode.equalsIgnoreCase(barcode))
return 2;
if (StringUtils.leftPad(barcode, 13, "0").equalsIgnoreCase(barcode))
return 3;
}
return 100;
}
}

View File

@ -0,0 +1,224 @@
package it.integry.integrywmsnative.core.data_store.db.view_model;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
public class ArticoloOrdinabileDTO {
private String codAlis;
private String codMart;
private String descrizione;
private String untMis;
private float qtaCnf;
private float merceDaRic;
private float mediaSett;
private String flagQtaMultipla;
private String flagTracciabilita;
private String flagQtaCnfFissa;
private boolean newNoPromo;
private float qtaMinOrdinabile;
private int ggScadenza;
private BigDecimal giacenza;
private BigDecimal qtaPrevistaVendita;
private BigDecimal qtaProposta;
private float qtaOrd;
private float ctMaxOrd;
private List<String> barcode;
private String selectedBarcode;
public String getCodAlis() {
return codAlis;
}
public ArticoloOrdinabileDTO setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
public String getCodMart() {
return codMart;
}
public ArticoloOrdinabileDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizione() {
return descrizione;
}
public ArticoloOrdinabileDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public String getUntMis() {
return untMis;
}
public ArticoloOrdinabileDTO setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
public float getQtaCnf() {
return qtaCnf;
}
public ArticoloOrdinabileDTO setQtaCnf(float qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public float getMerceDaRic() {
return merceDaRic;
}
public ArticoloOrdinabileDTO setMerceDaRic(float merceDaRic) {
this.merceDaRic = merceDaRic;
return this;
}
public float getMediaSett() {
return mediaSett;
}
public ArticoloOrdinabileDTO setMediaSett(float mediaSett) {
this.mediaSett = mediaSett;
return this;
}
public String getFlagQtaMultipla() {
return flagQtaMultipla;
}
public ArticoloOrdinabileDTO setFlagQtaMultipla(String flagQtaMultipla) {
this.flagQtaMultipla = flagQtaMultipla;
return this;
}
public String getFlagTracciabilita() {
return flagTracciabilita;
}
public ArticoloOrdinabileDTO setFlagTracciabilita(String flagTracciabilita) {
this.flagTracciabilita = flagTracciabilita;
return this;
}
public String getFlagQtaCnfFissa() {
return flagQtaCnfFissa;
}
public ArticoloOrdinabileDTO setFlagQtaCnfFissa(String flagQtaCnfFissa) {
this.flagQtaCnfFissa = flagQtaCnfFissa;
return this;
}
public boolean isNewNoPromo() {
return newNoPromo;
}
public ArticoloOrdinabileDTO setNewNoPromo(boolean newNoPromo) {
this.newNoPromo = newNoPromo;
return this;
}
public float getQtaMinOrdinabile() {
return qtaMinOrdinabile;
}
public ArticoloOrdinabileDTO setQtaMinOrdinabile(float qtaMinOrdinabile) {
this.qtaMinOrdinabile = qtaMinOrdinabile;
return this;
}
public int getGgScadenza() {
return ggScadenza;
}
public ArticoloOrdinabileDTO setGgScadenza(int ggScadenza) {
this.ggScadenza = ggScadenza;
return this;
}
public BigDecimal getGiacenza() {
return giacenza;
}
public ArticoloOrdinabileDTO setGiacenza(BigDecimal giacenza) {
this.giacenza = giacenza;
return this;
}
public BigDecimal getQtaPrevistaVendita() {
return qtaPrevistaVendita;
}
public ArticoloOrdinabileDTO setQtaPrevistaVendita(BigDecimal qtaPrevistaVendita) {
this.qtaPrevistaVendita = qtaPrevistaVendita;
return this;
}
public BigDecimal getQtaProposta() {
return qtaProposta;
}
public ArticoloOrdinabileDTO setQtaProposta(BigDecimal qtaProposta) {
this.qtaProposta = qtaProposta;
return this;
}
public float getQtaOrd() {
return qtaOrd;
}
public ArticoloOrdinabileDTO setQtaOrd(float qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public float getCtMaxOrd() {
return ctMaxOrd;
}
public ArticoloOrdinabileDTO setCtMaxOrd(float ctMaxOrd) {
this.ctMaxOrd = ctMaxOrd;
return this;
}
public List<String> getBarcode() {
return barcode;
}
public ArticoloOrdinabileDTO setBarcode(List<String> barcode) {
this.barcode = barcode;
return this;
}
public String generateSystemNote() {
HashMap<String, String> pairs = new HashMap<>();
pairs.put("qta_proposta", String.valueOf(qtaProposta));
pairs.put("giacenza", String.valueOf(giacenza));
return new JSONObject(pairs).toString();
}
public String getSelectedBarcode() {
return selectedBarcode;
}
public ArticoloOrdinabileDTO setSelectedBarcode(String selectedBarcode) {
this.selectedBarcode = selectedBarcode;
return this;
}
}

View File

@ -1,36 +0,0 @@
package it.integry.integrywmsnative.core.data_store.db.view_model;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
public class GrigliaDTO {
private String descrLisa;
private String descrDepo;
private List<ArticoloDTO> grigliaAcquistiChild;
public String getDescrLisa() {
return descrLisa;
}
public void setDescrLisa(String descrLisa) {
this.descrLisa = descrLisa;
}
public String getDescrDepo() {
return descrDepo;
}
public void setDescrDepo(String descrDepo) {
this.descrDepo = descrDepo;
}
public List<ArticoloDTO> getGrigliaAcquistiChild() {
return grigliaAcquistiChild;
}
public void setGrigliaAcquistiChild(List<ArticoloDTO> grigliaAcquistiChild) {
this.grigliaAcquistiChild = grigliaAcquistiChild;
}
}

View File

@ -1,33 +0,0 @@
package it.integry.integrywmsnative.core.data_store.db.view_model;
import androidx.room.Embedded;
import androidx.room.Ignore;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class OrdineWithGriglia {
@Embedded
private Ordine ordine;
@Embedded
private Griglia griglia;
public Ordine getOrdine() {
return ordine;
}
public void setOrdine(Ordine ordine) {
this.ordine = ordine;
}
public Griglia getGriglia() {
return griglia;
}
public void setGriglia(Griglia griglia) {
this.griglia = griglia;
}
}

View File

@ -0,0 +1,40 @@
package it.integry.integrywmsnative.core.data_store.db.view_model;
import java.util.List;
public class OrdiniAcquistoGrigliaDTO {
private String descrLisa;
private String descrDepo;
private List<ArticoloOrdinabileDTO> articoli;
public String getDescrLisa() {
return descrLisa;
}
public OrdiniAcquistoGrigliaDTO setDescrLisa(String descrLisa) {
this.descrLisa = descrLisa;
return this;
}
public String getDescrDepo() {
return descrDepo;
}
public OrdiniAcquistoGrigliaDTO setDescrDepo(String descrDepo) {
this.descrDepo = descrDepo;
return this;
}
public List<ArticoloOrdinabileDTO> getArticoli() {
return articoli;
}
public OrdiniAcquistoGrigliaDTO setArticoli(List<ArticoloOrdinabileDTO> articoli) {
this.articoli = articoli;
return this;
}
}

View File

@ -0,0 +1,10 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class EmptyOrderException extends Exception {
public EmptyOrderException() {
super(UtilityResources.getString(R.string.empty_order));
}
}

View File

@ -0,0 +1,12 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class MaxQtyExceededException extends Exception {
public MaxQtyExceededException() {
super(UtilityResources.getString(R.string.max_qty_exceeded));
}
}

View File

@ -2,8 +2,6 @@ package it.integry.integrywmsnative.core.rest.consumers;
import android.util.Log; import android.util.Log;
import com.annimon.stream.Stream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
@ -13,8 +11,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.data_store.db.view_model.OrdiniAcquistoGrigliaDTO;
import it.integry.integrywmsnative.core.data_store.db.view_model.GrigliaDTO;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
@ -37,47 +34,23 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
this.magazzinoRESTConsumer = magazzinoRESTConsumer; this.magazzinoRESTConsumer = magazzinoRESTConsumer;
} }
public void getArticoliListino(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) { public void retrieveArticoli(String codAlis, String codMdep, RunnableArgs<OrdiniAcquistoGrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class, 300); PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class, 300);
ordiniARestService ordiniARestService.retrieveArticoli(codAlis, codMdep, null)
.getArticoliListino(codAlis)
.enqueue(new Callback<>() { .enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<GrigliaDTO>> call, Response<ServiceRESTResponse<GrigliaDTO>> response) { public void onResponse(Call<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> call, Response<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> response) {
analyzeAnswer(response, "getArticoliListino", griglia -> { var startTime = new Date().getTime();
analyzeAnswer(response, "retrieveArticoliOrdine", articoliOrdineWrapper -> {
UtilityThread.executeParallel(() -> { UtilityThread.executeParallel(() -> {
var startTime = new Date().getTime();
List<ArticoloDTO> listaArticoli = new ArrayList<>();
Stream.of(griglia.getGrigliaAcquistiChild())
.groupBy(ArticoloDTO::getCodMart)
.forEach(entry -> {
if (entry.getValue().size() == 1) {
listaArticoli.add(entry.getValue().get(0));
} else {
for (ArticoloDTO articolo : entry.getValue()) {
if (!articolo.getBarCode().endsWith(articolo.getCodMart())) {
listaArticoli.add(articolo);
}
}
}
});
griglia.setGrigliaAcquistiChild(listaArticoli);
Log.d("LOADING TIME 1", "MS: " + (new Date().getTime() - startTime)); Log.d("LOADING TIME 1", "MS: " + (new Date().getTime() - startTime));
onSuccess.run(griglia); onSuccess.run(articoliOrdineWrapper);
}, false); }, false);
}, onFailed); }, onFailed);
} }
@Override @Override
public void onFailure(Call<ServiceRESTResponse<GrigliaDTO>> call, Throwable t) { public void onFailure(Call<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> call, Throwable t) {
Log.e("getArticoliListino_pv", t.toString()); Log.e("getArticoliListino_pv", t.toString());
UtilityLogger.error(new Exception(t)); UtilityLogger.error(new Exception(t));
onFailed.run(new Exception(t)); onFailed.run(new Exception(t));
@ -85,7 +58,31 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) { public void retrieveArticolo(String codAlis, String codMdep, String barcode, RunnableArgs<OrdiniAcquistoGrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class, 300);
ordiniARestService.retrieveArticoli(codAlis, codMdep, barcode)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> call, Response<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> response) {
var startTime = new Date().getTime();
analyzeAnswer(response, "retrieveArticoliOrdine", articoliOrdineWrapper -> {
UtilityThread.executeParallel(() -> {
Log.d("LOADING TIME 1", "MS: " + (new Date().getTime() - startTime));
onSuccess.run(articoliOrdineWrapper);
}, false);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> call, Throwable t) {
Log.e("getArticoliListino_pv", t.toString());
UtilityLogger.error(new Exception(t));
onFailed.run(new Exception(t));
}
});
}
public void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, String codMdep, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) {
SaveDTO saveDTO = new SaveDTO(); SaveDTO saveDTO = new SaveDTO();
OrdineDTO ordineDTO = new OrdineDTO(); OrdineDTO ordineDTO = new OrdineDTO();
List<ArtDTO> artRows = new ArrayList<>(); List<ArtDTO> artRows = new ArrayList<>();
@ -101,21 +98,36 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
saveDTO.setGestione("O"); saveDTO.setGestione("O");
saveDTO.setOrdineDTO(ordineDTO); saveDTO.setOrdineDTO(ordineDTO);
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class, 300);
ordiniARestService.save(codMdep, saveDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
var startTime = new Date().getTime();
analyzeAnswer(response, "retrieveArticoliOrdine", articoliOrdineWrapper -> {
UtilityThread.executeParallel(() -> {
// if (data == null) {
// onFailed.run(new Exception("Nessun ordine generato"));
// return;
// }
ordine.setTransmitted(true);
ordine.setTransmissionDate(UtilityDate.getDateInstance());
// ordine.setGestione(data.getGestione());
// ordine.setDataOrdS(data.getDataOrd());
// ordine.setCodMdep(data.getCodMdep());
// ordine.setNumOrd(data.getNumOrd());
onSuccess.run(ordine);
}, false);
}, onFailed);
}
magazzinoRESTConsumer.saveOrdine(saveDTO, data -> { @Override
if (data == null) { public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
onFailed.run(new Exception("Nessun ordine generato")); Log.e("saveOrdine", t.toString());
return; UtilityLogger.error(new Exception(t));
} onFailed.run(new Exception(t));
}
ordine.setTransmitted(true); });
ordine.setTransmissionDate(UtilityDate.getDateInstance());
ordine.setGestione(data.getGestione());
ordine.setDataOrdS(data.getDataOrd());
ordine.setCodMdep(data.getCodMdep());
ordine.setNumOrd(data.getNumOrd());
onSuccess.run(ordine);
}, onFailed);
} }
@ -131,6 +143,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
dto.setSystemNote(art.getSystemNote()); dto.setSystemNote(art.getSystemNote());
dto.setQta(BigDecimal.valueOf(art.getQtaOrd())); dto.setQta(BigDecimal.valueOf(art.getQtaOrd()));
dto.setQtaCnf(BigDecimal.valueOf(art.getQtaCnf())); dto.setQtaCnf(BigDecimal.valueOf(art.getQtaCnf()));
dto.setCodAlis(art.getCodAlis());
dto.setColli(BigDecimal.ZERO); dto.setColli(BigDecimal.ZERO);
return dto; return dto;
} }

View File

@ -1,13 +1,18 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import it.integry.integrywmsnative.core.data_store.db.view_model.GrigliaDTO; import it.integry.integrywmsnative.core.data_store.db.view_model.OrdiniAcquistoGrigliaDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Query; import retrofit2.http.Query;
public interface PVOrdiniAcquistoRESTConsumerService { public interface PVOrdiniAcquistoRESTConsumerService {
@GET("wms/ordini-acquisto/articoli")
Call<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> retrieveArticoli(@Query("chiaveGriglia") String codAlis, @Query("codMdep") String codMdep, @Query("barcodeArt") String barcode);
@POST("SM2GetElencoArticoli") @POST("wms/ordini-acquisto/save")
Call<ServiceRESTResponse<GrigliaDTO>> getArticoliListino(@Query("chiaveGriglia") String codAlis); Call<ServiceRESTResponse<Object>> save(@Query("codMdep") String codMdep, @Body() SaveDTO saveDTO);
} }

View File

@ -8,23 +8,23 @@ import it.integry.integrywmsnative.core.CommonConst;
public class UtilityBigDecimal { public class UtilityBigDecimal {
public static boolean greaterThan(BigDecimal input, BigDecimal toCompareWith) { public static boolean greaterThan(BigDecimal input, BigDecimal toCompareWith) {
if(input == null) return false; if (input == null) return false;
if(toCompareWith == null) return false; if (toCompareWith == null) return false;
return input.compareTo(toCompareWith) > 0; return input.compareTo(toCompareWith) > 0;
} }
public static boolean equalsTo(BigDecimal input, BigDecimal toCompareWith) { public static boolean equalsTo(BigDecimal input, BigDecimal toCompareWith) {
if(input == null && toCompareWith == null) return true; if (input == null && toCompareWith == null) return true;
if(input == null) return false; if (input == null) return false;
if(toCompareWith == null) return false; if (toCompareWith == null) return false;
return input.compareTo(toCompareWith) == 0; return input.compareTo(toCompareWith) == 0;
} }
public static boolean lowerThan(BigDecimal input, BigDecimal toCompareWith) { public static boolean lowerThan(BigDecimal input, BigDecimal toCompareWith) {
if(input == null) return false; if (input == null) return false;
if(toCompareWith == null) return false; if (toCompareWith == null) return false;
return input.compareTo(toCompareWith) < 0; return input.compareTo(toCompareWith) < 0;
} }
@ -38,15 +38,15 @@ public class UtilityBigDecimal {
} }
public static BigDecimal getLowerBetween(BigDecimal input1, BigDecimal input2) { public static BigDecimal getLowerBetween(BigDecimal input1, BigDecimal input2) {
if(input1 == null) return input2; if (input1 == null) return input2;
if(input2 == null) return input1; if (input2 == null) return input1;
return lowerThan(input1, input2) ? input1 : input2; return lowerThan(input1, input2) ? input1 : input2;
} }
public static BigDecimal getGreaterBetween(BigDecimal input1, BigDecimal input2) { public static BigDecimal getGreaterBetween(BigDecimal input1, BigDecimal input2) {
if(input1 == null) return input2; if (input1 == null) return input2;
if(input2 == null) return input1; if (input2 == null) return input1;
return greaterThan(input1, input2) ? input1 : input2; return greaterThan(input1, input2) ? input1 : input2;
} }
@ -57,14 +57,14 @@ public class UtilityBigDecimal {
} }
public static BigDecimal divide(BigDecimal input1, BigDecimal divisor, RoundingMode roundingMode) { public static BigDecimal divide(BigDecimal input1, BigDecimal divisor, RoundingMode roundingMode) {
if(divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null; if (divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;
return input1.divide(divisor, 3, roundingMode); return input1.divide(divisor, 3, roundingMode);
} }
public static BigDecimal divideToInteger(BigDecimal input1, BigDecimal divisor) { public static BigDecimal divideToInteger(BigDecimal input1, BigDecimal divisor) {
if(divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null; if (divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;
return new BigDecimal(input1.divide(divisor,3, BigDecimal.ROUND_HALF_EVEN).intValue()); return new BigDecimal(input1.divide(divisor, 3, BigDecimal.ROUND_HALF_EVEN).intValue());
} }
@ -73,8 +73,8 @@ public class UtilityBigDecimal {
} }
public static BigDecimal divideAndRoundToInteger(BigDecimal input1, BigDecimal divisor, RoundingMode roundingMode) { public static BigDecimal divideAndRoundToInteger(BigDecimal input1, BigDecimal divisor, RoundingMode roundingMode) {
if(divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null; if (divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;
return new BigDecimal(input1.divide(divisor,0, roundingMode).intValue()); return new BigDecimal(input1.divide(divisor, 0, roundingMode).intValue());
} }
public static BigDecimal multiply(BigDecimal input1, BigDecimal multiplier) { public static BigDecimal multiply(BigDecimal input1, BigDecimal multiplier) {
@ -87,4 +87,8 @@ public class UtilityBigDecimal {
return input.setScale(CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS, RoundingMode.HALF_EVEN); return input.setScale(CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);
} }
public static boolean isNullOrZero(BigDecimal input) {
return input == null || equalsTo(input, BigDecimal.ZERO);
}
} }

View File

@ -5,123 +5,133 @@ import java.util.Date;
public class ArtDTO { public class ArtDTO {
private Integer rigaOrd; private Integer rigaOrd;
private String codMart; private String codMart;
private String barcode; private String barcode;
private String descrizione; private String descrizione;
private Date dataIns; private Date dataIns;
private String untMis; private String untMis;
private BigDecimal qta; private BigDecimal qta;
private BigDecimal qtaCnf; private BigDecimal qtaCnf;
private BigDecimal colli; private BigDecimal colli;
private String partitaMag; private String partitaMag;
private Date dataScad; private Date dataScad;
private String systemNote; private String systemNote;
private String codAlis;
public Integer getRigaOrd() { public Integer getRigaOrd() {
return rigaOrd; return rigaOrd;
} }
public void setRigaOrd(Integer rigaOrd) { public void setRigaOrd(Integer rigaOrd) {
this.rigaOrd = rigaOrd; this.rigaOrd = rigaOrd;
} }
public String getCodMart() { public String getCodMart() {
return codMart; return codMart;
} }
public void setCodMart(String codMart) { public void setCodMart(String codMart) {
this.codMart = codMart; this.codMart = codMart;
} }
public String getBarcode() { public String getBarcode() {
return barcode; return barcode;
} }
public void setBarcode(String barcode) { public void setBarcode(String barcode) {
this.barcode = barcode; this.barcode = barcode;
} }
public String getDescrizione() { public String getDescrizione() {
return descrizione; return descrizione;
} }
public void setDescrizione(String descrizione) { public void setDescrizione(String descrizione) {
this.descrizione = descrizione; this.descrizione = descrizione;
} }
public Date getDataIns() { public Date getDataIns() {
return dataIns; return dataIns;
} }
public void setDataIns(Date dataIns) { public void setDataIns(Date dataIns) {
this.dataIns = dataIns; this.dataIns = dataIns;
} }
public String getUntMis() { public String getUntMis() {
return untMis; return untMis;
} }
public void setUntMis(String untMis) { public void setUntMis(String untMis) {
this.untMis = untMis; this.untMis = untMis;
} }
public BigDecimal getQta() { public BigDecimal getQta() {
return qta; return qta;
} }
public void setQta(BigDecimal qta) { public void setQta(BigDecimal qta) {
this.qta = qta; this.qta = qta;
} }
public BigDecimal getQtaCnf() { public BigDecimal getQtaCnf() {
return qtaCnf; return qtaCnf;
} }
public void setQtaCnf(BigDecimal qtaCnf) { public void setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf; this.qtaCnf = qtaCnf;
} }
public BigDecimal getColli() { public BigDecimal getColli() {
return colli; return colli;
} }
public void setColli(BigDecimal colli) { public void setColli(BigDecimal colli) {
this.colli = colli; this.colli = colli;
} }
public String getPartitaMag() { public String getPartitaMag() {
return partitaMag; return partitaMag;
} }
public void setPartitaMag(String partitaMag) { public void setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag; this.partitaMag = partitaMag;
} }
public Date getDataScad() { public Date getDataScad() {
return dataScad; return dataScad;
} }
public void setDataScad(Date dataScad) { public void setDataScad(Date dataScad) {
this.dataScad = dataScad; this.dataScad = dataScad;
} }
public String getSystemNote() { public String getSystemNote() {
return systemNote; return systemNote;
} }
public void setSystemNote(String systemNote) { public void setSystemNote(String systemNote) {
this.systemNote = systemNote; this.systemNote = systemNote;
} }
public String getCodAlis() {
return codAlis;
}
public ArtDTO setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
} }

View File

@ -29,7 +29,7 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO;
import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
@ -53,7 +53,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
@Inject @Inject
PVOrdineAcquistoEditViewModel mViewModel; PVOrdineAcquistoEditViewModel mViewModel;
public static Intent newInstance(Context context, Ordine ordine, List<ArticoloDTO> listArts) { public static Intent newInstance(Context context, Ordine ordine, List<ArticoloOrdinabileDTO> listArts) {
Intent myIntent = new Intent(context, PVOrdineAcquistoEditActivity.class); Intent myIntent = new Intent(context, PVOrdineAcquistoEditActivity.class);
String keyOrdine = DataCache.addItem(ordine); String keyOrdine = DataCache.addItem(ordine);
String keyListArts = DataCache.addItem(listArts); String keyListArts = DataCache.addItem(listArts);
@ -114,7 +114,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
ordine.setOrderNewProducts(false); ordine.setOrderNewProducts(false);
} }
}); });
List<ArticoloDTO> articoliGriglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_LIST_ARTS)); List<ArticoloOrdinabileDTO> articoliGriglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_LIST_ARTS));
this.mViewModel.init(ordine, articoliGriglia); this.mViewModel.init(ordine, articoliGriglia);
} }
@ -194,6 +194,14 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
}, null).show(this.getSupportFragmentManager(), "DialogEditArticoloView"); }, null).show(this.getSupportFragmentManager(), "DialogEditArticoloView");
} }
@Override
public void confirmExceedingQtyOrder(Runnable onSuccess) {
DialogSimpleMessageView.makeInfoDialog(getText(R.string.warning).toString(),
Html.fromHtml(getResources().getString(R.string.confirm_orderable_qty_exceeded)),
null,
onSuccess, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder");
}
@Override @Override
public int getColorFromResource(int resId) { public int getColorFromResource(int resId) {
return getResources().getColor(resId); return getResources().getColor(resId);

View File

@ -21,13 +21,16 @@ import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineR
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO;
import it.integry.integrywmsnative.core.exception.EmptyOrderException;
import it.integry.integrywmsnative.core.exception.NoArtsInGridException; import it.integry.integrywmsnative.core.exception.NoArtsInGridException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class PVOrdineAcquistoEditViewModel { public class PVOrdineAcquistoEditViewModel {
@ -52,7 +55,7 @@ public class PVOrdineAcquistoEditViewModel {
private Listener mListener; private Listener mListener;
private List<ArticoloDTO> mArticoliGriglia = new ArrayList<>(); private List<ArticoloOrdinabileDTO> mArticoliGriglia = new ArrayList<>();
private final MutableLiveData<List<ArticoloOrdine>> mArticoli = new MutableLiveData<>(); private final MutableLiveData<List<ArticoloOrdine>> mArticoli = new MutableLiveData<>();
@ -68,7 +71,7 @@ public class PVOrdineAcquistoEditViewModel {
this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer; this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer;
} }
public void init(Ordine ordine, List<ArticoloDTO> articoliGriglia) { public void init(Ordine ordine, List<ArticoloOrdinabileDTO> articoliGriglia) {
this.mCurrentOrdine = ordine; this.mCurrentOrdine = ordine;
mArticoliGriglia.clear(); mArticoliGriglia.clear();
mArticoliGriglia.addAll(articoliGriglia); mArticoliGriglia.addAll(articoliGriglia);
@ -91,18 +94,22 @@ public class PVOrdineAcquistoEditViewModel {
} }
private ArticoloOrdine completeDataArticoli(ArticoloOrdine art) { private ArticoloOrdine completeDataArticoli(ArticoloOrdine art) {
ArticoloDTO artGrid = Stream.of(mArticoliGriglia).filter(x -> art.getCodMart().equalsIgnoreCase(x.getCodMart())).findFirstOrElse(new ArticoloDTO()); ArticoloOrdinabileDTO artGrid = Stream.of(mArticoliGriglia).filter(x -> art.getCodMart().equalsIgnoreCase(x.getCodMart())).findFirstOrElse(null);
art.setGgScadenza(artGrid.getGgScadenza()); if (artGrid != null) {
art.setGiacenza(BigDecimal.valueOf(artGrid.getGiacenza())); art.setGgScadenza(artGrid.getGgScadenza());
art.setQtaProposta(BigDecimal.valueOf(artGrid.getQtaProposta())); art.setGiacenza(artGrid.getGiacenza());
art.setQtaPrevistaVendita(BigDecimal.valueOf(artGrid.getQtaPrevistaVendita())); art.setDescrizione(artGrid.getDescrizione());
art.setBgTint(getBgTint(art)); art.setQtaProposta(artGrid.getQtaProposta());
art.setMediaSett(artGrid.getMediaSett()); art.setQtaPrevistaVendita(artGrid.getQtaPrevistaVendita());
art.setQtaMinOrdinabile(artGrid.getQtaMinOrdinabile()); art.setBgTint(getBgTint(art));
art.setMerceDaRic(artGrid.getMerceDaRic()); art.setMediaSett(artGrid.getMediaSett());
art.setNewNoPromo(artGrid.isNewNoPromo()); art.setQtaMinOrdinabile(artGrid.getQtaMinOrdinabile());
art.setFlagQtaMultipla(artGrid.getFlagQtaMultipla()); art.setMerceDaRic(artGrid.getMerceDaRic());
art.setSystemNote(artGrid.generateSystemNote()); art.setNewNoPromo(artGrid.isNewNoPromo());
art.setFlagQtaMultipla(artGrid.getFlagQtaMultipla());
art.setCtMaxOrd(BigDecimal.valueOf(artGrid.getCtMaxOrd()));
art.setSystemNote(artGrid.generateSystemNote());
}
return art; return art;
} }
@ -126,7 +133,7 @@ public class PVOrdineAcquistoEditViewModel {
try { try {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
ArticoloDTO articoloDTO = getArticoloFromBarcode(barcode); ArticoloOrdinabileDTO articoloDTO = getArticoloFromBarcode(barcode);
if (articoloDTO == null) { if (articoloDTO == null) {
throw new NoResultFromBarcodeException(barcode); throw new NoResultFromBarcodeException(barcode);
} }
@ -149,16 +156,23 @@ public class PVOrdineAcquistoEditViewModel {
} }
} }
public void addArticoloToOrdine(ArticoloDTO art, Runnable onSuccess, RunnableArgs<Exception> onFail) { public void addArticoloToOrdine(ArticoloOrdinabileDTO art, Runnable onSuccess, RunnableArgs<Exception> onFail) {
try { try {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, art.codMart, foundArt -> { mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, art.getCodMart(), foundArt -> {
var articolo = foundArt != null ? foundArt : art.convertToArticoloOrdine(mCurrentOrdine); var articolo = foundArt != null ? completeDataArticoli(foundArt) : convertToArticoloOrdine(art, mCurrentOrdine);
Runnable saveAction = () -> {
if (isAutoOrderOnScan()) {
articolo.setQtaOrd(articolo.getQtaOrd() + articolo.getQtaCnf()); articolo.setQtaOrd(articolo.getQtaOrd() + articolo.getQtaCnf());
mArticoliOrdineRepository.saveArticoloToOrdine(articolo, () -> this.refreshListArticoli(onSuccess), onFail); mArticoliOrdineRepository.saveArticoloToOrdine(articolo, () -> this.refreshListArticoli(onSuccess), onFail);
};
if (isAutoOrderOnScan()) {
if (!UtilityBigDecimal.isNullOrZero(articolo.getCtMaxOrd()) && UtilityBigDecimal.greaterThan(BigDecimal.valueOf(articolo.getQtaOrd() + articolo.getQtaCnf()), articolo.getCtMaxOrd())) {
mListener.confirmExceedingQtyOrder(saveAction);
} else {
saveAction.run();
}
} else { } else {
this.sendOnItemDispatched(articolo, onSuccess); this.sendOnItemDispatched(articolo, onSuccess);
} }
@ -172,16 +186,50 @@ public class PVOrdineAcquistoEditViewModel {
} }
} }
public ArticoloDTO getArticoloFromBarcode(String barcode) throws NoArtsInGridException { private ArticoloOrdine convertToArticoloOrdine(ArticoloOrdinabileDTO art, Ordine ordine) {
ArticoloOrdine articolo = new ArticoloOrdine();
articolo.setIdOrdine(ordine.getOrdineId());
articolo.setBarCode(art.getSelectedBarcode());
articolo.setCodMart(art.getCodMart());
articolo.setMediaSett(art.getMediaSett());
articolo.setFlagQtaMultipla(art.getFlagQtaMultipla());
articolo.setQtaMinOrdinabile(art.getQtaMinOrdinabile());
articolo.setMerceDaRic(art.getMerceDaRic());
articolo.setQtaCnf(art.getQtaCnf());
articolo.setUntMis(art.getUntMis());
articolo.setDescrizione(art.getDescrizione());
articolo.setDataIns(UtilityDate.getDateInstance());
articolo.setGgScadenza(art.getGgScadenza());
articolo.setGiacenza(art.getGiacenza());
articolo.setQtaPrevistaVendita(art.getQtaPrevistaVendita());
articolo.setQtaProposta(art.getQtaProposta());
articolo.setNewNoPromo(art.isNewNoPromo());
articolo.setSystemNote(art.generateSystemNote());
articolo.setQtaOrd(art.getQtaOrd());
articolo.setCodAlis(art.getCodAlis());
articolo.setCtMaxOrd(BigDecimal.valueOf(art.getCtMaxOrd()));
return articolo;
}
public ArticoloOrdinabileDTO getArticoloFromBarcode(String barcode) throws NoArtsInGridException {
if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) { if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) {
throw new NoArtsInGridException(); throw new NoArtsInGridException();
} }
ArticoloOrdinabileDTO art = Stream.of(mArticoliGriglia).filter(articolo ->
articolo.getCodMart().equalsIgnoreCase(barcode) ||
articolo.getBarcode().contains(barcode) ||
articolo.getBarcode().contains(StringUtils.leftPad(barcode, 13, "0"))
return Stream.of(mArticoliGriglia).filter(articolo -> )
articolo.getCodMart().equalsIgnoreCase(barcode) || // .sortBy(x -> x.getSortByBarcodeCondition(barcode))
articolo.getBarcode().equalsIgnoreCase(barcode) || .findFirst().orElse(null);
articolo.getBarcode().equalsIgnoreCase(StringUtils.leftPad(barcode, 13, "0")) if (art != null) {
).sortBy(x -> x.getSortByBarcodeCondition(barcode)).findFirst().orElse(null); art.setSelectedBarcode(barcode);
}
return art;
} }
@ -189,14 +237,14 @@ public class PVOrdineAcquistoEditViewModel {
return SettingsManager.iDB().isFlagOrdinaArticoliOnScan(); return SettingsManager.iDB().isFlagOrdinaArticoliOnScan();
} }
private List<ArticoloDTO> getNewArticoli() { private List<ArticoloOrdinabileDTO> getNewArticoli() {
return mArticoliGriglia.stream() return mArticoliGriglia.stream()
.filter(x -> x.getQtaOrd() > 0f) .filter(x -> x.getQtaOrd() > 0f)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public void orderNewProducts() { public void orderNewProducts() {
List<ArticoloDTO> newArts = getNewArticoli(); List<ArticoloOrdinabileDTO> newArts = getNewArticoli();
if (!newArts.isEmpty()) { if (!newArts.isEmpty()) {
List<ArticoloOrdine> articoliToSave = new ArrayList<>(); List<ArticoloOrdine> articoliToSave = new ArrayList<>();
@ -212,7 +260,7 @@ public class PVOrdineAcquistoEditViewModel {
.findFirst() .findFirst()
.isEmpty() .isEmpty()
) { ) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine); ArticoloOrdine dto = convertToArticoloOrdine(articolo, mCurrentOrdine);
articoliToSave.add(dto); articoliToSave.add(dto);
} }
}); });
@ -232,7 +280,12 @@ public class PVOrdineAcquistoEditViewModel {
public void exportOrdine(Runnable onComplete) { public void exportOrdine(Runnable onComplete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), (ordine) -> { if (mArticoli.getValue() == null) {
this.sendError(new EmptyOrderException());
return;
}
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), codMdep, (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> { mOrdineRepository.updateOrder(ordine, ord -> {
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
@ -261,6 +314,8 @@ public class PVOrdineAcquistoEditViewModel {
public interface Listener extends ILoadingListener { public interface Listener extends ILoadingListener {
void onItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess); void onItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess);
void confirmExceedingQtyOrder(Runnable onSuccess);
int getColorFromResource(int resId); int getColorFromResource(int resId);
void onError(Exception ex); void onError(Exception ex);

View File

@ -4,6 +4,7 @@ import android.content.DialogInterface;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.text.InputType; import android.text.InputType;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -32,6 +33,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityObservable; import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding; import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class DialogEditArticoloView extends BaseDialogFragment implements DialogEditArticoloViewModel.Listener { public class DialogEditArticoloView extends BaseDialogFragment implements DialogEditArticoloViewModel.Listener {
@ -185,8 +187,20 @@ public class DialogEditArticoloView extends BaseDialogFragment implements Dialog
public void saveAndExit() { public void saveAndExit() {
this.onLoadingStarted(); if (!UtilityBigDecimal.isNullOrZero(this.getArticolo().getCtMaxOrd()) && UtilityBigDecimal.greaterThan(this.mViewModel.getNumCnf(), this.getArticolo().getCtMaxOrd())) {
DialogSimpleMessageView.makeInfoDialog(getText(R.string.warning).toString(),
Html.fromHtml(getActivity().getResources().getString(R.string.confirm_orderable_qty_exceeded)),
null,
this::save, () -> {
this.mBindings.inputNumCnfText.requestFocus();
}).show(getActivity().getSupportFragmentManager(), "confirmExceedingQtyOrder");
} else {
save();
}
}
private void save() {
this.onLoadingStarted();
this.mViewModel.save(newArticolo -> { this.mViewModel.save(newArticolo -> {
this.mOnComplete.run(newArticolo); this.mOnComplete.run(newArticolo);
this.onLoadingEnded(); this.onLoadingEnded();

View File

@ -23,6 +23,8 @@ public class DialogEditArticoloViewModel {
private BigDecimal internalQtaCnf; private BigDecimal internalQtaCnf;
private BigDecimal internalQtaTot; private BigDecimal internalQtaTot;
private BigDecimal maxQtaOrd;
@Inject @Inject
public DialogEditArticoloViewModel(ArticoliOrdineRepository articoliOrdineRepository) { public DialogEditArticoloViewModel(ArticoliOrdineRepository articoliOrdineRepository) {
this.mArticoliOrdineRepository = articoliOrdineRepository; this.mArticoliOrdineRepository = articoliOrdineRepository;
@ -86,6 +88,15 @@ public class DialogEditArticoloViewModel {
return this.internalQtaTot; return this.internalQtaTot;
} }
public BigDecimal getMaxQtaOrd() {
return maxQtaOrd;
}
public DialogEditArticoloViewModel setMaxQtaOrd(BigDecimal maxQtaOrd) {
this.maxQtaOrd = maxQtaOrd;
return this;
}
public interface Listener { public interface Listener {
void onDataChanged(); void onDataChanged();
@ -109,7 +120,6 @@ public class DialogEditArticoloViewModel {
this.mListener.onError(new InvalidOrderedQtyException()); this.mListener.onError(new InvalidOrderedQtyException());
return; return;
} }
this.mCurrentArticolo.setQtaOrd(this.internalQtaTot.floatValue()); this.mCurrentArticolo.setQtaOrd(this.internalQtaTot.floatValue());
try { try {

View File

@ -28,13 +28,14 @@ import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineR
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO;
import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper;
import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding; import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoView; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoView;
@ -50,7 +51,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
private Griglia mGriglia; private Griglia mGriglia;
private OrdineAcquistoPvOpenListAdapter mAdapter; private OrdineAcquistoPvOpenListAdapter mAdapter;
private final List<OrdineWrapper> mRenderedOrderList = new ArrayList<>(); private final List<OrdineWrapper> mRenderedOrderList = new ArrayList<>();
private final List<ArticoloDTO> mListArticoli = new ArrayList<>(); private final List<ArticoloOrdinabileDTO> mListArticoli = new ArrayList<>();
private boolean mRedirectToNewOrder = true; private boolean mRedirectToNewOrder = true;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>(); private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
@ -104,7 +105,8 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
if (griglia == null) { if (griglia == null) {
((IPoppableActivity) requireActivity()).pop(); ((IPoppableActivity) requireActivity()).pop();
} else { } else {
setGriglia(griglia, listArticoli); setGriglia(griglia);
setListaArticoli(listArticoli);
} }
}).show(requireActivity().getSupportFragmentManager(), "tag"); }).show(requireActivity().getSupportFragmentManager(), "tag");
@ -115,17 +117,23 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
titleText.setText(context.getText(R.string.pv_elenco_ordiniA_title_fragment).toString()); titleText.setText(context.getText(R.string.pv_elenco_ordiniA_title_fragment).toString());
} }
private void setGriglia(Griglia griglia, List<ArticoloDTO> listArticoli) { private void setGriglia(Griglia griglia) {
mGriglia = griglia; mGriglia = griglia;
mBinding.fabNewOrder.setVisibility(View.VISIBLE);
if (UtilityString.isNullOrEmpty(griglia.getCodAlis())) {
mBinding.infoGriglia.setVisibility(View.GONE);
} else {
mBinding.codAlis.setText(griglia.getCodAlis());
mBinding.descrLis.setText(griglia.getDescrLisa());
}
mBinding.descrDepo.setText(griglia.getDescrDepo());
fetchOrders();
}
private void setListaArticoli(List<ArticoloOrdinabileDTO> listArticoli) {
mListArticoli.clear(); mListArticoli.clear();
mListArticoli.addAll(listArticoli); mListArticoli.addAll(listArticoli);
mBinding.fabNewOrder.setVisibility(View.VISIBLE);
mBinding.codAlis.setText(griglia.getCodAlis());
mBinding.descrLis.setText(griglia.getDescrLisa());
mBinding.descrDepo.setText(griglia.getDescrDepo());
mBinding.countArtLis.setText(String.valueOf(listArticoli.size())); mBinding.countArtLis.setText(String.valueOf(listArticoli.size()));
fetchOrders();
} }
private void fetchOrders() { private void fetchOrders() {
@ -190,7 +198,6 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
}); });
}, this::onError); }, this::onError);
}), () -> { }), () -> {
}).show(requireActivity().getSupportFragmentManager(), "tag"); }).show(requireActivity().getSupportFragmentManager(), "tag");
} }
@ -210,7 +217,6 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
@Override @Override
public void setScrollToolbar(ElevatedToolbar toolbar) { public void setScrollToolbar(ElevatedToolbar toolbar) {
} }
@Override @Override

View File

@ -21,12 +21,15 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO;
import it.integry.integrywmsnative.core.exception.GridNotFoundException; import it.integry.integrywmsnative.core.exception.GridNotFoundException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogScanCodiceGrigliaBinding; import it.integry.integrywmsnative.databinding.DialogScanCodiceGrigliaBinding;
public class DialogScanGrigliaAcquistoView extends BaseDialogFragment { public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
@ -34,20 +37,20 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
private DialogScanCodiceGrigliaBinding mBinding; private DialogScanCodiceGrigliaBinding mBinding;
private int mBarcodeScannerIstanceID; private int mBarcodeScannerIstanceID;
private final RunnableArgss<Griglia, List<ArticoloDTO>> mOnDialogDismiss; private final RunnableArgss<Griglia, List<ArticoloOrdinabileDTO>> mOnDialogDismiss;
@Inject @Inject
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer; PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer;
private Griglia mGriglia; private Griglia mGriglia;
private List<ArticoloDTO> mListArticoli; private List<ArticoloOrdinabileDTO> mListArticoli;
public static DialogScanGrigliaAcquistoView newInstance(RunnableArgss<Griglia, List<ArticoloDTO>> onDialogDismiss) { public static DialogScanGrigliaAcquistoView newInstance(RunnableArgss<Griglia, List<ArticoloOrdinabileDTO>> onDialogDismiss) {
return new DialogScanGrigliaAcquistoView(onDialogDismiss); return new DialogScanGrigliaAcquistoView(onDialogDismiss);
} }
private DialogScanGrigliaAcquistoView(RunnableArgss<Griglia, List<ArticoloDTO>> onDialogDismiss) { private DialogScanGrigliaAcquistoView(RunnableArgss<Griglia, List<ArticoloOrdinabileDTO>> onDialogDismiss) {
super(); super();
mOnDialogDismiss = onDialogDismiss; mOnDialogDismiss = onDialogDismiss;
} }
@ -76,6 +79,17 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
return alertDialog; return alertDialog;
} }
public void ignore() {
BarcodeManager.disable();
RunnableArgs<Exception> mOnError = exception -> {
this.onError(exception);
BarcodeManager.enable();
};
retrieveArticoli(null, mOnError);
}
private void initBarcode() { private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
@ -100,15 +114,20 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
BarcodeManager.enable(); BarcodeManager.enable();
}; };
fetchArticoli(data.getStringValue(), mOnError); retrieveArticoli(data.getStringValue(), mOnError);
}; };
public void fetchArticoli(String codAlis, RunnableArgs<Exception> onFailed) { public void retrieveArticoli(String codAlis, RunnableArgs<Exception> onFailed) {
this.onLoadingStarted(); this.onLoadingStarted();
pvOrdiniAcquistoRESTConsumer.getArticoliListino(codAlis, dto -> { String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.retrieveArticoli(codAlis, codMdep, dto -> {
this.onLoadingEnded(); this.onLoadingEnded();
if (dto.getGrigliaAcquistiChild().size() <= 0) { if (dto.getArticoli().size() == 0) {
onFailed.run(new GridNotFoundException(codAlis)); if (UtilityString.isNullOrEmpty(codAlis)) {
onFailed.run(new NoArtsFoundException());
} else {
onFailed.run(new GridNotFoundException(codAlis));
}
return; return;
} }
@ -116,7 +135,7 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
mGriglia.setCodAlis(codAlis); mGriglia.setCodAlis(codAlis);
mGriglia.setDescrLisa(dto.getDescrLisa()); mGriglia.setDescrLisa(dto.getDescrLisa());
mGriglia.setDescrDepo(dto.getDescrDepo()); mGriglia.setDescrDepo(dto.getDescrDepo());
mListArticoli = dto.getGrigliaAcquistiChild(); mListArticoli = dto.getArticoli();
this.dismiss(); this.dismiss();
}, onFailed); }, onFailed);
} }

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z"/>
</vector>

View File

@ -8,6 +8,10 @@
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" /> <import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="java.math.BigDecimal" />
<import type="it.integry.integrywmsnative.core.utility.UtilityBigDecimal" />
<import type="android.view.View" /> <import type="android.view.View" />
<variable <variable
@ -309,6 +313,92 @@
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="@{UtilityBigDecimal.isNullOrZero(view.articolo.ctMaxOrd) ? View.GONE : View.VISIBLE}"
android:layout_marginTop="8dp">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/max_cnf"
android:text="@string/max_orderable_qty"
android:textColor="@android:color/black" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/max_cnf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(view.articolo.ctMaxOrd)}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="1" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="@string/unt_mis_col"
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="("
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:text="@{UtilityNumber.decimalToString(view.articolo.ctMaxOrd.multiply(BigDecimal.valueOf(view.articolo.qtaCnf)))}"
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="2dp"
android:text="@{view.articolo.untMis}"
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:text=")"
android:textColor="@android:color/black"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout> </RelativeLayout>
@ -318,14 +408,14 @@
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:gravity="center" android:gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
android:weightSum="1"> android:weightSum="2">
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:layout_weight="0.5" android:layout_weight="1"
android:background="@drawable/badge_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600" android:backgroundTint="@color/green_600"
android:orientation="vertical" android:orientation="vertical"
@ -424,7 +514,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="2dp" android:layout_marginStart="2dp"
android:layout_weight="0.5" android:layout_weight="1"
android:background="@drawable/badge_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary" android:backgroundTint="@color/colorPrimary"
android:orientation="vertical" android:orientation="vertical"

View File

@ -4,6 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<data> <data>
<variable <variable
name="view" name="view"
type="it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoView" /> type="it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoView" />
@ -68,18 +69,38 @@
android:textSize="16sp" /> android:textSize="16sp" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:gravity="bottom|center_horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/button_abort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.DangerOutline"
app:icon="@drawable/ic_clear_24dp"
app:strokeColor="@color/red_400"
android:onClick="@{() -> view.dismiss()}"
android:layout_marginEnd="8dp"
android:text="@string/abort" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.PrimaryOutline"
android:onClick="@{() -> view.ignore()}"
app:strokeColor="@color/blue_600"
app:icon="@drawable/baseline_skip_next_24"
android:text="@string/ignore" />
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_no"
style="@style/Button.DangerOutline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:text="@string/abort"
android:onClick="@{() -> view.dismiss()}"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/red_400" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>

View File

@ -44,6 +44,7 @@
android:padding="16dp"> android:padding="16dp">
<LinearLayout <LinearLayout
android:id="@+id/infoGriglia"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal">

View File

@ -431,6 +431,7 @@
<string name="scanner_settings_trigger_scan_mode_summary">Seleziona modalità scansione per lo scanner</string> <string name="scanner_settings_trigger_scan_mode_summary">Seleziona modalità scansione per lo scanner</string>
<string name="action_create_doc">Crea documento</string> <string name="action_create_doc">Crea documento</string>
<string name="no_arts_found">Nessun articolo compatibile trovato</string> <string name="no_arts_found">Nessun articolo compatibile trovato</string>
<string name="empty_order">L\'ordine selezionato non presenta articoli</string>
<string name="empty_lu">UL vuota</string> <string name="empty_lu">UL vuota</string>
<string name="ord_ven_qta_omaggio"><![CDATA[Qta omaggio: <b>%s %s</b>]]></string> <string name="ord_ven_qta_omaggio"><![CDATA[Qta omaggio: <b>%s %s</b>]]></string>
<string name="activity_picking_inventario_title">Inventario</string> <string name="activity_picking_inventario_title">Inventario</string>
@ -440,4 +441,8 @@
<string name="no_arts_in_grid">Nessun articolo presente in griglia</string> <string name="no_arts_in_grid">Nessun articolo presente in griglia</string>
<string name="invalid_quantity_ordered">La quantità ordinata non è valida</string> <string name="invalid_quantity_ordered">La quantità ordinata non è valida</string>
<string name="grid_not_found">La griglia selezionata non esiste o non presenta articoli</string> <string name="grid_not_found">La griglia selezionata non esiste o non presenta articoli</string>
<string name="ignore">Ignora</string>
<string name="max_orderable_qty">Qta massima ordinabile</string>
<string name="max_qty_exceeded">Quantità massima superata</string>
<string name="confirm_orderable_qty_exceeded"><![CDATA[La quantità massima consentita per questo articolo è stata superata! <br/> Vuoi cotinuare comunque con il salvataggio?]]>\</string>
</resources> </resources>

View File

@ -2,7 +2,7 @@
<resources> <resources>
<style name="Button.PrimaryOutline" parent="Widget.MaterialComponents.Button.OutlinedButton"> <style name="Button.PrimaryOutline" parent="Widget.Material3.Button.OutlinedButton">
<!-- <item name="fontFamily">@font/product_sans_regular</item> &lt;!&ndash; target android sdk versions < 26 and > 14 if theme other than AppCompat &ndash;&gt;--> <!-- <item name="fontFamily">@font/product_sans_regular</item> &lt;!&ndash; target android sdk versions < 26 and > 14 if theme other than AppCompat &ndash;&gt;-->
<!-- <item name="android:textStyle">bold</item>--> <!-- <item name="android:textStyle">bold</item>-->
<!-- <item name="android:textAllCaps">false</item>--> <!-- <item name="android:textAllCaps">false</item>-->
@ -11,7 +11,7 @@
<item name="iconTint">@color/colorPrimary</item> <item name="iconTint">@color/colorPrimary</item>
</style> </style>
<style name="Button.PrimaryFull" parent="Widget.MaterialComponents.Button"> <style name="Button.PrimaryFull" parent="Widget.Material3.Button.UnelevatedButton">
<!-- <item name="fontFamily">@font/product_sans_regular</item> &lt;!&ndash; target android sdk versions < 26 and > 14 if theme other than AppCompat &ndash;&gt;--> <!-- <item name="fontFamily">@font/product_sans_regular</item> &lt;!&ndash; target android sdk versions < 26 and > 14 if theme other than AppCompat &ndash;&gt;-->
<!-- <item name="android:textStyle">bold</item>--> <!-- <item name="android:textStyle">bold</item>-->
<!-- <item name="android:textAllCaps">false</item>--> <!-- <item name="android:textAllCaps">false</item>-->

View File

@ -437,6 +437,7 @@
<string name="scanner_settings_trigger_scan_mode_summary">Select scan mode</string> <string name="scanner_settings_trigger_scan_mode_summary">Select scan mode</string>
<string name="action_create_doc">Create document</string> <string name="action_create_doc">Create document</string>
<string name="no_arts_found">No product found</string> <string name="no_arts_found">No product found</string>
<string name="empty_order">No products found in order</string>
<string name="empty_lu">Empty LU</string> <string name="empty_lu">Empty LU</string>
<string name="ord_ven_qta_omaggio"><![CDATA[Free qty: <b>%s %s</b>]]></string> <string name="ord_ven_qta_omaggio"><![CDATA[Free qty: <b>%s %s</b>]]></string>
<!-- TODO: Remove or change this placeholder text --> <!-- TODO: Remove or change this placeholder text -->
@ -447,4 +448,8 @@
<string name="no_arts_in_grid">No product found in grid</string> <string name="no_arts_in_grid">No product found in grid</string>
<string name="invalid_quantity_ordered">Invalid quantity ordered</string> <string name="invalid_quantity_ordered">Invalid quantity ordered</string>
<string name="grid_not_found">The selected grid was not found or is empty</string> <string name="grid_not_found">The selected grid was not found or is empty</string>
<string name="ignore">Ignore</string>
<string name="max_orderable_qty">Max orderable qty</string>
<string name="max_qty_exceeded">Max quantity exceeded</string>
<string name="confirm_orderable_qty_exceeded"><![CDATA[Max permitted quantity exceeded for the current product!<br/> Do you wish to continue?]]></string>
</resources> </resources>