[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,
InventarioRowRoomDTO.class
},
version = 14,
exportSchema = true)
version = 15)
@TypeConverters({
DateConverter.class,
BigDecimalConverter.class,
@ -135,4 +134,24 @@ public abstract class AppDatabase extends RoomDatabase {
+ " 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")
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);
@Insert

View File

@ -73,6 +73,9 @@ public class ArticoloOrdine {
@ColumnInfo(name = "system_note")
private String systemNote;
@ColumnInfo(name = "cod_alis")
private String codAlis;
@Ignore
private int ggScadenza = 0;
@ -85,6 +88,9 @@ public class ArticoloOrdine {
@Ignore
private BigDecimal qtaProposta = BigDecimal.ZERO;
@Ignore
private BigDecimal ctMaxOrd = BigDecimal.ZERO;
@Ignore
private int bgTint;
@ -277,4 +283,21 @@ public class ArticoloOrdine {
public void setSystemNote(String 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;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
@ -55,7 +54,6 @@ public class Ordine {
private int idGriglia;
@ColumnInfo(name = "cod_alis")
@NonNull
private String codAlis;
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 com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
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.Ordine;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO;
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.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
@ -37,47 +34,23 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
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);
ordiniARestService
.getArticoliListino(codAlis)
ordiniARestService.retrieveArticoli(codAlis, codMdep, null)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<GrigliaDTO>> call, Response<ServiceRESTResponse<GrigliaDTO>> response) {
analyzeAnswer(response, "getArticoliListino", griglia -> {
UtilityThread.executeParallel(() -> {
public void onResponse(Call<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> call, Response<ServiceRESTResponse<OrdiniAcquistoGrigliaDTO>> response) {
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);
analyzeAnswer(response, "retrieveArticoliOrdine", articoliOrdineWrapper -> {
UtilityThread.executeParallel(() -> {
Log.d("LOADING TIME 1", "MS: " + (new Date().getTime() - startTime));
onSuccess.run(griglia);
onSuccess.run(articoliOrdineWrapper);
}, false);
}, onFailed);
}
@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());
UtilityLogger.error(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();
OrdineDTO ordineDTO = new OrdineDTO();
List<ArtDTO> artRows = new ArrayList<>();
@ -101,21 +98,36 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
saveDTO.setGestione("O");
saveDTO.setOrdineDTO(ordineDTO);
magazzinoRESTConsumer.saveOrdine(saveDTO, data -> {
if (data == null) {
onFailed.run(new Exception("Nessun ordine generato"));
return;
}
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());
// ordine.setGestione(data.getGestione());
// ordine.setDataOrdS(data.getDataOrd());
// ordine.setCodMdep(data.getCodMdep());
// ordine.setNumOrd(data.getNumOrd());
onSuccess.run(ordine);
}, false);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
Log.e("saveOrdine", t.toString());
UtilityLogger.error(new Exception(t));
onFailed.run(new Exception(t));
}
});
}
@ -131,6 +143,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
dto.setSystemNote(art.getSystemNote());
dto.setQta(BigDecimal.valueOf(art.getQtaOrd()));
dto.setQtaCnf(BigDecimal.valueOf(art.getQtaCnf()));
dto.setCodAlis(art.getCodAlis());
dto.setColli(BigDecimal.ZERO);
return dto;
}

View File

@ -1,13 +1,18 @@
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.gest.contab_doc_interni.dto.SaveDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
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")
Call<ServiceRESTResponse<GrigliaDTO>> getArticoliListino(@Query("chiaveGriglia") String codAlis);
@POST("wms/ordini-acquisto/save")
Call<ServiceRESTResponse<Object>> save(@Query("codMdep") String codMdep, @Body() SaveDTO saveDTO);
}

View File

@ -87,4 +87,8 @@ public class UtilityBigDecimal {
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

@ -28,6 +28,7 @@ public class ArtDTO {
private Date dataScad;
private String systemNote;
private String codAlis;
public Integer getRigaOrd() {
return rigaOrd;
@ -124,4 +125,13 @@ public class ArtDTO {
public void setSystemNote(String 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_store.db.entity.ArticoloOrdine;
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.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager;
@ -53,7 +53,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
@Inject
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);
String keyOrdine = DataCache.addItem(ordine);
String keyListArts = DataCache.addItem(listArts);
@ -114,7 +114,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
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);
}
@ -194,6 +194,14 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
}, 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
public int getColorFromResource(int 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.GrigliaRepository;
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.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class PVOrdineAcquistoEditViewModel {
@ -52,7 +55,7 @@ public class PVOrdineAcquistoEditViewModel {
private Listener mListener;
private List<ArticoloDTO> mArticoliGriglia = new ArrayList<>();
private List<ArticoloOrdinabileDTO> mArticoliGriglia = new ArrayList<>();
private final MutableLiveData<List<ArticoloOrdine>> mArticoli = new MutableLiveData<>();
@ -68,7 +71,7 @@ public class PVOrdineAcquistoEditViewModel {
this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer;
}
public void init(Ordine ordine, List<ArticoloDTO> articoliGriglia) {
public void init(Ordine ordine, List<ArticoloOrdinabileDTO> articoliGriglia) {
this.mCurrentOrdine = ordine;
mArticoliGriglia.clear();
mArticoliGriglia.addAll(articoliGriglia);
@ -91,18 +94,22 @@ public class PVOrdineAcquistoEditViewModel {
}
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);
if (artGrid != null) {
art.setGgScadenza(artGrid.getGgScadenza());
art.setGiacenza(BigDecimal.valueOf(artGrid.getGiacenza()));
art.setQtaProposta(BigDecimal.valueOf(artGrid.getQtaProposta()));
art.setQtaPrevistaVendita(BigDecimal.valueOf(artGrid.getQtaPrevistaVendita()));
art.setGiacenza(artGrid.getGiacenza());
art.setDescrizione(artGrid.getDescrizione());
art.setQtaProposta(artGrid.getQtaProposta());
art.setQtaPrevistaVendita(artGrid.getQtaPrevistaVendita());
art.setBgTint(getBgTint(art));
art.setMediaSett(artGrid.getMediaSett());
art.setQtaMinOrdinabile(artGrid.getQtaMinOrdinabile());
art.setMerceDaRic(artGrid.getMerceDaRic());
art.setNewNoPromo(artGrid.isNewNoPromo());
art.setFlagQtaMultipla(artGrid.getFlagQtaMultipla());
art.setCtMaxOrd(BigDecimal.valueOf(artGrid.getCtMaxOrd()));
art.setSystemNote(artGrid.generateSystemNote());
}
return art;
}
@ -126,7 +133,7 @@ public class PVOrdineAcquistoEditViewModel {
try {
this.sendOnLoadingStarted();
ArticoloDTO articoloDTO = getArticoloFromBarcode(barcode);
ArticoloOrdinabileDTO articoloDTO = getArticoloFromBarcode(barcode);
if (articoloDTO == null) {
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 {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, art.codMart, foundArt -> {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, art.getCodMart(), foundArt -> {
var articolo = foundArt != null ? foundArt : art.convertToArticoloOrdine(mCurrentOrdine);
if (isAutoOrderOnScan()) {
var articolo = foundArt != null ? completeDataArticoli(foundArt) : convertToArticoloOrdine(art, mCurrentOrdine);
Runnable saveAction = () -> {
articolo.setQtaOrd(articolo.getQtaOrd() + articolo.getQtaCnf());
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 {
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()) {
throw new NoArtsInGridException();
}
return Stream.of(mArticoliGriglia).filter(articolo ->
ArticoloOrdinabileDTO art = Stream.of(mArticoliGriglia).filter(articolo ->
articolo.getCodMart().equalsIgnoreCase(barcode) ||
articolo.getBarcode().equalsIgnoreCase(barcode) ||
articolo.getBarcode().equalsIgnoreCase(StringUtils.leftPad(barcode, 13, "0"))
).sortBy(x -> x.getSortByBarcodeCondition(barcode)).findFirst().orElse(null);
articolo.getBarcode().contains(barcode) ||
articolo.getBarcode().contains(StringUtils.leftPad(barcode, 13, "0"))
)
// .sortBy(x -> x.getSortByBarcodeCondition(barcode))
.findFirst().orElse(null);
if (art != null) {
art.setSelectedBarcode(barcode);
}
return art;
}
@ -189,14 +237,14 @@ public class PVOrdineAcquistoEditViewModel {
return SettingsManager.iDB().isFlagOrdinaArticoliOnScan();
}
private List<ArticoloDTO> getNewArticoli() {
private List<ArticoloOrdinabileDTO> getNewArticoli() {
return mArticoliGriglia.stream()
.filter(x -> x.getQtaOrd() > 0f)
.collect(Collectors.toList());
}
public void orderNewProducts() {
List<ArticoloDTO> newArts = getNewArticoli();
List<ArticoloOrdinabileDTO> newArts = getNewArticoli();
if (!newArts.isEmpty()) {
List<ArticoloOrdine> articoliToSave = new ArrayList<>();
@ -212,7 +260,7 @@ public class PVOrdineAcquistoEditViewModel {
.findFirst()
.isEmpty()
) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine);
ArticoloOrdine dto = convertToArticoloOrdine(articolo, mCurrentOrdine);
articoliToSave.add(dto);
}
});
@ -232,7 +280,12 @@ public class PVOrdineAcquistoEditViewModel {
public void exportOrdine(Runnable onComplete) {
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 -> {
this.sendOnLoadingEnded();
@ -261,6 +314,8 @@ public class PVOrdineAcquistoEditViewModel {
public interface Listener extends ILoadingListener {
void onItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess);
void confirmExceedingQtyOrder(Runnable onSuccess);
int getColorFromResource(int resId);
void onError(Exception ex);

View File

@ -4,6 +4,7 @@ import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.Html;
import android.text.InputType;
import android.view.LayoutInflater;
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.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class DialogEditArticoloView extends BaseDialogFragment implements DialogEditArticoloViewModel.Listener {
@ -185,8 +187,20 @@ public class DialogEditArticoloView extends BaseDialogFragment implements Dialog
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.mOnComplete.run(newArticolo);
this.onLoadingEnded();

View File

@ -23,6 +23,8 @@ public class DialogEditArticoloViewModel {
private BigDecimal internalQtaCnf;
private BigDecimal internalQtaTot;
private BigDecimal maxQtaOrd;
@Inject
public DialogEditArticoloViewModel(ArticoliOrdineRepository articoliOrdineRepository) {
this.mArticoliOrdineRepository = articoliOrdineRepository;
@ -86,6 +88,15 @@ public class DialogEditArticoloViewModel {
return this.internalQtaTot;
}
public BigDecimal getMaxQtaOrd() {
return maxQtaOrd;
}
public DialogEditArticoloViewModel setMaxQtaOrd(BigDecimal maxQtaOrd) {
this.maxQtaOrd = maxQtaOrd;
return this;
}
public interface Listener {
void onDataChanged();
@ -109,7 +120,6 @@ public class DialogEditArticoloViewModel {
this.mListener.onError(new InvalidOrderedQtyException());
return;
}
this.mCurrentArticolo.setQtaOrd(this.internalQtaTot.floatValue());
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.GrigliaRepository;
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.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity;
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 OrdineAcquistoPvOpenListAdapter mAdapter;
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 final List<Runnable> mOnPreDestroyList = new ArrayList<>();
@ -104,7 +105,8 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
if (griglia == null) {
((IPoppableActivity) requireActivity()).pop();
} else {
setGriglia(griglia, listArticoli);
setGriglia(griglia);
setListaArticoli(listArticoli);
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
@ -115,19 +117,25 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
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;
mListArticoli.clear();
mListArticoli.addAll(listArticoli);
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());
mBinding.countArtLis.setText(String.valueOf(listArticoli.size()));
fetchOrders();
}
private void setListaArticoli(List<ArticoloOrdinabileDTO> listArticoli) {
mListArticoli.clear();
mListArticoli.addAll(listArticoli);
mBinding.countArtLis.setText(String.valueOf(listArticoli.size()));
}
private void fetchOrders() {
this.onLoadingStarted();
@ -190,7 +198,6 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
});
}, this::onError);
}), () -> {
}).show(requireActivity().getSupportFragmentManager(), "tag");
}
@ -210,7 +217,6 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
@Override
public void setScrollToolbar(ElevatedToolbar toolbar) {
}
@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.BarcodeManager;
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.NoArtsFoundException;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
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;
public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
@ -34,20 +37,20 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
private DialogScanCodiceGrigliaBinding mBinding;
private int mBarcodeScannerIstanceID;
private final RunnableArgss<Griglia, List<ArticoloDTO>> mOnDialogDismiss;
private final RunnableArgss<Griglia, List<ArticoloOrdinabileDTO>> mOnDialogDismiss;
@Inject
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer;
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);
}
private DialogScanGrigliaAcquistoView(RunnableArgss<Griglia, List<ArticoloDTO>> onDialogDismiss) {
private DialogScanGrigliaAcquistoView(RunnableArgss<Griglia, List<ArticoloOrdinabileDTO>> onDialogDismiss) {
super();
mOnDialogDismiss = onDialogDismiss;
}
@ -76,6 +79,17 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
return alertDialog;
}
public void ignore() {
BarcodeManager.disable();
RunnableArgs<Exception> mOnError = exception -> {
this.onError(exception);
BarcodeManager.enable();
};
retrieveArticoli(null, mOnError);
}
private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
@ -100,15 +114,20 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
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();
pvOrdiniAcquistoRESTConsumer.getArticoliListino(codAlis, dto -> {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.retrieveArticoli(codAlis, codMdep, dto -> {
this.onLoadingEnded();
if (dto.getGrigliaAcquistiChild().size() <= 0) {
if (dto.getArticoli().size() == 0) {
if (UtilityString.isNullOrEmpty(codAlis)) {
onFailed.run(new NoArtsFoundException());
} else {
onFailed.run(new GridNotFoundException(codAlis));
}
return;
}
@ -116,7 +135,7 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
mGriglia.setCodAlis(codAlis);
mGriglia.setDescrLisa(dto.getDescrLisa());
mGriglia.setDescrDepo(dto.getDescrDepo());
mListArticoli = dto.getGrigliaAcquistiChild();
mListArticoli = dto.getArticoli();
this.dismiss();
}, 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="java.math.BigDecimal" />
<import type="it.integry.integrywmsnative.core.utility.UtilityBigDecimal" />
<import type="android.view.View" />
<variable
@ -309,6 +313,92 @@
</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>
@ -318,14 +408,14 @@
android:layout_marginTop="8dp"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="1">
android:weightSum="2">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="2dp"
android:layout_weight="0.5"
android:layout_weight="1"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600"
android:orientation="vertical"
@ -424,7 +514,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="2dp"
android:layout_weight="0.5"
android:layout_weight="1"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary"
android:orientation="vertical"

View File

@ -4,6 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="view"
type="it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoView" />
@ -68,18 +69,38 @@
android:textSize="16sp" />
</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_no"
style="@style/Button.DangerOutline"
android:id="@+id/button_abort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:text="@string/abort"
style="@style/Button.DangerOutline"
app:icon="@drawable/ic_clear_24dp"
app:strokeColor="@color/red_400"
android:onClick="@{() -> view.dismiss()}"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/red_400" />
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>
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@ -44,6 +44,7 @@
android:padding="16dp">
<LinearLayout
android:id="@+id/infoGriglia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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="action_create_doc">Crea documento</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="ord_ven_qta_omaggio"><![CDATA[Qta omaggio: <b>%s %s</b>]]></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="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="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>

View File

@ -2,7 +2,7 @@
<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="android:textStyle">bold</item>-->
<!-- <item name="android:textAllCaps">false</item>-->
@ -11,7 +11,7 @@
<item name="iconTint">@color/colorPrimary</item>
</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="android:textStyle">bold</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="action_create_doc">Create document</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="ord_ven_qta_omaggio"><![CDATA[Free qty: <b>%s %s</b>]]></string>
<!-- 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="invalid_quantity_ordered">Invalid quantity ordered</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>