Compare commits

...

41 Commits

Author SHA1 Message Date
f7e4a3d005 Finish v1.28.4(298) 2022-07-21 15:59:02 +02:00
a22ecb9620 -> v1.28.4 (298) 2022-07-21 15:58:54 +02:00
57c22b617e apportate modifiche rientro merce richieste da Agricoper,
risolto bug divide by zero in spedizione quando qtaCmfOrd è decimale
2022-07-21 15:58:01 +02:00
84876bf7c1 Finish v1.28.3(297) 2022-07-20 16:08:12 +02:00
2718f0ff2b Finish v1.28.3(297) 2022-07-20 16:08:12 +02:00
fca325855e -> v1.28.3 (297) 2022-07-20 16:08:06 +02:00
c6fc287a3f corretto controllo su creazione collo in accettazione
aggiunto controllo su stato articoli in servizio getArticoloBybarcode
2022-07-20 16:07:14 +02:00
29fd0292e7 Finish v1.28.2(296) 2022-07-20 15:46:00 +02:00
90cf83e3cd Finish v1.28.2(296) 2022-07-20 15:46:00 +02:00
f4c1f1fe34 -> v1.28.2 (296) 2022-07-20 15:45:53 +02:00
9e85b9f828 aggiunta setup non presente in lista 2022-07-20 15:44:40 +02:00
a9fd55c01f Finish v1.28.1(295) 2022-07-18 10:56:05 +02:00
506a56a1a2 Finish v1.28.1(295) 2022-07-18 10:56:05 +02:00
c93e29606c -> v1.28.1 (295) 2022-07-18 10:55:57 +02:00
4adc40aa90 adeguamento rientro merce da lavorazione agricoper 2022-07-18 10:54:29 +02:00
4842a6091b Documento perdite (wms). La possibilità di scaricare l'intera anagrafica puo' essere effettuata soltanto una volta (a cache vuota)
Inserire il campo 'Annotazioni' quando si crea un collo  che sia editabile dall'utente (picking Vendita)
2022-07-13 17:29:26 +02:00
9faf4123ef fase di creazione dell'ordine di acquisto preimpostare gli articoli che hanno una qta proposta da acquistare 2022-07-11 13:11:52 +02:00
cdf5b413a2 Finish v1.28.0(294) 2022-07-07 18:56:19 +02:00
4dd2ccdb13 Finish v1.28.0(294) 2022-07-07 18:56:18 +02:00
56c54d3cde -> v1.28.0 (294) 2022-07-07 18:56:13 +02:00
19e2d5b869 Creata login page per layout large 2022-07-07 18:21:30 +02:00
0acf023556 Creata UI per smartphone del rientro merce 2022-07-07 17:51:46 +02:00
71f6dc83fb Vario 2022-06-29 18:54:11 +02:00
3479ee2b87 Finish v1.27.6(293) 2022-06-29 16:39:22 +02:00
609b9f1852 Finish v1.27.6(293) 2022-06-29 16:39:22 +02:00
23c98d9218 -> v1.27.6 (293) 2022-06-29 16:39:17 +02:00
57900a9617 bug fix: Nel picking da ordine, quando sparano alcune referenze (100142-100171), l'app si chiude in maniera anomala. 2022-06-29 16:36:46 +02:00
c3274a4311 corretto bug per in gestione linee e aggiu ta richiesta di recupero prima di chiudere gli ordini 2022-06-29 16:01:51 +02:00
356e2562da Finish v1.27.5(292) 2022-06-08 12:50:49 +02:00
46c0078331 Finish v1.27.5(292) 2022-06-08 12:50:48 +02:00
bbc81f3d99 -> v1.27.5 (292) 2022-06-08 12:50:18 +02:00
0dd662518e In versamento se si versa una pedana già versata l'app crasha
permettere il versamento di un articolo non compatibile con gli ordini aperti dopo richiesta conferma

precompilare input risorse da allocare

in input qta mantenere fissa la qtaCnf in entrambe le direzioni di calcolo

togliere popup di notifica versamento completato
2022-06-08 12:26:20 +02:00
08d332e2c6 Quando creo una pedana dalla funzione di rientro merce non inserendo il tipo collo, l'app si blocca. 2022-06-07 17:33:32 +02:00
b9001790be corretto funzionamento rettifica giacenza al clik del pulsante indietro 2022-06-07 12:56:26 +02:00
d43bd8e659 Finish v1.27.4(291) 2022-06-01 19:23:56 +02:00
ef2886c963 Finish v1.27.4(291) 2022-06-01 19:23:55 +02:00
7a6097fa69 -> v1.27.4 (291) 2022-06-01 19:23:49 +02:00
9c45cebf51 aggiunte funzionalità versamento e recupero alla gestione linee di produzione 2022-06-01 19:22:32 +02:00
344fc42d03 bugfix in schermata dialog_input_quantity_v2 2022-05-27 16:22:34 +02:00
33a01b2c15 spedizione: bugfix calcolo qta residua in picking da collo 2022-05-27 09:45:35 +02:00
05314803bc Finish v1.27.3(290) 2022-05-26 16:18:34 +02:00
90 changed files with 4497 additions and 959 deletions

View File

@@ -1,16 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="deploymentTargetDropDown"> <component name="deploymentTargetDropDown">
<runningDeviceTargetsSelectedWithDialog> <targetSelectedWithDropDown>
<Target> <Target>
<type value="RUNNING_DEVICE_TARGET" /> <type value="QUICK_BOOT_TARGET" />
<deviceKey> <deviceKey>
<Key> <Key>
<type value="SERIAL_NUMBER" /> <type value="VIRTUAL_DEVICE_PATH" />
<value value="20119B1E55" /> <value value="C:\Users\ValerioC.STUDIO-ML\.android\avd\Pixel_4_XL_API_30.avd" />
</Key> </Key>
</deviceKey> </deviceKey>
</Target> </Target>
</runningDeviceTargetsSelectedWithDialog> </targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-07-15T15:36:03.605659600Z" />
</component> </component>
</project> </project>

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 290 def appVersionCode = 298
def appVersionName = '1.27.3' def appVersionName = '1.28.4'
signingConfigs { signingConfigs {
release { release {

View File

@@ -27,11 +27,18 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/Light" android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" /> android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" <activity
android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/Light" android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" /> android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.contab_doc_interni.edit_form.DocInterniEditFormActivity" <activity
android:name=".gest.prod_dettaglio_linea.ProdDettaglioLineaActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".gest.contab_doc_interni.edit_form.DocInterniEditFormActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/Light" android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" /> android:windowSoftInputMode="adjustNothing" />

View File

@@ -41,6 +41,8 @@ import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule; import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaComponent;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
@@ -134,7 +136,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
DialogAskClienteModule.class, DialogAskClienteModule.class,
DialogEditArticoloModule.class, DialogEditArticoloModule.class,
DialogPrintOrderSSCCListModule.class, DialogPrintOrderSSCCListModule.class,
ProdLineeProduzioneModule.class ProdLineeProduzioneModule.class,
ProdDettaglioLineaModule.class
}) })
public interface MainApplicationComponent { public interface MainApplicationComponent {
@@ -226,6 +229,8 @@ public interface MainApplicationComponent {
ProdLineeProduzioneComponent.Factory prodLineeProduzioneComponent(); ProdLineeProduzioneComponent.Factory prodLineeProduzioneComponent();
ProdDettaglioLineaComponent.Factory prodDettaglioLineaComponent();
void inject(MainApplication mainApplication); void inject(MainApplication mainApplication);
void inject(AppContext mainApplication); void inject(AppContext mainApplication);

View File

@@ -25,6 +25,7 @@ import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.services.inventario.InventarioService; import it.integry.integrywmsnative.core.services.inventario.InventarioService;
import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.core.update.UpdatesManager;
@@ -200,4 +201,10 @@ public class MainApplicationModule {
return new InventarioService(giacenzaRESTConsumer); return new InventarioService(giacenzaRESTConsumer);
} }
@Provides
@Singleton
ProductionLinesRESTConsumer provideProductionLinesRESTConsumer() {
return new ProductionLinesRESTConsumer();
}
} }

View File

@@ -19,7 +19,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 9, exportSchema = false) @Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 10, exportSchema = false)
@TypeConverters({ @TypeConverters({
DateConverter.class, DateConverter.class,
BigDecimalConverter.class BigDecimalConverter.class

View File

@@ -53,6 +53,6 @@ public interface ArticoloGrigliaDao {
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId") @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId")
List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId); List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId);
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId AND new_no_promo = 1") @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId AND qta_ord >= 1")
List<ArticoloGriglia> getNewArticoliInGriglia(int grigliaId); List<ArticoloGriglia> getNewArticoliInGriglia(int grigliaId);
} }

View File

@@ -71,6 +71,9 @@ public class ArticoloGriglia {
@ColumnInfo(name = "qta_proposta") @ColumnInfo(name = "qta_proposta")
private float qtaProposta; private float qtaProposta;
@ColumnInfo(name = "qta_ord")
private float qtaOrd;
@ColumnInfo(name = "id_griglia") @ColumnInfo(name = "id_griglia")
private int idGriglia; private int idGriglia;
@@ -205,6 +208,14 @@ public class ArticoloGriglia {
this.newNoPromo = newNoPromo; this.newNoPromo = newNoPromo;
} }
public float getQtaOrd() {
return qtaOrd;
}
public void setQtaOrd(float qtaOrd) {
this.qtaOrd = qtaOrd;
}
public String generateSystemNote() { public String generateSystemNote() {
HashMap<String, String> pairs = new HashMap<>(); HashMap<String, String> pairs = new HashMap<>();
pairs.put("qta_proposta", String.valueOf(qtaProposta)); pairs.put("qta_proposta", String.valueOf(qtaProposta));
@@ -234,8 +245,7 @@ public class ArticoloGriglia {
articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta())); articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta()));
articolo.setNewNoPromo(this.isNewNoPromo()); articolo.setNewNoPromo(this.isNewNoPromo());
articolo.setSystemNote(generateSystemNote()); articolo.setSystemNote(generateSystemNote());
articolo.setQtaOrd(this.getQtaOrd());
articolo.setQtaOrd(0);
return articolo; return articolo;
} }

View File

@@ -50,6 +50,9 @@ public class Ordine {
@Ignore @Ignore
private int countArticoli = 0; private int countArticoli = 0;
@Ignore
private boolean orderNewProducts = false;
@ColumnInfo(name = "id_griglia") @ColumnInfo(name = "id_griglia")
private int idGriglia; private int idGriglia;
@@ -149,4 +152,13 @@ public class Ordine {
public void setDataOrdS(String dataOrd) { public void setDataOrdS(String dataOrd) {
setDataOrd(UtilityDate.recognizeDateWithExceptionHandler(dataOrd)); setDataOrd(UtilityDate.recognizeDateWithExceptionHandler(dataOrd));
} }
public boolean isOrderNewProducts() {
return orderNewProducts;
}
public Ordine setOrderNewProducts(boolean orderNewProducts) {
this.orderNewProducts = orderNewProducts;
return this;
}
} }

View File

@@ -19,6 +19,7 @@ public class ArticoloDTO {
private float giacenza; private float giacenza;
private float qtaPrevistaVendita; private float qtaPrevistaVendita;
private float qtaProposta; private float qtaProposta;
private float qtaOrd;
public String getCodMart() { public String getCodMart() {
@@ -151,6 +152,15 @@ public class ArticoloDTO {
return this; return this;
} }
public float getQtaOrd() {
return qtaOrd;
}
public ArticoloDTO setQtaOrd(float qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public ArticoloGriglia toArticoloGriglia() { public ArticoloGriglia toArticoloGriglia() {
ArticoloGriglia result = new ArticoloGriglia(); ArticoloGriglia result = new ArticoloGriglia();
result.setBarCode(this.getBarCode()); result.setBarCode(this.getBarCode());
@@ -164,6 +174,7 @@ public class ArticoloDTO {
result.setQtaMinOrdinabile(this.getQtaMinOrdinabile()); result.setQtaMinOrdinabile(this.getQtaMinOrdinabile());
result.setGgScadenza(this.ggScadenza); result.setGgScadenza(this.ggScadenza);
result.setNewNoPromo(this.newNoPromo); result.setNewNoPromo(this.newNoPromo);
result.setQtaOrd(this.getQtaOrd());
result.setGiacenza(this.giacenza); result.setGiacenza(this.giacenza);
result.setQtaPrevistaVendita(this.qtaPrevistaVendita); result.setQtaPrevistaVendita(this.qtaPrevistaVendita);
result.setQtaProposta(this.qtaProposta); result.setQtaProposta(this.qtaProposta);

View File

@@ -27,7 +27,6 @@ public class BaseDialogFragment extends DialogFragment {
private boolean mBarcodeListener = false; private boolean mBarcodeListener = false;
@Override @Override
public void show(FragmentManager manager, String tag) { public void show(FragmentManager manager, String tag) {
try { try {

View File

@@ -99,9 +99,17 @@ public abstract class BaseFragment extends Fragment {
} }
} }
public boolean onBackPressed() {
return false;
}
protected void popMe() { protected void popMe() {
requireActivity().runOnUiThread(() -> { if (requireActivity() instanceof IPoppableActivity) {
((IPoppableActivity) requireActivity()).pop(); requireActivity().runOnUiThread(() -> {
}); ((IPoppableActivity) requireActivity()).pop();
});
} else {
requireActivity().getSupportFragmentManager().popBackStack();
}
} }
} }

View File

@@ -0,0 +1,9 @@
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
public interface IOrdersLoadingListener {
void onOrderLoadingStarted();
void onOrderLoadingEnded();
}

View File

@@ -26,8 +26,6 @@ public class CommonRESTException {
put(MESSAGE_KEY, "Barcode non letto correttamente"); put(MESSAGE_KEY, "Barcode non letto correttamente");
put(EXCEPTION_KEY, NoResultFromBarcodeException.class); put(EXCEPTION_KEY, NoResultFromBarcodeException.class);
}}); }});
}}; }};

View File

@@ -36,7 +36,9 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) { public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByBarcodeProd", (m) -> { analyzeAnswer(response, "getByBarcodeProd", (m) -> {
onComplete.run(response.body().getEntityList()); List<MtbAart> aartList = response.body().getEntityList();
aartList = Stream.of(aartList).filter(x -> x.getFlagStato().equalsIgnoreCase("A")).toList();
onComplete.run(aartList);
}, onFailed); }, onFailed);
} }

View File

@@ -78,9 +78,9 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer {
} }
public static void getValues(List<StbGestSetup> stbGestSetupList, RunnableArgs<List<StbGestSetup>> onComplete, RunnableArgs<Exception> onFailed) { public static void getValues(String codMdep, List<StbGestSetup> stbGestSetupList, RunnableArgs<List<StbGestSetup>> onComplete, RunnableArgs<Exception> onFailed) {
GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class); GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class);
service.getGestSetupValues(stbGestSetupList).enqueue(new Callback<>() { service.getGestSetupValues(codMdep, stbGestSetupList).enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<StbGestSetup>>> call, Response<ServiceRESTResponse<List<StbGestSetup>>> response) { public void onResponse(Call<ServiceRESTResponse<List<StbGestSetup>>> call, Response<ServiceRESTResponse<List<StbGestSetup>>> response) {
analyzeAnswer(response, "GestSetup", onComplete, onFailed); analyzeAnswer(response, "GestSetup", onComplete, onFailed);

View File

@@ -28,6 +28,7 @@ public interface GestSetupRESTConsumerService {
@POST("gestSetupList") @POST("gestSetupList")
Call<ServiceRESTResponse<List<StbGestSetup>>> getGestSetupValues( Call<ServiceRESTResponse<List<StbGestSetup>>> getGestSetupValues(
@Query("codMdep") String codMdep,
@Body List<StbGestSetup> stbGestSetupList); @Body List<StbGestSetup> stbGestSetupList);
} }

View File

@@ -46,11 +46,11 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void getOrdiniLavorazione(String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void getOrdiniLavorazione(String flagEvaso, String codJfas, String codAnag, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class); MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(flagEvaso, codJfas) mesRESTConsumerService.getOrdiniLavorazione(null, flagEvaso, codJfas, codAnag)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() { .enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) { public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed); analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed);
@@ -63,6 +63,7 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void getOrdiniLavorazione(Date dateStart, String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void getOrdiniLavorazione(Date dateStart, String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class); MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
@@ -82,7 +83,8 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
public void getLineeProduzione(String codJfasParent, RunnableArgs<List<JtbFasi>> onComplete, RunnableArgs<Exception> onFailed) { public void getLineeProduzione(String codJfasParent, RunnableArgs<List<JtbFasi>> onComplete, RunnableArgs<Exception> onFailed) {
Type typeOfObjectsList = new TypeToken<ArrayList<JtbFasi>>() {}.getType(); Type typeOfObjectsList = new TypeToken<ArrayList<JtbFasi>>() {
}.getType();
this.mSystemRESTConsumer.processSql( this.mSystemRESTConsumer.processSql(
"SELECT * FROM jtb_fasi WHERE cod_jfas_parent = " + UtilityDB.valueToString(codJfasParent), "SELECT * FROM jtb_fasi WHERE cod_jfas_parent = " + UtilityDB.valueToString(codJfasParent),
typeOfObjectsList, typeOfObjectsList,

View File

@@ -22,4 +22,7 @@ public interface MesRESTConsumerService {
@GET("mes_v2/getOrdiniLavorazione") @GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas); Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas);
@GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas, @Query("codAnag") String codAnag);
} }

View File

@@ -1,5 +1,6 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import com.annimon.stream.Stream;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import java.util.List; import java.util.List;
@@ -88,4 +89,24 @@ public class ProductionLinesRESTConsumer extends _BaseRESTConsumer {
} }
public void getLineDetails(ProdLineStatusDTO lineaProd, RunnableArgs<ProdLineStatusDTO> onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> callable = restService.getStatoLinee(lineaProd.getCodMdepLav());
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Response<ServiceRESTResponse<List<ProdLineStatusDTO>>> response) {
analyzeAnswer(response, "getLineDetails", (lines) -> {
ProdLineStatusDTO newLine = Stream.of(lines).filter(dto -> dto.getCodJfas().equalsIgnoreCase(lineaProd.getCodJfas())).findFirstOrElse(null);
onComplete.run(newLine);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
} }

View File

@@ -26,6 +26,7 @@ public class SitArtOrdDTO {
private String descrizioneMsgr; private String descrizioneMsgr;
private String codMsfa; private String codMsfa;
private String descrizioneMsfa; private String descrizioneMsfa;
private String untord;
private final HashMap<String, Object> extraInfo = new HashMap<>(); private final HashMap<String, Object> extraInfo = new HashMap<>();
@@ -212,4 +213,13 @@ public class SitArtOrdDTO {
public HashMap<String, Object> getExtraInfo() { public HashMap<String, Object> getExtraInfo() {
return extraInfo; return extraInfo;
} }
public String getUntord() {
return untord;
}
public SitArtOrdDTO setUntord(String untord) {
this.untord = untord;
return this;
}
} }

View File

@@ -45,8 +45,11 @@ public class DBSettingsModel {
private boolean flagPrintPackingListOnOrderClose; private boolean flagPrintPackingListOnOrderClose;
private boolean flagPrintEtichetteOnOrderClose; private boolean flagPrintEtichetteOnOrderClose;
private int onNumCnfInputChanged = 1; private int onNumCnfInputChanged = 1;
private int onQtaTotInputChanged = 1;
private boolean flagAccettazioneUseQtaOrd = false; private boolean flagAccettazioneUseQtaOrd = false;
private boolean flagPickLiberoAllowEmptyDest = false; private boolean flagPickLiberoAllowEmptyDest = false;
private boolean flagAskInfoAggiuntiveSpedizione = false;
private String filterFornitoreProd;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@@ -309,6 +312,15 @@ public class DBSettingsModel {
return this; return this;
} }
public int getOnQtaTotInputChanged() {
return onQtaTotInputChanged;
}
public DBSettingsModel setOnQtaTotInputChanged(int onQtaTotInputChanged) {
this.onQtaTotInputChanged = onQtaTotInputChanged;
return this;
}
public List<String> getNotePerditaDocInterni() { public List<String> getNotePerditaDocInterni() {
return notePerditaDocInterni; return notePerditaDocInterni;
} }
@@ -354,4 +366,22 @@ public class DBSettingsModel {
this.flagOrdinaArticoliOnScan = flagOrdinaArticoliOnScan; this.flagOrdinaArticoliOnScan = flagOrdinaArticoliOnScan;
return this; return this;
} }
public boolean isFlagAskInfoAggiuntiveSpedizione() {
return flagAskInfoAggiuntiveSpedizione;
}
public DBSettingsModel setFlagAskInfoAggiuntiveSpedizione(boolean flagAskInfoAggiuntiveSpedizione) {
this.flagAskInfoAggiuntiveSpedizione = flagAskInfoAggiuntiveSpedizione;
return this;
}
public String getFilterFornitoreProd() {
return filterFornitoreProd;
}
public DBSettingsModel setFilterFornitoreProd(String filterFornitoreProd) {
this.filterFornitoreProd = filterFornitoreProd;
return this;
}
} }

View File

@@ -258,6 +258,10 @@ public class SettingsManager {
.setGestName("PICKING") .setGestName("PICKING")
.setSection("PRODUZIONE") .setSection("PRODUZIONE")
.setKeySection("FLAG_VERSAMENTO_DIRETTO")); .setKeySection("FLAG_VERSAMENTO_DIRETTO"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("FILTER_FORNTIORE_PROD"));
stbGestSetupList.add(new StbGestSetup() stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
@@ -278,6 +282,10 @@ public class SettingsManager {
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SETUP") .setSection("SETUP")
.setKeySection("ON_NUM_CNF_INPUT_CHANGED")); .setKeySection("ON_NUM_CNF_INPUT_CHANGED"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SETUP")
.setKeySection("ON_QTA_TOT_INPUT_CHANGED"));
stbGestSetupList.add(new StbGestSetup() stbGestSetupList.add(new StbGestSetup()
.setGestName("PVM") .setGestName("PVM")
.setSection("DOC_INTERNI") .setSection("DOC_INTERNI")
@@ -302,9 +310,25 @@ public class SettingsManager {
.setGestName("PICKING") .setGestName("PICKING")
.setSection("PICKING_LIBERO") .setSection("PICKING_LIBERO")
.setKeySection("FLAG_ALLOW_EMPTY_DEST")); .setKeySection("FLAG_ALLOW_EMPTY_DEST"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_PACKING_LIST_ON_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_ETICHETTE_ON_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_ALLOW_EMPTY_DEST"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_ASK_INFO_AGGIUNTIVE"));
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
GestSetupRESTConsumer.getValues(codMdep, stbGestSetupList, list -> {
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(getValueFromList(list, "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", String.class)); dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(getValueFromList(list, "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", String.class));
dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(getValueFromList(list, "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", Boolean.class)); dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(getValueFromList(list, "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", Boolean.class));
dbSettingsModelIstance.setFlagMultiClienteOrdV(getValueFromList(list, "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", Boolean.class)); dbSettingsModelIstance.setFlagMultiClienteOrdV(getValueFromList(list, "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", Boolean.class));
@@ -329,24 +353,24 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class)); dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
dbSettingsModelIstance.setFlagPickLiberoAllowEmptyDest(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_DEST", Boolean.class)); dbSettingsModelIstance.setFlagPickLiberoAllowEmptyDest(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_DEST", Boolean.class));
dbSettingsModelIstance.setFlagOrdinaArticoliOnScan(getValueFromList(list, "ORDINI_A", "ORDINA_ARTICOLI_ON_SCAN", Boolean.class)); dbSettingsModelIstance.setFlagOrdinaArticoliOnScan(getValueFromList(list, "ORDINI_A", "ORDINA_ARTICOLI_ON_SCAN", Boolean.class));
dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", Boolean.class));
dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", Boolean.class));
dbSettingsModelIstance.setFlagAskInfoAggiuntiveSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_ASK_INFO_AGGIUNTIVE", Boolean.class));
dbSettingsModelIstance.setFilterFornitoreProd(getValueFromList(list, "PRODUZIONE", "FILTER_FORNTIORE_PROD", String.class));
String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class); String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class);
if (notePerdita != null) { if (notePerdita != null)
dbSettingsModelIstance.setNotePerditaDocInterni(Arrays.asList(notePerdita.split("\\|"))); dbSettingsModelIstance.setNotePerditaDocInterni(Arrays.asList(notePerdita.split("\\|")));
}
Integer onNumCnfInputChanged = getValueFromList(list, "SETUP", "ON_NUM_CNF_INPUT_CHANGED", Integer.class); Integer onNumCnfInputChanged = getValueFromList(list, "SETUP", "ON_NUM_CNF_INPUT_CHANGED", Integer.class);
if (onNumCnfInputChanged != null) { if (onNumCnfInputChanged != null)
dbSettingsModelIstance.setOnNumCnfInputChanged(onNumCnfInputChanged); dbSettingsModelIstance.setOnNumCnfInputChanged(onNumCnfInputChanged);
}
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); Integer onQtaTotInputChanged = getValueFromList(list, "SETUP", "ON_QTA_TOT_INPUT_CHANGED", Integer.class);
GestSetupRESTConsumer.getBooleanValue("PICKING", "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", codMdep, (value) -> { if (onQtaTotInputChanged != null)
dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(value); dbSettingsModelIstance.setOnQtaTotInputChanged(onQtaTotInputChanged);
GestSetupRESTConsumer.getBooleanValue("PICKING", "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", codMdep, (gestSetupDTO) -> {
dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(value); if (onComplete != null) onComplete.run();
if (onComplete != null) onComplete.run();
}, onFailed);
}, onFailed);
}, onFailed); }, onFailed);
} }
@@ -356,7 +380,7 @@ public class SettingsManager {
StbGestSetup value = Stream.of(stbGestSetupList) StbGestSetup value = Stream.of(stbGestSetupList)
.filter(x -> x.getSection().equalsIgnoreCase(section) && x.getKeySection().equalsIgnoreCase(keySectionName)) .filter(x -> x.getSection().equalsIgnoreCase(section) && x.getKeySection().equalsIgnoreCase(keySectionName))
.findFirst().get(); .findFirstOrElse(new StbGestSetup());
if (clazz == String.class) { if (clazz == String.class) {
return clazz.cast(value.getValue()); return clazz.cast(value.getValue());

View File

@@ -35,6 +35,13 @@ public class DialogSelectDocInfoViewModel {
public void init(DocInterniSetupDTO initialList) { public void init(DocInterniSetupDTO initialList) {
this.mDocInterniSetupDTO = initialList; this.mDocInterniSetupDTO = initialList;
this.mTipoDoc = null;
this.mGruppoArt = null;
this.mFornitore = null;
this.mDataDoc = null;
this.mNumDoc = null;
this.mNote = null;
this.mListener = null;
} }
public String getCodDtip() { public String getCodDtip() {

View File

@@ -19,6 +19,8 @@ public class GrigliaAcquistiChildDTO {
private float giacenza; private float giacenza;
private float qtaPrevistaVendita; private float qtaPrevistaVendita;
private float qtaProposta; private float qtaProposta;
private BigDecimal qtaOrd;
public String getCodMart() { public String getCodMart() {
return codMart; return codMart;
@@ -154,4 +156,13 @@ public class GrigliaAcquistiChildDTO {
this.newNoPromo = newNoPromo; this.newNoPromo = newNoPromo;
return this; return this;
} }
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public GrigliaAcquistiChildDTO setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
} }

View File

@@ -250,6 +250,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
.setNotesMandatory(this.viewModel.isNotesMandatory()) .setNotesMandatory(this.viewModel.isNotesMandatory())
.setDataScadMandatory(flagTracciabilita) .setDataScadMandatory(flagTracciabilita)
.setCanPartitaMagBeChanged(flagTracciabilita) .setCanPartitaMagBeChanged(flagTracciabilita)
.setNumCnfEditable(false)
.setSuggestPartitaMag(data -> { .setSuggestPartitaMag(data -> {
Date dataScad = data.getDataScad(); Date dataScad = data.getDataScad();
String partitaMag = null; String partitaMag = null;

View File

@@ -0,0 +1,355 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.InputType;
import android.text.SpannableString;
import android.widget.Toast;
import androidx.databinding.Observable;
import androidx.databinding.ObservableField;
import com.google.android.material.chip.Chip;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
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_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivityProdDettaglioLineaBinding;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs.BottomSheetLineAction;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs.DialogStartProduction;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
public class ProdDettaglioLineaActivity extends BaseActivity implements ProdDettaglioLineaViewModel.Listener {
private static final String DATA_KEY_LINE = "keyLinea";
private static final String DATA_KEY_FRAGMENT_LISTENER = "onFragmentClose";
private ActivityProdDettaglioLineaBinding mBinding;
public final ObservableField<String> listaOrd = new ObservableField<>();
public final BindableString lineaLabel = new BindableString();
public final BindableBoolean isStarted = new BindableBoolean(false);
public final BindableBoolean isPaused = new BindableBoolean(false);
public final BindableBoolean flagShowProdInfo = new BindableBoolean(false);
public final BindableString hrNum = new BindableString();
public final BindableString codMart = new BindableString();
public final BindableString partitaMag = new BindableString();
public final BindableString productDescription = new BindableString();
private Runnable onResumeRunnable = null;
private int barcodeScannerIstanceID = -1;
@Inject
ProdDettaglioLineaViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
public static Intent newInstance(Context context, ProdLineStatusDTO prodLine) {
Intent myIntent = new Intent(context, ProdDettaglioLineaActivity.class);
String keyLine = DataCache.addItem(prodLine);
myIntent.putExtra(DATA_KEY_LINE, keyLine);
return myIntent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = ActivityProdDettaglioLineaBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
setSupportActionBar(mBinding.toolbar);
setTitle(R.string.line_details);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ProdLineStatusDTO lineaProd = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_LINE));
if (lineaProd == null) {
Toast.makeText(this, "Selezionare una linea di produzione e riprovare", Toast.LENGTH_SHORT).show();
close();
return;
}
MainApplication.appComponent
.prodDettaglioLineaComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBinding.setViewModel(mViewModel);
mBinding.setView(this);
this.init();
mViewModel.init(lineaProd);
}
private void init() {
initBarcodeReader();
mViewModel.lineaProd.observe(this, lineaProd -> {
this.listaOrd.set(lineaProd.getListaOrd());
this.lineaLabel.set(lineaProd.getLabel());
this.isStarted.set(lineaProd.isStarted());
this.isPaused.set(lineaProd.isPaused());
this.partitaMag.set(lineaProd.getPartitaMag());
this.codMart.set(lineaProd.getCodMart());
this.productDescription.set(lineaProd.getDescrizioneProd());
this.flagShowProdInfo.set(lineaProd.isStarted() && !UtilityString.isNullOrEmpty(lineaProd.getCodMart()));
this.hrNum.set(lineaProd.getQtaAllocate().toString());
});
listaOrd.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
renderOrdersChips();
}
});
getSupportFragmentManager()
.setFragmentResultListener(DATA_KEY_FRAGMENT_LISTENER, this, (requestKey, result) -> {
if (onResumeRunnable != null) {
onResumeRunnable.run();
onResumeRunnable = null;
}
});
}
private void renderOrdersChips() {
mBinding.ordersList.removeAllViews();
String listaOrdString = listaOrd.get();
if (!UtilityString.isNullOrEmpty(listaOrdString)) {
for (String ord : listaOrdString.split("\\|")) {
Chip chip = new Chip(this);
chip.setClickable(false);
chip.setText(ord);
mBinding.ordersList.addView(chip);
}
}
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onSettingsRequest(ProdLineStatusDTO lineaProd) {
BottomSheetLineAction.newInstance(lineaProd, this::requestResources, this::requestOrderChange, this::requestProductionStop, this::requestMaterialRecover, BarcodeManager::enable).show(getSupportFragmentManager(), "BottomSheetLineAction");
}
@Override
public void confirmInconsistentDeposit(Runnable onConfirm) {
this.runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(
Html.fromHtml("L'articolo che si vuole versare non è compatibile con nessun ordine presente sulla linea!"
+ "<br /> <br/>" +
"Vuoi versarlo comunque?"),
null,
onConfirm,
() -> {
onLoadingEnded();
BarcodeManager.enable();
}
).show(getSupportFragmentManager(), "confirmOrderClose");
});
}
@Override
public void requestQtaVersamento(MtbColr mtbColr,
RunnableArgs<PickedQuantityDTO> onComplete) {
onLoadingStarted();
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbColr.getMtbAart())
.setInitialNumCnf(mtbColr.getNumCnf())
.setInitialQtaCnf(mtbColr.getQtaCnf())
.setInitialQtaTot(mtbColr.getQtaCol())
.setTotalQtaAvailable(mtbColr.getQtaCol())
.setTotalNumCnfAvailable(mtbColr.getNumCnf())
.setQtaCnfAvailable(mtbColr.getQtaCnf())
.setPartitaMag(mtbColr.getPartitaMag())
.setDataScad(mtbColr.getDataScadPartitaD())
.setCanOverflowOrderQuantity(false)
.setCanPartitaMagBeChanged(false)
.setCanLUBeClosed(false)
.setFocusOnStart(false);
if (!mDialogInputQuantityV2View.isVisible())
this.runOnUiThread(() -> {
onLoadingEnded();
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
onComplete.run(pickedQuantityDTO);
})
.setOnAbort(this::onLoadingEnded)
.show(this.getSupportFragmentManager(), "tag");
});
else this.onLoadingEnded();
}
public void onLineStop() {
onBackPressed();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
public void requestResources() {
this.onLoadingEnded();
BarcodeManager.disable();
this.runOnUiThread(() -> {
DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il numero di risorse da allocare", this.hrNum.get(), "n. risorse", qta -> {
this.onLoadingStarted();
try {
Integer hrNum = Integer.parseInt(qta);
this.mViewModel.startProductionLine(hrNum);
} catch (NumberFormatException ex) {
this.onError(new Exception("Inserire un numero di risorse valido"));
}
}, BarcodeManager::enable, InputType.TYPE_CLASS_NUMBER).show();
});
}
public void requestOrderChange() {
this.onLoadingEnded();
this.runOnUiThread(() -> {
DialogStartProduction.newInstance((dto) -> {
this.mViewModel.checkBarcodeAndStartOrdine(dto);
}).show(getSupportFragmentManager(), "DialogStartProduction");
});
}
public void requestProductionStop() {
this.onLoadingEnded();
BarcodeManager.disable();
ProdLineStatusDTO lineaProd = mViewModel.getLineaProd();
if (UtilityString.isNullOrEmpty(lineaProd.getListaOrd())) {
mViewModel.stopProduction();
} else {
this.confirmOrderClose(() -> {
mViewModel.stopProduction();
});
}
}
public void requestMaterialRecover() {
this.onLoadingEnded();
BarcodeManager.disable();
this.runOnUiThread(() -> {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.frame_layout_container,
ProdRecuperoMaterialeFragment.newInstance(mViewModel.lineaProd.getValue().getCodJfas(), DATA_KEY_FRAGMENT_LISTENER))
.addToBackStack("ProdRecuperoMaterialeFragment")
.commit();
});
}
@Override
public void successDialog(String message, Runnable onComplete) {
BarcodeManager.disable();
this.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(getResources().getString(R.string.success),
new SpannableString(message), null, onComplete).show(getSupportFragmentManager(), "successDialog"));
}
@Override
public void showToast(String message, Runnable onComplete) {
this.runOnUiThread(() -> {
UtilityToast.showToast(message);
onComplete.run();
});
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
};
@Override
public void confirmOrderClose(Runnable onConfirm) {
this.onLoadingEnded();
this.runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(
Html.fromHtml("Per completare l'operazione è necessario chiudere gli ordini attualmente aperti sulla linea."
+ "<br /> <br/>" +
"Continuare?"),
null,
() -> {
DialogSimpleMessageView.makeInfoDialog(
null,
Html.fromHtml("Vuoi recuperare del materiale prima di chiudere gli ordini?"),
null,
() -> {
onResumeRunnable = onConfirm;
this.requestMaterialRecover();
},
onConfirm
).show(getSupportFragmentManager(), "confirmOrderClose");
},
BarcodeManager::enable
).show(getSupportFragmentManager(), "confirmOrderClose");
});
}
public void close() {
onBackPressed();
}
@Override
public void onBackPressed() {
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count > 0) {
getSupportFragmentManager().popBackStack();
} else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import dagger.Subcomponent;
@Subcomponent
public interface ProdDettaglioLineaComponent {
@Subcomponent.Factory
interface Factory {
ProdDettaglioLineaComponent create();
}
void inject(ProdDettaglioLineaActivity prodDettaglioLineaActivity);
}

View File

@@ -0,0 +1,19 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
@Module(subcomponents = ProdDettaglioLineaComponent.class)
public class ProdDettaglioLineaModule {
@Provides
ProdDettaglioLineaViewModel providesProdDettaglioLineaViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
return new ProdDettaglioLineaViewModel(productionLinesRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer, mesRESTConsumer);
}
}

View File

@@ -0,0 +1,236 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import androidx.lifecycle.MutableLiveData;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class ProdDettaglioLineaViewModel {
private Listener mListener;
private final ProductionLinesRESTConsumer productionLinesRESTConsumer;
private final ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer;
private final MesRESTConsumer mesRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
public final MutableLiveData<ProdLineStatusDTO> lineaProd = new MutableLiveData<>();
@Inject
public ProdDettaglioLineaViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer magazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
this.productionLinesRESTConsumer = productionLinesRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.colliMagazzinoRESTConsumer = magazzinoRESTConsumer;
this.mesRESTConsumer = mesRESTConsumer;
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaAnonima(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEAN128(barcodeScanDTO, onComplete);
} else {
onComplete.run();
}
}
private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
handleSSCCBarcode(barcodeScanDTO.getStringValue(), onComplete);
}
private void handleSSCCBarcode(String sscc, Runnable onComplete) {
this.colliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
if (mtbColt == null) {
this.sendError(new NoLUFoundException());
} else {
if (mtbColt.getMtbColr().size() <= 0) {
this.sendError(new Exception("E' stata scansionata una UL già vuota"));
} else {
this.sendOnLUSelected(mtbColt);
}
}
}, this::sendError);
}
private void sendOnLUSelected(MtbColt mtbColt) {
this.sendOnLoadingStarted();
this.checkOrdersCompatibility(mtbColt, () -> {
MtbColr row = mtbColt.getMtbColr().get(0);
mListener.requestQtaVersamento(
row,
dto -> {
sendOnLoadingStarted();
row.setQtaCnf(dto.getQtaCnf());
row.setNumCnf(dto.getNumCnf());
row.setQtaCol(dto.getQtaTot());
row.setPesoLordoKg(null);
row.setPesoNettoKg(null);
ProdLineStatusDTO prodLine = lineaProd.getValue();
MtbDepoPosizione posizione = new MtbDepoPosizione();
posizione.setPosizione(prodLine.getCodJfas());
posizione.setCodMdep(prodLine.getCodMdepLav());
posizione.setFlagLineaProduzione("S");
this.colliMagazzinoRESTConsumer.createColloScaricoDaCarico(mtbColt, posizione,
generatedMtbColt -> {
this.sendOnLoadingEnded();
this.mListener.showToast("Versamento completato!", BarcodeManager::enable);
}, this::sendError);
});
});
}
private void checkOrdersCompatibility(MtbColt mtbColt, Runnable onComplete) {
mesRESTConsumer.getOrdiniLavorazioneMateriale(lineaProd.getValue().getCodJfas(), getIdMaterialeFromCollo(mtbColt), ordini -> {
if (ordini != null && ordini.size() > 0) {
onComplete.run();
} else {
this.mListener.confirmInconsistentDeposit(onComplete);
}
}, this::sendError);
}
private String getIdMaterialeFromCollo(MtbColt mtbColt) {
MtbAart articolo = mtbColt.getMtbColr().get(0).getMtbAart();
return UtilityString.isNullOrEmpty(articolo.getIdArtEqui()) ? articolo.getCodMart() : articolo.getIdArtEqui();
}
private void executeEAN128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
if (ean128Model != null && !UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
handleSSCCBarcode(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
public void settings() {
this.mListener.onSettingsRequest(lineaProd.getValue());
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public void startProductionLine(Integer hrNum) {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
this.productionLinesRESTConsumer.avviaLineaDiProduzione(prodLine.getCodJfas(),
hrNum,
() -> this.mListener.successDialog("Operazione completata", this::loadLineDetails),
this::sendError);
}
private void startProduction(String codMart, String partitaMag) {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
this.productionLinesRESTConsumer.avviaProduzioneArticoloSuLinea(prodLine.getCodJfas(), codMart, partitaMag,
() -> this.mListener.successDialog("Operazione completata", this::loadLineDetails),
this::sendError);
}
public void stopProduction() {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
this.productionLinesRESTConsumer.arrestaLineaDiProduzione(prodLine.getCodJfas(),
() -> this.mListener.successDialog("Operazione completata", this::onLineStop),
this::sendError);
}
private void onLineStop() {
this.mListener.onLineStop();
}
public void checkBarcodeAndStartOrdine(BarcodeScanDTO dto) {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
mBarcodeRESTConsumer.decodeEan128(dto, (ean128) -> {
String codMart = ean128.Content;
String partitaMag = ean128.BatchLot;
if (!prodLine.isStarted()) {
this.sendError(new Exception("Impossibile avviare una produzione su una linea ferma!"));
} else if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) {
this.startProduction(codMart, partitaMag);
} else {
this.mListener.confirmOrderClose(() -> {
this.startProduction(codMart, partitaMag);
});
}
}, this::sendError);
}
public void loadLineDetails() {
sendOnLoadingStarted();
if (lineaProd.getValue() == null) {
this.sendError(new Exception("Nessuna linea selezionata!"));
return;
}
productionLinesRESTConsumer.getLineDetails(lineaProd.getValue(), linea -> {
this.lineaProd.postValue(linea);
sendOnLoadingEnded();
}, this::sendError);
}
public void init(ProdLineStatusDTO lineaProd) {
this.lineaProd.setValue(lineaProd);
this.loadLineDetails();
}
public ProdLineStatusDTO getLineaProd() {
return lineaProd.getValue();
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void successDialog(String message, Runnable onComplete);
void showToast(String message, Runnable onComplete);
void requestQtaVersamento(MtbColr mtbColr, RunnableArgs<PickedQuantityDTO> onComplete);
void onSettingsRequest(ProdLineStatusDTO lineaProd);
void confirmInconsistentDeposit(Runnable onConfirm);
void onLineStop();
void confirmOrderClose(Runnable onConfirm);
}
public ProdDettaglioLineaViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs; package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
@@ -11,7 +11,6 @@ import androidx.annotation.Nullable;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.databinding.BottomSheetLineActionsBinding; import it.integry.integrywmsnative.databinding.BottomSheetLineActionsBinding;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
@@ -20,17 +19,19 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment {
private BottomSheetLineActionsBinding mBinding; private BottomSheetLineActionsBinding mBinding;
private ProdLineStatusDTO prodLine; private ProdLineStatusDTO prodLine;
private RunnableArgs<ProdLineStatusDTO> onChangeResourcesRequest; private Runnable onChangeResourcesRequest;
private RunnableArgs<ProdLineStatusDTO> onChangeOrdersRequest; private Runnable onChangeOrdersRequest;
private RunnableArgs<ProdLineStatusDTO> onLineCloseRequest; private Runnable onLineCloseRequest;
private Runnable onRecoverRequest;
private Runnable onCancelAction; private Runnable onCancelAction;
public static BottomSheetLineAction newInstance(ProdLineStatusDTO dto, RunnableArgs<ProdLineStatusDTO> onChangeResourcesRequest, RunnableArgs<ProdLineStatusDTO> onChangeOrdersRequest, RunnableArgs<ProdLineStatusDTO> onLineCloseRequest, Runnable onCancel) { public static BottomSheetLineAction newInstance(ProdLineStatusDTO dto, Runnable onChangeResourcesRequest, Runnable onChangeOrdersRequest, Runnable onLineCloseRequest, Runnable onRecoverRequest, Runnable onCancel) {
BottomSheetLineAction fragment = new BottomSheetLineAction(); BottomSheetLineAction fragment = new BottomSheetLineAction();
fragment fragment
.setProdLine(dto) .setProdLine(dto)
.setOnChangeResourcesRequest(onChangeResourcesRequest) .setOnChangeResourcesRequest(onChangeResourcesRequest)
.setOnChangeOrdersRequest(onChangeOrdersRequest) .setOnChangeOrdersRequest(onChangeOrdersRequest)
.setOnRecoverRequest(onRecoverRequest)
.setOnLineCloseRequest(onLineCloseRequest) .setOnLineCloseRequest(onLineCloseRequest)
.setOnCancelAction(onCancel); .setOnCancelAction(onCancel);
return fragment; return fragment;
@@ -53,19 +54,24 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment {
return this; return this;
} }
public BottomSheetLineAction setOnChangeResourcesRequest(RunnableArgs<ProdLineStatusDTO> onChangeResourcesRequest) { public BottomSheetLineAction setOnChangeResourcesRequest(Runnable onChangeResourcesRequest) {
this.onChangeResourcesRequest = onChangeResourcesRequest; this.onChangeResourcesRequest = onChangeResourcesRequest;
return this; return this;
} }
public BottomSheetLineAction setOnChangeOrdersRequest(RunnableArgs<ProdLineStatusDTO> onChangeOrdersRequest) { public BottomSheetLineAction setOnChangeOrdersRequest(Runnable onChangeOrdersRequest) {
this.onChangeOrdersRequest = onChangeOrdersRequest; this.onChangeOrdersRequest = onChangeOrdersRequest;
return this; return this;
} }
public BottomSheetLineAction setOnRecoverRequest(Runnable onRecoverRequest) {
this.onRecoverRequest = onRecoverRequest;
return this;
}
public BottomSheetLineAction setOnLineCloseRequest(RunnableArgs<ProdLineStatusDTO> onLineCloseRequest) {
public BottomSheetLineAction setOnLineCloseRequest(Runnable onLineCloseRequest) {
this.onLineCloseRequest = onLineCloseRequest; this.onLineCloseRequest = onLineCloseRequest;
return this; return this;
} }
@@ -81,7 +87,7 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment {
public void onResourcesClicked() { public void onResourcesClicked() {
if (this.onChangeResourcesRequest != null) { if (this.onChangeResourcesRequest != null) {
this.onChangeResourcesRequest.run(prodLine); this.onChangeResourcesRequest.run();
} }
this.dismiss(); this.dismiss();
@@ -89,14 +95,21 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment {
public void onPlayClicked() { public void onPlayClicked() {
if (this.onChangeOrdersRequest != null) { if (this.onChangeOrdersRequest != null) {
this.onChangeOrdersRequest.run(prodLine); this.onChangeOrdersRequest.run();
} }
this.dismiss(); this.dismiss();
} }
public void onStopClicked() { public void onStopClicked() {
if (this.onLineCloseRequest != null) { if (this.onLineCloseRequest != null) {
this.onLineCloseRequest.run(prodLine); this.onLineCloseRequest.run();
}
this.dismiss();
}
public void onRecoverClicked() {
if (this.onRecoverRequest != null) {
this.onRecoverRequest.run();
} }
this.dismiss(); this.dismiss();
} }

View File

@@ -0,0 +1,77 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.databinding.DialogStartProductionBinding;
public class DialogRecoverUl extends BaseDialogFragment {
private int barcodeScannerIstanceID = -1;
private RunnableArgs<BarcodeScanDTO> onScanSuccessful;
private DialogStartProductionBinding mBinding;
public static DialogRecoverUl newInstance(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
Bundle args = new Bundle();
DialogRecoverUl fragment = new DialogRecoverUl();
fragment.setArguments(args);
fragment.setOnScanSuccessful(onScanSuccessful);
return fragment;
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onDismiss(dialog);
}
public DialogRecoverUl setOnScanSuccessful(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
this.onScanSuccessful = onScanSuccessful;
return this;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DialogStartProductionBinding.inflate(inflater, container, false);
mBinding.setLifecycleOwner(this);
this.initBarcodeReader();
setCancelable(true);
getDialog().setCanceledOnTouchOutside(true);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBinding.getRoot();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(this::processBarcode)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
private void processBarcode(BarcodeScanDTO barcodeScanDTO) {
if (UtilityBarcode.isEan128(barcodeScanDTO)) {
this.onScanSuccessful.run(barcodeScanDTO);
this.dismiss();
} else {
this.onError(new Exception("Il barcode scansionato non è valido!"));
}
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs; package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.graphics.Color; import android.graphics.Color;
@@ -17,12 +17,15 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
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.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogStartProductionBinding; import it.integry.integrywmsnative.databinding.DialogStartProductionBinding;
public class DialogStartProduction extends BaseDialogFragment { public class DialogStartProduction extends BaseDialogFragment {
private int barcodeScannerIstanceID = -1; private int barcodeScannerIstanceID = -1;
private RunnableArgs<BarcodeScanDTO> onScanSuccessful; private RunnableArgs<BarcodeScanDTO> onScanSuccessful;
private DialogStartProductionBinding mBinding; private DialogStartProductionBinding mBinding;
private String title;
private String label;
public static DialogStartProduction newInstance(RunnableArgs<BarcodeScanDTO> onScanSuccessful) { public static DialogStartProduction newInstance(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
@@ -34,6 +37,23 @@ public class DialogStartProduction extends BaseDialogFragment {
return fragment; return fragment;
} }
public String getTitle() {
return title;
}
public DialogStartProduction setTitle(String title) {
this.title = title;
return this;
}
public String getLabel() {
return label;
}
public DialogStartProduction setLabel(String label) {
this.label = label;
return this;
}
@Override @Override
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
@@ -55,6 +75,14 @@ public class DialogStartProduction extends BaseDialogFragment {
setCancelable(true); setCancelable(true);
getDialog().setCanceledOnTouchOutside(true); getDialog().setCanceledOnTouchOutside(true);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
if (!UtilityString.isNullOrEmpty(title)) {
mBinding.titleText.setText(title);
}
if (!UtilityString.isNullOrEmpty(label)) {
mBinding.scanLabel.setText(label);
}
return mBinding.getRoot(); return mBinding.getRoot();
} }
@@ -68,8 +96,8 @@ public class DialogStartProduction extends BaseDialogFragment {
private void processBarcode(BarcodeScanDTO barcodeScanDTO) { private void processBarcode(BarcodeScanDTO barcodeScanDTO) {
if (UtilityBarcode.isEan128(barcodeScanDTO)) { if (UtilityBarcode.isEan128(barcodeScanDTO)) {
this.onScanSuccessful.run(barcodeScanDTO);
this.dismiss(); this.dismiss();
this.onScanSuccessful.run(barcodeScanDTO);
} else { } else {
this.onError(new Exception("Il barcode scansionato non è valido!")); this.onError(new Exception("Il barcode scansionato non è valido!"));
} }

View File

@@ -2,7 +2,6 @@ package it.integry.integrywmsnative.gest.prod_linee_produzione;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.text.InputType; import android.text.InputType;
import android.text.SpannableString; import android.text.SpannableString;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@@ -10,7 +9,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
@@ -27,10 +25,8 @@ import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
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.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentLineeProdBinding; import it.integry.integrywmsnative.databinding.FragmentLineeProdBinding;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.BottomSheetLineAction; import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaActivity;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.DialogStartProduction;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ui.LinesListAdapter; import it.integry.integrywmsnative.gest.prod_linee_produzione.ui.LinesListAdapter;
import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.ui.ElevatedToolbar;
@@ -60,8 +56,7 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
mBinding = FragmentLineeProdBinding.inflate(inflater, container, false);
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_linee_prod, container, false);
MainApplication.appComponent MainApplication.appComponent
.prodLineeProduzioneComponent() .prodLineeProduzioneComponent()
.create() .create()
@@ -71,11 +66,17 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled
mBinding.setLifecycleOwner(this); mBinding.setLifecycleOwner(this);
this.initRecyclerView(); this.initRecyclerView();
this.initBarcodeReader(); this.initBarcodeReader();
mViewModel.init();
return mBinding.getRoot(); return mBinding.getRoot();
} }
@Override
public void onStart() {
super.onStart();
mViewModel.init();
}
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
@@ -111,7 +112,7 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled
BarcodeManager.disable(); BarcodeManager.disable();
requireActivity().runOnUiThread(() -> { requireActivity().runOnUiThread(() -> {
DialogSimpleInputHelper.makeInputDialog(requireContext(), "Inserisci il numero di risorse da allocare", qta -> { DialogSimpleInputHelper.makeInputDialog(requireContext(), "Inserisci il numero di risorse da allocare", prodLine.getQtaAllocate().toString(), "n. risorse", qta -> {
this.onLoadingStarted(); this.onLoadingStarted();
try { try {
Integer hrNum = Integer.parseInt(qta); Integer hrNum = Integer.parseInt(qta);
@@ -123,28 +124,6 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled
}); });
} }
public void requestOrderChange(ProdLineStatusDTO prodLine) {
this.onLoadingEnded();
requireActivity().runOnUiThread(() -> {
DialogStartProduction.newInstance((dto) -> {
this.mViewModel.checkBarcodeAndStartOrdine(prodLine, dto);
}).show(getChildFragmentManager(), "DialogStartProduction");
});
}
public void requestProductionStop(ProdLineStatusDTO prodLine) {
this.onLoadingEnded();
BarcodeManager.disable();
if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) {
mViewModel.stopProduction(prodLine);
} else {
this.confirmOrderClose(() -> {
mViewModel.stopProduction(prodLine);
});
}
}
@Override @Override
public void successDialog(String message, Runnable onComplete) { public void successDialog(String message, Runnable onComplete) {
BarcodeManager.disable(); BarcodeManager.disable();
@@ -160,25 +139,10 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled
if (!dto.isStarted()) { if (!dto.isStarted()) {
this.requestResources(dto); this.requestResources(dto);
} else { } else {
BottomSheetLineAction.newInstance(dto, this::requestResources, this::requestOrderChange, this::requestProductionStop, BarcodeManager::enable).show(getChildFragmentManager(), "BottomSheetLineAction"); requireActivity().startActivity(ProdDettaglioLineaActivity.newInstance(requireActivity(), dto));
} }
} }
@Override
public void confirmOrderClose(Runnable onConfirm) {
this.onLoadingEnded();
requireActivity().runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(
Html.fromHtml("Per completare l'operazione è necessario chiudere gli ordini attualmente aperti sulla linea."
+ "<br /> <br/>" +
"Continuare?"),
null,
onConfirm,
BarcodeManager::enable
).show(getChildFragmentManager(), "confirmOrderClose");
});
}
@Override @Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) { public void onCreateActionBar(AppCompatTextView titleText, Context context) {

View File

@@ -1,10 +1,7 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione; package it.integry.integrywmsnative.gest.prod_linee_produzione;
import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent; import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
@@ -12,14 +9,8 @@ import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceCompo
public class ProdLineeProduzioneModule { public class ProdLineeProduzioneModule {
@Provides @Provides
ProdLineeProduzioneViewModel providesProdRientroMerceViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { ProdLineeProduzioneViewModel providesProdRientroMerceViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer) {
return new ProdLineeProduzioneViewModel(productionLinesRESTConsumer, barcodeRESTConsumer); return new ProdLineeProduzioneViewModel(productionLinesRESTConsumer);
}
@Provides
@Singleton
ProductionLinesRESTConsumer providesProductionLinesRESTConsumer() {
return new ProductionLinesRESTConsumer();
} }
} }

View File

@@ -11,40 +11,34 @@ import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
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.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
public class ProdLineeProduzioneViewModel { public class ProdLineeProduzioneViewModel {
private final ProductionLinesRESTConsumer productionLinesRESTConsumer; private final ProductionLinesRESTConsumer productionLinesRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final MutableLiveData<List<ProdLineStatusDTO>> prodLines = new MutableLiveData<>(); private final MutableLiveData<List<ProdLineStatusDTO>> prodLines = new MutableLiveData<>();
private Listener mListener; private Listener mListener;
@Inject @Inject
public ProdLineeProduzioneViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { public ProdLineeProduzioneViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer) {
this.productionLinesRESTConsumer = productionLinesRESTConsumer; this.productionLinesRESTConsumer = productionLinesRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
} }
public void init() { public void init() {
this.sendOnLoadingStarted();
reloadLines(); reloadLines();
} }
private void reloadLines() { private void reloadLines() {
BarcodeManager.disable();
sendOnLoadingStarted(); sendOnLoadingStarted();
BarcodeManager.disable();
this.productionLinesRESTConsumer.getStatoLinee(SettingsManager.i().getUserSession().getDepo().getCodMdep(), lineeProdList -> { this.productionLinesRESTConsumer.getStatoLinee(SettingsManager.i().getUserSession().getDepo().getCodMdep(), lineeProdList -> {
this.sendOnLoadingEnded();
BarcodeManager.enable(); BarcodeManager.enable();
prodLines.postValue(lineeProdList); prodLines.postValue(lineeProdList);
this.sendOnLoadingEnded();
}, this::sendError); }, this::sendError);
} }
@@ -58,15 +52,12 @@ public class ProdLineeProduzioneViewModel {
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) { public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) {
String codJfas = barcodeScanDTO.getStringValue(); String codJfas = barcodeScanDTO.getStringValue();
ProdLineStatusDTO prodLine = prodLines.getValue() != null ? Stream.of(prodLines.getValue()).filter(x -> x.getCodJfas().equalsIgnoreCase(codJfas)).findFirstOrElse(null) : null; ProdLineStatusDTO prodLine = prodLines.getValue() != null ? Stream.of(prodLines.getValue()).filter(x -> x.getCodJfas().equalsIgnoreCase(codJfas)).findFirstOrElse(null) : null;
if (prodLine != null) { if (prodLine != null) {
this.onLineSelected(prodLine); this.onLineSelected(prodLine);
} else { } else {
this.sendError(new Exception("Linea di produzione " + codJfas + " non trovata")); this.sendError(new Exception("Linea di produzione " + codJfas + " non trovata"));
} }
} }
@@ -94,37 +85,6 @@ public class ProdLineeProduzioneViewModel {
mListener.selectLine(lineSelected); mListener.selectLine(lineSelected);
} }
public void checkBarcodeAndStartOrdine(ProdLineStatusDTO prodLine, BarcodeScanDTO dto) {
this.sendOnLoadingStarted();
mBarcodeRESTConsumer.decodeEan128(dto, (ean128) -> {
String codMart = ean128.Content;
String partitaMag = ean128.BatchLot;
if (!prodLine.isStarted()) {
this.sendError(new Exception("Impossibile avviare una produzione su una linea ferma!"));
} else if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) {
this.startProduction(prodLine, codMart, partitaMag);
} else {
this.mListener.confirmOrderClose(() -> {
this.startProduction(prodLine, codMart, partitaMag);
});
}
}, this::sendError);
}
private void startProduction(ProdLineStatusDTO prodLine, String codMart, String partitaMag) {
this.sendOnLoadingStarted();
this.productionLinesRESTConsumer.avviaProduzioneArticoloSuLinea(prodLine.getCodJfas(), codMart, partitaMag,
() -> this.mListener.successDialog("Operazione completata", this::reloadLines),
this::sendError);
}
public void stopProduction(ProdLineStatusDTO prodLine) {
this.sendOnLoadingStarted();
this.productionLinesRESTConsumer.arrestaLineaDiProduzione(prodLine.getCodJfas(),
() -> this.mListener.successDialog("Operazione completata", this::reloadLines),
this::sendError);
}
public interface Listener extends ILoadingListener { public interface Listener extends ILoadingListener {
@@ -134,8 +94,6 @@ public class ProdLineeProduzioneViewModel {
void selectLine(ProdLineStatusDTO prodLineStatusDTO); void selectLine(ProdLineStatusDTO prodLineStatusDTO);
void confirmOrderClose(Runnable onConfirm);
} }

View File

@@ -16,12 +16,18 @@ public class ProdLineStatusDTO {
private Date datetimeEnd; private Date datetimeEnd;
private String codMart;
private String partitaMag;
private BigDecimal maxAllocazione; private BigDecimal maxAllocazione;
private Integer qtaAllocate; private Integer qtaAllocate;
private String listaOrd; private String listaOrd;
private String descrizioneProd;
public String getCodJfas() { public String getCodJfas() {
return codJfas; return codJfas;
@@ -126,4 +132,31 @@ public class ProdLineStatusDTO {
return qtaAllocate + (maxAllocazione != null && maxAllocazione.compareTo(BigDecimal.ZERO) > 0 ? "/" + maxAllocazione : ""); return qtaAllocate + (maxAllocazione != null && maxAllocazione.compareTo(BigDecimal.ZERO) > 0 ? "/" + maxAllocazione : "");
} }
public String getCodMart() {
return codMart;
}
public ProdLineStatusDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public ProdLineStatusDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public String getDescrizioneProd() {
return descrizioneProd;
}
public ProdLineStatusDTO setDescrizioneProd(String descrizioneProd) {
this.descrizioneProd = descrizioneProd;
return this;
}
} }

View File

@@ -59,6 +59,8 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
private FragmentProdRecuperoMaterialeBinding mBinding; private FragmentProdRecuperoMaterialeBinding mBinding;
private int barcodeScannerIstanceID = -1; private int barcodeScannerIstanceID = -1;
private String codJfas;
private String fragmentResultKeyString;
private final ObservableArrayList<HistoryULsListModel> mHistoryULMutableData = new ObservableArrayList<>(); private final ObservableArrayList<HistoryULsListModel> mHistoryULMutableData = new ObservableArrayList<>();
@@ -67,10 +69,22 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
} }
public static ProdRecuperoMaterialeFragment newInstance() { public static ProdRecuperoMaterialeFragment newInstance() {
return newInstance(null, null);
}
public static ProdRecuperoMaterialeFragment newInstance(String codJfas, String keyString) {
ProdRecuperoMaterialeFragment fragment = new ProdRecuperoMaterialeFragment(); ProdRecuperoMaterialeFragment fragment = new ProdRecuperoMaterialeFragment();
if (keyString != null) {
fragment.setFragmentResultKeyString(keyString);
}
fragment.setCodJfas(codJfas);
return fragment; return fragment;
} }
public static ProdRecuperoMaterialeFragment newInstance(String codJfas) {
return newInstance(codJfas, null);
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@@ -89,6 +103,14 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
this.initBarcodeReader(); this.initBarcodeReader();
this.initRecyclerView(); this.initRecyclerView();
this.addOnPreDestroy(() -> {
if (!UtilityString.isNullOrEmpty(fragmentResultKeyString)) {
Bundle result = new Bundle();
result.putString(fragmentResultKeyString, "result");
getParentFragmentManager().setFragmentResult(fragmentResultKeyString, result);
}
});
return mBinding.getRoot(); return mBinding.getRoot();
} }
@@ -96,8 +118,12 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
this.addOnPreDestroy(() -> {
mViewModel.init(); if (barcodeScannerIstanceID > -1) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
}
});
mViewModel.init(codJfas);
} }
@@ -115,6 +141,24 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
BarcodeManager.enable(); BarcodeManager.enable();
} }
public String getCodJfas() {
return codJfas;
}
public ProdRecuperoMaterialeFragment setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getFragmentResultKeyString() {
return fragmentResultKeyString;
}
public ProdRecuperoMaterialeFragment setFragmentResultKeyString(String fragmentResultKeyString) {
this.fragmentResultKeyString = fragmentResultKeyString;
return this;
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted(); this.onLoadingStarted();
@@ -133,7 +177,9 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
mBinding.prodRecuperoMaterialeMainList.setAdapter(adapter); mBinding.prodRecuperoMaterialeMainList.setAdapter(adapter);
mToolbar.setRecyclerView(mBinding.prodRecuperoMaterialeMainList); if (mToolbar != null)
mToolbar.setRecyclerView(mBinding.prodRecuperoMaterialeMainList);
} }
private void refreshList(List<HistoryVersamentoProdULDTO> filteredList) { private void refreshList(List<HistoryVersamentoProdULDTO> filteredList) {
@@ -230,11 +276,11 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
public void onLUPrintError(Exception ex, Runnable onComplete) { public void onLUPrintError(Exception ex, Runnable onComplete) {
this.onLoadingEnded(); this.onLoadingEnded();
DialogSimpleMessageView.makeErrorDialog( DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()), new SpannableString(ex.getMessage()),
null, null,
null, null,
R.string.button_ignore_print, R.string.button_ignore_print,
onComplete) onComplete)
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@@ -51,11 +51,11 @@ public class ProdRecuperoMaterialeViewModel {
this.mPrinterRESTConsumer = printerRESTConsumer; this.mPrinterRESTConsumer = printerRESTConsumer;
} }
public void init() { public void init(String codJfas) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
new Thread(() -> { new Thread(() -> {
mProdRecuperMaterialeRESTConsumer.loadLastULVersate(ulList -> { mProdRecuperMaterialeRESTConsumer.loadLastULVersate(codJfas, ulList -> {
this.mUlList.setValue(ulList); this.mUlList.setValue(ulList);
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
@@ -115,7 +115,10 @@ public class ProdRecuperoMaterialeViewModel {
qtaDaEvadere = qtaDaEvadere.add(item.getQtaCol()); qtaDaEvadere = qtaDaEvadere.add(item.getQtaCol());
if (!UtilityBigDecimal.equalsTo(qtaDaEvadere, BigDecimal.ZERO)) { if (!UtilityBigDecimal.equalsTo(qtaDaEvadere, BigDecimal.ZERO)) {
numCnfDaEvadere = UtilityBigDecimal.divide(qtaDaEvadere, item.getQtaCnf());
if(item.getMtbAart().isFlagQtaCnfFissaBoolean())
numCnfDaEvadere = UtilityBigDecimal.divide(qtaDaEvadere, item.getQtaCnf());
else numCnfDaEvadere = item.getNumCnf();
} }
this.sendOnItemDispatched(item, this.sendOnItemDispatched(item,
@@ -151,27 +154,64 @@ public class ProdRecuperoMaterialeViewModel {
BigDecimal totalSumOfQtaCol = BigDecimal.ZERO; BigDecimal totalSumOfQtaCol = BigDecimal.ZERO;
BigDecimal totalSumOfNumCnf = BigDecimal.ZERO; BigDecimal totalSumOfNumCnf = BigDecimal.ZERO;
for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) { if (SettingsManager.iDB().isFlagVersamentoDirettoProduzione()) {
for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) {
BigDecimal qtaColToSave;
BigDecimal numCnfToSave;
if (SettingsManager.iDB().isFlagForceAllToColli() || (item.getMtbAart() != null && !item.getMtbAart().isFlagQtaCnfFissaBoolean())) {
numCnfToSave = UtilityBigDecimal.divideAndRoundToInteger(inputNumCnf.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, BigDecimal.ROUND_FLOOR);
} else {
qtaColToSave = UtilityBigDecimal.divideAndRoundToInteger(inputQtaTot.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, item.getQtaCnf(), RoundingMode.FLOOR);
}
totalSumOfQtaCol = totalSumOfQtaCol.add(qtaColToSave);
totalSumOfNumCnf = totalSumOfNumCnf.add(numCnfToSave);
numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1));
qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1));
final MtbColr mtbColrScarico = new MtbColr()
.setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(item.getPartitaMag()))
.setQtaCol(qtaColToSave)
.setQtaCnf(inputQtaCnf)
.setNumCnf(numCnfToSave)
.setDescrizione(UtilityString.isNullOrEmpty(item.getMtbAart().getDescrizioneEstesa()) ? item.getMtbAart().getDescrizione() : item.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setNumColloRif(item.getNumColloRif())
.setDataColloRif(item.getDataColloRif())
.setGestioneRif(item.getGestioneRif())
.setSerColloRif(item.getSerColloRif())
.setDataOrd(ordine.getData())
.setNumOrd(ordine.getNumero())
.setRigaOrd(ordine.getRigaOrd());
mtbColrScarico.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColtScarico.getMtbColr().add(mtbColrScarico);
}
} else {
BigDecimal qtaColToSave; BigDecimal qtaColToSave;
BigDecimal numCnfToSave; BigDecimal numCnfToSave;
if (SettingsManager.iDB().isFlagForceAllToColli() || (item.getMtbAart() != null && !item.getMtbAart().isFlagQtaCnfFissaBoolean())) { if (SettingsManager.iDB().isFlagForceAllToColli() || (item.getMtbAart() != null && !item.getMtbAart().isFlagQtaCnfFissaBoolean())) {
numCnfToSave = UtilityBigDecimal.divideAndRoundToInteger(inputNumCnf.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR); numCnfToSave = inputNumCnf;
qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, BigDecimal.ROUND_FLOOR); qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, BigDecimal.ROUND_FLOOR);
} else { } else {
qtaColToSave = UtilityBigDecimal.divideAndRoundToInteger(inputQtaTot.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR); qtaColToSave = inputQtaTot;
numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, item.getQtaCnf(), RoundingMode.FLOOR); numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, item.getQtaCnf(), RoundingMode.FLOOR);
} }
totalSumOfQtaCol = qtaColToSave;
totalSumOfQtaCol = totalSumOfQtaCol.add(qtaColToSave); totalSumOfNumCnf = numCnfToSave;
totalSumOfNumCnf = totalSumOfNumCnf.add(numCnfToSave);
numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1)); numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1));
qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1)); qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1));
final MtbColr mtbColrScarico = new MtbColr() final MtbColr mtbColrScarico = new MtbColr()
.setCodMart(item.getCodMart()) .setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(item.getPartitaMag())) .setPartitaMag(UtilityString.empty2null(item.getPartitaMag()))
@@ -183,10 +223,7 @@ public class ProdRecuperoMaterialeViewModel {
.setNumColloRif(item.getNumColloRif()) .setNumColloRif(item.getNumColloRif())
.setDataColloRif(item.getDataColloRif()) .setDataColloRif(item.getDataColloRif())
.setGestioneRif(item.getGestioneRif()) .setGestioneRif(item.getGestioneRif())
.setSerColloRif(item.getSerColloRif()) .setSerColloRif(item.getSerColloRif());
.setDataOrd(ordine.getData())
.setNumOrd(ordine.getNumero())
.setRigaOrd(ordine.getRigaOrd());
mtbColrScarico.setOperation(CommonModelConsts.OPERATION.INSERT); mtbColrScarico.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColtScarico.getMtbColr().add(mtbColrScarico); mtbColtScarico.getMtbColr().add(mtbColrScarico);

View File

@@ -16,6 +16,9 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO; import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULRestDTO; import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULRestDTO;
@@ -32,6 +35,10 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
public void loadLastULVersate(RunnableArgs<List<HistoryVersamentoProdULDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void loadLastULVersate(RunnableArgs<List<HistoryVersamentoProdULDTO>> onComplete, RunnableArgs<Exception> onFailed) {
loadLastULVersate(null, onComplete, onFailed);
}
public void loadLastULVersate(String codJfas, RunnableArgs<List<HistoryVersamentoProdULDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "WITH ul_list AS ( " + String sql = "WITH ul_list AS ( " +
" SELECT jtb_fasi.cod_jfas, " + " SELECT jtb_fasi.cod_jfas, " +
@@ -68,7 +75,7 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
" AND mtb_colr.data_collo = mtb_colt.data_collo " + " AND mtb_colr.data_collo = mtb_colt.data_collo " +
" AND mtb_colr.ser_collo = mtb_colt.ser_collo " + " AND mtb_colr.ser_collo = mtb_colt.ser_collo " +
" AND mtb_colr.gestione = mtb_colt.gestione " + " AND mtb_colr.gestione = mtb_colt.gestione " +
" INNER JOIN dtb_ord_steps ON dtb_ord_steps.data_ord = mtb_colr.data_ord " + " " + (SettingsManager.iDB().isFlagVersamentoDirettoProduzione() ? "INNER" : "LEFT OUTER") + " join dtb_ord_steps ON dtb_ord_steps.data_ord = mtb_colr.data_ord " +
" AND dtb_ord_steps.gestione = mtb_colr.gestione " + " AND dtb_ord_steps.gestione = mtb_colr.gestione " +
" AND dtb_ord_steps.num_ord = mtb_colr.num_ord " + " AND dtb_ord_steps.num_ord = mtb_colr.num_ord " +
" AND dtb_ord_steps.data_iniz is not null " + " AND dtb_ord_steps.data_iniz is not null " +
@@ -76,6 +83,7 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
" INNER JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart " + " INNER JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart " +
" LEFT OUTER JOIN jtb_fasi ON mtb_colt.cod_jfas = jtb_fasi.cod_jfas " + " LEFT OUTER JOIN jtb_fasi ON mtb_colt.cod_jfas = jtb_fasi.cod_jfas " +
" WHERE jtb_fasi.cod_jfas IS NOT NULL " + " WHERE jtb_fasi.cod_jfas IS NOT NULL " +
(UtilityString.isNullOrEmpty(codJfas) ? "" : " AND jtb_fasi.cod_jfas = " + UtilityDB.valueToString(codJfas)) +
" AND segno = -1 " + " AND segno = -1 " +
" AND mtb_colr.data_collo > DATEADD(DAY, -5, GETDATE()) " + " AND mtb_colr.data_collo > DATEADD(DAY, -5, GETDATE()) " +
" GROUP BY jtb_fasi.cod_jfas, " + " GROUP BY jtb_fasi.cod_jfas, " +
@@ -177,7 +185,8 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
" ISNULL(max_ul.hr, '') = ISNULL(ul_list.hr, '') AND " + " ISNULL(max_ul.hr, '') = ISNULL(ul_list.hr, '') AND " +
" max_ul.max_datetime_row = ul_list.datetime_row"; " max_ul.max_datetime_row = ul_list.datetime_row";
Type typeOfObjectsList = new TypeToken<ArrayList<HistoryVersamentoProdULRestDTO>>() {}.getType(); Type typeOfObjectsList = new TypeToken<ArrayList<HistoryVersamentoProdULRestDTO>>() {
}.getType();
this.mSystemRESTConsumer.<ArrayList<HistoryVersamentoProdULRestDTO>>processSql(sql, typeOfObjectsList, ulList -> { this.mSystemRESTConsumer.<ArrayList<HistoryVersamentoProdULRestDTO>>processSql(sql, typeOfObjectsList, ulList -> {
if (ulList == null) { if (ulList == null) {

View File

@@ -11,6 +11,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -19,7 +20,9 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment;
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.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
@@ -32,9 +35,18 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ProdRientroMerceFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ProdRientroMerceViewModel.Listener, BottomSheetFragmentLUContentView.Listener, BottomSheetMtbColrEditView.Listener { public class ProdRientroMerceFragment extends BaseFragment implements
ITitledFragment,
IScrollableFragment,
ILifecycleFragment,
ProdRientroMerceViewModel.Listener,
BottomSheetFragmentLUContentView.Listener,
BottomSheetMtbColrEditView.Listener,
ProdRientroMerceOrderListFragment.OnRefreshListener {
public final ObservableField<Boolean> isLargeLayout = new ObservableField<>(false);
@Inject @Inject
ProdRientroMerceViewModel mViewModel; ProdRientroMerceViewModel mViewModel;
@@ -56,20 +68,47 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setRetainInstance(true); setRetainInstance(true);
boolean isLargeLayout = getResources().getBoolean(R.bool.large_layout);
this.isLargeLayout.set(isLargeLayout);
mProdRientroMerceOrderListFragment = ProdRientroMerceOrderListFragment.newInstance(mToolbar); mProdRientroMerceOrderListFragment = ProdRientroMerceOrderListFragment.newInstance(mToolbar);
mProdRientroMerceOrderDetailFragment = ProdRientroMerceOrderDetailFragment.newInstance(); mProdRientroMerceOrderDetailFragment = ProdRientroMerceOrderDetailFragment.newInstance();
mProdRientroMerceOrderListFragment.setOnItemSelectedRunnable(mProdRientroMerceOrderDetailFragment::setOrder);
mProdRientroMerceOrderListFragment
.setOnItemSelectedRunnable(order -> {
if (!isLargeLayout) {
getChildFragmentManager()
.beginTransaction()
.show(mProdRientroMerceOrderDetailFragment)
.addToBackStack(ProdRientroMerceOrderDetailFragment.class.getName())
.commit();
}
mProdRientroMerceOrderDetailFragment.setOrder(order);
})
.setOnRefreshListener(this);
mProdRientroMerceOrderDetailFragment.setOnMtbColtClicked(item -> { mProdRientroMerceOrderDetailFragment.setOnMtbColtClicked(item -> {
mBindings.bottomSheetMtbColrEdit.setMtbColr(item.getMtbColr().get(0)); mBindings.bottomSheetMtbColrEdit.setMtbColr(item.getMtbColr().get(0));
mBindings.bottomSheetMtbColrEdit.expand(); mBindings.bottomSheetMtbColrEdit.expand();
}); });
getChildFragmentManager() if (isLargeLayout) {
.beginTransaction() getChildFragmentManager()
.replace(R.id.order_list_fragment, mProdRientroMerceOrderListFragment) .beginTransaction()
.replace(R.id.order_detail_fragment, mProdRientroMerceOrderDetailFragment) .replace(R.id.left_side_fragment_container, mProdRientroMerceOrderListFragment)
.commit(); .replace(R.id.right_side_fragment_container, mProdRientroMerceOrderDetailFragment)
.commit();
} else {
getChildFragmentManager()
.beginTransaction()
.add(R.id.full_width_container, mProdRientroMerceOrderListFragment)
.add(R.id.full_width_container, mProdRientroMerceOrderDetailFragment)
.hide(mProdRientroMerceOrderDetailFragment)
.commit();
}
MainApplication.appComponent MainApplication.appComponent
.prodRientroMerceComponent() .prodRientroMerceComponent()
@@ -82,6 +121,8 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
@Nullable Bundle savedInstanceState) { @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce, container, false); mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce, container, false);
mBindings.setLifecycleOwner(this); mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
mViewModel.setListener(this); mViewModel.setListener(this);
@@ -94,13 +135,13 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
public void onActivityCreated(@Nullable Bundle savedInstanceState) { public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
if(savedInstanceState == null) { if (savedInstanceState == null) {
this.mViewModel.getOrdiniLavorazioneAperti().observe(this.getViewLifecycleOwner(), this::ordersUpdated); this.mViewModel.getOrdiniLavorazioneAperti().observe(this.getViewLifecycleOwner(), this::ordersUpdated);
mViewModel.refreshOrderList();
mViewModel.init();
} }
} }
@Override @Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) { public void onCreateActionBar(AppCompatTextView titleText, Context context) {
mAppBarTitle = titleText; mAppBarTitle = titleText;
@@ -139,7 +180,6 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
} }
private void initBottomSheet() { private void initBottomSheet() {
mBindings.bottomSheetMtbColrEdit.setListener(this); mBindings.bottomSheetMtbColrEdit.setListener(this);
mBindings.bottomSheetMtbColrEdit.disableEditButton(); mBindings.bottomSheetMtbColrEdit.disableEditButton();
@@ -157,7 +197,33 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null, null,
() -> mProdRientroMerceOrderDetailFragment.deleteMtbColr(mtbColr), () -> mProdRientroMerceOrderDetailFragment.deleteMtbColr(mtbColr),
() -> {} () -> {
).show(getActivity().getSupportFragmentManager(), "tag"); }
).show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onOrderLoadingStarted() {
BarcodeManager.disable();
this.mProdRientroMerceOrderListFragment.onOrderLoadingStarted();
}
@Override
public void onOrderLoadingEnded() {
BarcodeManager.enable();
this.mProdRientroMerceOrderListFragment.onOrderLoadingEnded();
}
@Override
public void onRefresh() {
this.mViewModel.refreshOrderList();
}
@Override
public void onPreDestroy(Runnable onComplete) {
if(getChildFragmentManager().getBackStackEntryCount() > 0)
getChildFragmentManager().popBackStack();
else onComplete.run();
} }
} }

View File

@@ -7,7 +7,9 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.IOrdersLoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException; import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException;
@@ -25,12 +27,12 @@ public class ProdRientroMerceViewModel {
this.mMesRESTConsumer = mesRESTConsumer; this.mMesRESTConsumer = mesRESTConsumer;
} }
public void init() { public void refreshOrderList() {
new Thread(this::sendOnLoadingStarted).start(); new Thread(this::sendOnOrdersLoadingStarted).start();
String codAnag = SettingsManager.iDB().getFilterFornitoreProd();
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> { this.mMesRESTConsumer.getOrdiniLavorazione("I", null, codAnag, ordiniLavorazioneList -> {
this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList); this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList);
this.sendOnLoadingEnded(); this.sendOnOrdersLoadingEnded();
}, ex -> this.sendError(new OrdersLoadException(ex))); }, ex -> this.sendError(new OrdersLoadException(ex)));
} }
@@ -51,12 +53,20 @@ public class ProdRientroMerceViewModel {
if (this.mListener != null) mListener.onLoadingEnded(); if (this.mListener != null) mListener.onLoadingEnded();
} }
private void sendOnOrdersLoadingStarted() {
if (this.mListener != null) mListener.onOrderLoadingStarted();
}
private void sendOnOrdersLoadingEnded() {
if (this.mListener != null) mListener.onOrderLoadingEnded();
}
private void sendError(Exception ex) { private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex); if (this.mListener != null) mListener.onError(ex);
} }
public interface Listener extends ILoadingListener { public interface Listener extends ILoadingListener, IOrdersLoadingListener {
void onDataSaved(); void onDataSaved();

View File

@@ -82,6 +82,8 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO); public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<BigDecimal> sumNetKG = new ObservableField<>(BigDecimal.ZERO); public ObservableField<BigDecimal> sumNetKG = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<BigDecimal> sumGrossKG = new ObservableField<>(BigDecimal.ZERO); public ObservableField<BigDecimal> sumGrossKG = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<Integer> progress = new ObservableField<>(0);
public boolean isOrderColli = false;
public ProdRientroMerceOrderDetailFragment() { public ProdRientroMerceOrderDetailFragment() {
// Required empty public constructor // Required empty public constructor
@@ -113,11 +115,16 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
mViewModel.setListener(this); mViewModel.setListener(this);
if (currentOrder.getValue() != null) {
refreshOrder();
isOrderColli = currentOrder.getValue().getQtaCnf().compareTo(BigDecimal.ONE) == 0;
}
this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList); this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList);
this.initRecyclerView(); this.initRecyclerView();
this.initULScaleBluetoothConnection(); this.initULScaleBluetoothConnection();
mBindings.executePendingBindings();
return mBindings.getRoot(); return mBindings.getRoot();
} }
@@ -182,11 +189,15 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
} }
public void setOrder(OrdineLavorazioneDTO order) { public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.postValue(order); currentOrder.setValue(order);
mBindings.invalidateAll();
mAdapter.clearDataset();
mViewModel.setOrder(order); refreshOrder();
}
private void refreshOrder() {
if (mBindings != null) mBindings.invalidateAll();
if (mAdapter != null) mAdapter.clearDataset();
if (mViewModel != null) mViewModel.setOrder(currentOrder.getValue());
} }
private void refreshList(List<MtbColt> mtbColts) { private void refreshList(List<MtbColt> mtbColts) {
@@ -205,6 +216,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
})); }));
sumColliNumber.set(sumColli.get()); sumColliNumber.set(sumColli.get());
sumGrossKG.set(sumGross.get()); sumGrossKG.set(sumGross.get());
progress.set(currentOrder.getValue().getProgress());
sumNetKG.set(sumNet.get()); sumNetKG.set(sumNet.get());
} else { } else {
sumLUNumber.set(BigDecimal.ZERO); sumLUNumber.set(BigDecimal.ZERO);

View File

@@ -70,7 +70,7 @@ public class ProdRientroMerceOrderDetailViewModel {
.setCodJcom(currentOrder.getCodJcom()) .setCodJcom(currentOrder.getCodJcom())
.setCodJfas(pickedQuantityDTO.getJtbFasi() != null ? pickedQuantityDTO.getJtbFasi().getCodJfas() : null) .setCodJfas(pickedQuantityDTO.getJtbFasi() != null ? pickedQuantityDTO.getJtbFasi().getCodJfas() : null)
.setCodMart(currentOrder.getCodProd()) .setCodMart(currentOrder.getCodProd())
.setCodTcol(pickedQuantityDTO.getMtbTCol().getCodTcol()) .setCodTcol(pickedQuantityDTO.getMtbTCol() != null ? pickedQuantityDTO.getMtbTCol().getCodTcol() : null)
.setDataCollo(new Date()) .setDataCollo(new Date())
.setDataOrd(currentOrder.getDataOrdD()) .setDataOrd(currentOrder.getDataOrdD())
.setNumOrd(currentOrder.getNumOrd()) .setNumOrd(currentOrder.getNumOrd())

View File

@@ -129,15 +129,18 @@ public class ProdRientroMerceOrderListAdapter extends SectionedRecyclerViewAdapt
case START: case START:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_play_circle_filled_24dp); holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_play_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.green_800), android.graphics.PorterDuff.Mode.SRC_IN); holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.green_800), android.graphics.PorterDuff.Mode.SRC_IN);
holder.mBinding.orderProgress.setVisibility(View.VISIBLE);
break; break;
case PAUSE: case PAUSE:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_pause_circle_filled_24dp); holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_pause_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.yellow_800), android.graphics.PorterDuff.Mode.SRC_IN); holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.yellow_800), android.graphics.PorterDuff.Mode.SRC_IN);
holder.mBinding.orderProgress.setVisibility(View.VISIBLE);
break; break;
case SCHEDULED: case SCHEDULED:
default: default:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_clock_circle_outline_24dp); holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_clock_circle_outline_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.blue_700), android.graphics.PorterDuff.Mode.SRC_IN); holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.blue_700), android.graphics.PorterDuff.Mode.SRC_IN);
holder.mBinding.orderProgress.setVisibility(View.GONE);
break; break;
} }
@@ -166,6 +169,8 @@ public class ProdRientroMerceOrderListAdapter extends SectionedRecyclerViewAdapt
holder.mBinding.rightSubDescrizione.setVisibility(View.VISIBLE); holder.mBinding.rightSubDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightSubDescrizione.setVisibility(View.GONE); } else holder.mBinding.rightSubDescrizione.setVisibility(View.GONE);
holder.mBinding.orderProgress.setProgress(listModel.getProgress());
holder.mBinding.executePendingBindings(); holder.mBinding.executePendingBindings();
holder.mBinding.getRoot().setOnClickListener(v -> { holder.mBinding.getRoot().setOnClickListener(v -> {

View File

@@ -15,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.ComparatorCompat; import com.annimon.stream.ComparatorCompat;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -36,12 +37,10 @@ import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class ProdRientroMerceOrderListFragment extends Fragment { public class ProdRientroMerceOrderListFragment extends Fragment {
private final ObservableArrayList<ProdRientroMerceOrderListModel> mOrdiniApertiMutableData = new ObservableArrayList<>(); private final ObservableArrayList<ProdRientroMerceOrderListModel> mOrdiniApertiMutableData = new ObservableArrayList<>();
private FragmentProdRientroMerceOrderListBinding mBindings = null; private FragmentProdRientroMerceOrderListBinding mBindings = null;
private RunnableArgs<OrdineLavorazioneDTO> mOnItemSelectedRunnable; private RunnableArgs<OrdineLavorazioneDTO> mOnItemSelectedRunnable;
private ElevatedToolbar mToolbar; private ElevatedToolbar mToolbar;
private OnRefreshListener onRefreshListener;
public ProdRientroMerceOrderListFragment() { public ProdRientroMerceOrderListFragment() {
// Required empty public constructor // Required empty public constructor
@@ -72,7 +71,7 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
mBindings.setLifecycleOwner(this); mBindings.setLifecycleOwner(this);
if(savedInstanceState == null) this.initRecyclerView(); if (savedInstanceState == null) this.initRecyclerView();
return mBindings.getRoot(); return mBindings.getRoot();
} }
@@ -86,13 +85,18 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
ProdRientroMerceOrderListAdapter prodRientroMerceOrderListAdapter = new ProdRientroMerceOrderListAdapter(getActivity(), mOrdiniApertiMutableData) ProdRientroMerceOrderListAdapter prodRientroMerceOrderListAdapter = new ProdRientroMerceOrderListAdapter(getActivity(), mOrdiniApertiMutableData)
.setEmptyView(this.mBindings.emptyView) .setEmptyView(this.mBindings.emptyView)
.setOnItemChecked(x -> { .setOnItemChecked(x -> {
if(mOnItemSelectedRunnable != null) mOnItemSelectedRunnable.run(x.getOriginalModel()); if (mOnItemSelectedRunnable != null)
mOnItemSelectedRunnable.run(x.getOriginalModel());
}); });
this.mBindings.mainList.setAdapter(prodRientroMerceOrderListAdapter); this.mBindings.mainList.setAdapter(prodRientroMerceOrderListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity())); this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity()));
this.mToolbar.setRecyclerView(mBindings.mainList); this.mToolbar.setRecyclerView(mBindings.mainList);
this.mBindings.swiperefresh.setOnRefreshListener(() -> {
if (onRefreshListener != null) onRefreshListener.onRefresh();
});
} }
public void pushOrderList(List<OrdineLavorazioneDTO> orderList) { public void pushOrderList(List<OrdineLavorazioneDTO> orderList) {
@@ -101,15 +105,25 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
} }
public void onOrderLoadingStarted() {
this.mBindings.swiperefresh.setRefreshing(true);
}
public void onOrderLoadingEnded() {
this.mBindings.swiperefresh.setRefreshing(false);
}
private List<ProdRientroMerceOrderListModel> convertDataModelToListModel(List<OrdineLavorazioneDTO> dataList) { private List<ProdRientroMerceOrderListModel> convertDataModelToListModel(List<OrdineLavorazioneDTO> dataList) {
ComparatorCompat<OrdineLavorazioneDTO> comparator = ComparatorCompat ComparatorCompat<OrdineLavorazioneDTO> comparator = ComparatorCompat
.comparing(OrdineLavorazioneDTO::getCodJfas) .comparing(OrdineLavorazioneDTO::getCodAnag)
.thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDescCommessa() != null ? ordineLavorazioneDTO.getDescCommessa() : "zzzzzzzz"))
.thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataConsCommessaD() != null ? String.valueOf(ordineLavorazioneDTO.getDataConsCommessaD().getTime()) : "999999999999")).reversed()
.thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataOrd() != null ? ordineLavorazioneDTO.getDataOrd() : "zzzzzzzz")).reversed() .thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataOrd() != null ? ordineLavorazioneDTO.getDataOrd() : "zzzzzzzz")).reversed()
.thenComparing(ComparatorCompat.comparing(OrdineLavorazioneDTO::getNumOrd)); .thenComparing(ComparatorCompat.comparing(OrdineLavorazioneDTO::getNumOrd));
if(dataList == null) return new ArrayList<>(); if (dataList == null) return new ArrayList<>();
List<ProdRientroMerceOrderListModel> notHiddenElements = Stream.of(dataList) List<ProdRientroMerceOrderListModel> notHiddenElements = Stream.of(dataList)
.sorted(comparator) .sorted(comparator)
@@ -129,10 +143,14 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
break; break;
} }
listModel.setGroupTitle(x.getCodJfas()); listModel.setGroupTitle(x.getRagSocAnag());
if(!UtilityString.isNullOrEmpty(x.getRagSocAnag())) if (!UtilityString.isNullOrEmpty(x.getDataConsCommessa())) {
listModel.setPreDescription("Provenienza: " + x.getRagSocAnag()); listModel.setPreDescription("Consegna: " + UtilityDate.formatDate(x.getDataConsCommessaD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} else {
/* if (!UtilityString.isNullOrEmpty(x.getRagSocAnag()))
listModel.setPreDescription("Provenienza: " + x.getRagSocAnag());*/
}
String testataOrdString = "" + x.getNumOrd(); String testataOrdString = "" + x.getNumOrd();
listModel.setDescription(testataOrdString); listModel.setDescription(testataOrdString);
@@ -141,11 +159,27 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
listModel.setRightDescription(x.getCodJcom() != null ? (x.getDescCommessa() + " (" + x.getCodJcom() + ")") : ""); listModel.setRightDescription(x.getCodJcom() != null ? (x.getDescCommessa() + " (" + x.getCodJcom() + ")") : "");
try { listModel.setProgress(x.getProgress());
int numPedane = x.getNumCnf().divide(x.getColliPedana(), 0, RoundingMode.DOWN).intValue();
int numCnf = x.getNumCnf().remainder(x.getColliPedana()).intValue();
String qtaOrdLabel = "";
if (numPedane > 0) {
qtaOrdLabel += numPedane + "UL x " + x.getColliPedana().stripTrailingZeros().toPlainString() + " COL";
if (numCnf > 0) {
qtaOrdLabel += " + ";
}
}
if (numCnf > 0) {
qtaOrdLabel += numCnf + " COL";
}
// listModel.setRightSubDescription(x.getNumCnf().stripTrailingZeros().toPlainString() + " COL");
listModel.setRightSubDescription(qtaOrdLabel);
/*try {
listModel.setRightSubDescription(UtilityDate.formatDate(x.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); listModel.setRightSubDescription(UtilityDate.formatDate(x.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} catch (Exception ex) { } catch (Exception ex) {
} }*/
listModel.setOriginalModel(x); listModel.setOriginalModel(x);
@@ -164,4 +198,13 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
public RecyclerView getList() { public RecyclerView getList() {
return mBindings.mainList; return mBindings.mainList;
} }
public ProdRientroMerceOrderListFragment setOnRefreshListener(OnRefreshListener onRefreshListener) {
this.onRefreshListener = onRefreshListener;
return this;
}
public interface OnRefreshListener {
void onRefresh();
}
} }

View File

@@ -11,6 +11,7 @@ public class ProdRientroMerceOrderListModel implements Cloneable {
private String subDescription; private String subDescription;
private String rightDescription; private String rightDescription;
private String rightSubDescription; private String rightSubDescription;
private int progress;
private boolean hidden; private boolean hidden;
@@ -105,4 +106,13 @@ public class ProdRientroMerceOrderListModel implements Cloneable {
START, START,
SCHEDULED SCHEDULED
} }
public int getProgress() {
return progress;
}
public ProdRientroMerceOrderListModel setProgress(int progress) {
this.progress = progress;
return this;
}
} }

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto; package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date; import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableFloat; import it.integry.integrywmsnative.core.di.BindableFloat;
@@ -50,6 +51,7 @@ public class OrdineLavorazioneDTO {
private String dataScad; private String dataScad;
private String partitaMagSuggested; private String partitaMagSuggested;
private String dataScadSuggested; private String dataScadSuggested;
@@ -90,6 +92,8 @@ public class OrdineLavorazioneDTO {
private String descCommessa; private String descCommessa;
private String dataConsCommessa;
private BigDecimal prodStd; private BigDecimal prodStd;
private Object mtbColtToEdit; private Object mtbColtToEdit;
@@ -135,6 +139,7 @@ public class OrdineLavorazioneDTO {
public String getDataOrd() { public String getDataOrd() {
return dataOrd; return dataOrd;
} }
public Date getDataOrdD() { public Date getDataOrdD() {
return UtilityDate.recognizeDateWithExceptionHandler(dataOrd); return UtilityDate.recognizeDateWithExceptionHandler(dataOrd);
} }
@@ -490,4 +495,32 @@ public class OrdineLavorazioneDTO {
public OrdineLavorazioneStatoEnum getStatoEnum() { public OrdineLavorazioneStatoEnum getStatoEnum() {
return OrdineLavorazioneStatoEnum.fromString(getStato()); return OrdineLavorazioneStatoEnum.fromString(getStato());
} }
public String getDataConsCommessa() {
return dataConsCommessa;
}
public Date getDataConsCommessaD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataConsCommessa());
}
public void setDataConsCommessa(String dataConsCommessa) {
this.dataConsCommessa = dataConsCommessa;
}
public int getProgress() {
int progress = 0;
if (this.getQtaProd().compareTo(BigDecimal.ZERO) > 0) {
if (this.getQtaTrasferite().compareTo(this.getQtaProd()) > 0) {
progress = 100;
} else {
progress = this.getQtaTrasferite().multiply(BigDecimal.valueOf(100)).divide(this.getQtaProd(), 0, RoundingMode.UP).intValue();
}
}
return progress;
}
} }

View File

@@ -108,8 +108,9 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
mBinding.closeActivityFab.close(false); mBinding.closeActivityFab.close(false);
mBinding.scanArtSpinner.setVisibility(articoli.size() > 0 ? View.GONE : View.VISIBLE); mBinding.scanArtSpinner.setVisibility(articoli.size() > 0 ? View.GONE : View.VISIBLE);
if (articoli.isEmpty() && isOrderNewProdsForced()) { if (mOrdine.isOrderNewProducts() && articoli.isEmpty() && isOrderNewProdsForced()) {
this.mViewModel.orderNewProducts(); this.mViewModel.orderNewProducts();
mOrdine.setOrderNewProducts(false);
} }
}); });

View File

@@ -220,7 +220,6 @@ public class PVOrdineAcquistoEditViewModel {
.isEmpty() .isEmpty()
) { ) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine); ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine);
dto.setQtaOrd(dto.getQtaCnf());
articoliToSave.add(dto); articoliToSave.add(dto);
} }
}); });

View File

@@ -75,6 +75,7 @@ public class OrdineAcquistoPvHelper {
Ordine ordine = new Ordine(); Ordine ordine = new Ordine();
ordine.setDataIns(UtilityDate.getDateInstance()); ordine.setDataIns(UtilityDate.getDateInstance());
ordine.setIdGriglia(griglia.getGrigliaId()); ordine.setIdGriglia(griglia.getGrigliaId());
ordine.setOrderNewProducts(true);
mOrdineRepository.insert(ordine, id -> { mOrdineRepository.insert(ordine, id -> {
ordine.setOrdineId(id); ordine.setOrdineId(id);
onSuccess.run(ordine); onSuccess.run(ordine);

View File

@@ -495,6 +495,6 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Override @Override
public void onPreDestroy(Runnable onComplete) { public void onPreDestroy(Runnable onComplete) {
BarcodeManager.removeCallback(barcodeScannerIstanceID); BarcodeManager.removeCallback(barcodeScannerIstanceID);
mViewModel.closeLU(false, onComplete); mViewModel.closeLU(false);
} }
} }

View File

@@ -44,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
@@ -72,6 +73,7 @@ import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShould
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView; import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialog;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPeso; import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPeso;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -938,4 +940,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
} }
} }
} }
@Override
public void onInfoAggiuntiveRequired(MtbColt mtbColt, RunnableArgss<String, MtbTCol> onComplete) {
InfoAggiuntiveLUDialog.newInstance(mtbColt, onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
}
} }

View File

@@ -43,6 +43,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportType; import it.integry.integrywmsnative.core.report.ReportType;
@@ -757,6 +758,9 @@ public class SpedizioneViewModel {
this.getPickingList().postValue(pickingList); this.getPickingList().postValue(pickingList);
} else { } else {
MtbColt refMtbColt = matchedItem.getRefMtbColt(); MtbColt refMtbColt = matchedItem.getRefMtbColt();
if (matchedItem.getMtbColts() != null && matchedItem.getMtbColts().size() == 1) {
refMtbColt = matchedItem.getMtbColts().get(0);
}
MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null; MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null;
this.dispatchOrdineRow(matchedItem, refMtbColt, refMtbColr, refMtbColr == null); this.dispatchOrdineRow(matchedItem, refMtbColt, refMtbColr, refMtbColr == null);
} }
@@ -1614,14 +1618,36 @@ public class SpedizioneViewModel {
} else { } else {
if (mDefaultSegnoCol == -1) { if (mDefaultSegnoCol == -1) {
Runnable saveAction = () -> { Runnable saveAction = () -> {
mColliMagazzinoRESTConsumer.updateDataFine( if (SettingsManager.iDB().isFlagAskInfoAggiuntiveSpedizione()) {
mCurrentMtbColt, () -> distribuisciLU((generatedMtbColts) -> { this.mListener.onInfoAggiuntiveRequired(mCurrentMtbColt, (note, mtbTcol) -> {
if (shouldPrint) mCurrentMtbColt.setAnnotazioni(note);
printCollo(generatedMtbColts, () -> this.postCloseOperations(generatedMtbColts)); if (mtbTcol != null) {
else { mCurrentMtbColt.setMtbTCol(mtbTcol);
postCloseOperations(generatedMtbColts); mCurrentMtbColt.setCodTcol(mtbTcol.getCodTcol());
} } else {
}), this::sendError); mCurrentMtbColt.setMtbTCol(null);
mCurrentMtbColt.setCodTcol(null);
}
mColliMagazzinoRESTConsumer.updateDataFine(
mCurrentMtbColt, () -> distribuisciLU((generatedMtbColts) -> {
if (shouldPrint)
printCollo(generatedMtbColts, () -> this.postCloseOperations(generatedMtbColts));
else {
postCloseOperations(generatedMtbColts);
}
}), this::sendError);
});
} else {
mColliMagazzinoRESTConsumer.updateDataFine(
mCurrentMtbColt, () -> distribuisciLU((generatedMtbColts) -> {
if (shouldPrint)
printCollo(generatedMtbColts, () -> this.postCloseOperations(generatedMtbColts));
else {
postCloseOperations(generatedMtbColts);
}
}), this::sendError);
}
}; };
if (mShouldAskPesoLU) { if (mShouldAskPesoLU) {
@@ -1879,6 +1905,7 @@ public class SpedizioneViewModel {
.setCodAnag(ord.getCodAnagOrd()); .setCodAnag(ord.getCodAnagOrd());
return ordV; return ordV;
}).toList(); }).toList();
dto.setPrintList(closedOrders); dto.setPrintList(closedOrders);
printClosedOrders(dto, this::sendOnOrderClosed, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded)); printClosedOrders(dto, this::sendOnOrderClosed, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded));
} }
@@ -1988,6 +2015,7 @@ public class SpedizioneViewModel {
boolean canBatchLotBeChanged, boolean canBatchLotBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete); RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onInfoAggiuntiveRequired(MtbColt currentMtbColt, RunnableArgss<String, MtbTCol> onComplete);
void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete); void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete);

View File

@@ -26,9 +26,11 @@ import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityObservable; import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding; import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel;
@@ -40,20 +42,24 @@ public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAg
private DialogNoteAggiuntiveNuovaUlBinding mBindings; private DialogNoteAggiuntiveNuovaUlBinding mBindings;
private final RunnableArgss<String, MtbTCol> mOnComplete; private final RunnableArgss<String, MtbTCol> mOnComplete;
private MtbColt currentMtbColt;
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null; private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
public ObservableField<String> additionalNotes = new ObservableField<>(); public ObservableField<String> additionalNotes = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>(); public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>(); public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
public static InfoAggiuntiveLUDialog newInstance(@NotNull RunnableArgss<String, MtbTCol> onComplete) { public static InfoAggiuntiveLUDialog newInstance(@NotNull RunnableArgss<String, MtbTCol> onComplete) {
return new InfoAggiuntiveLUDialog(onComplete); return new InfoAggiuntiveLUDialog(null, onComplete);
} }
private InfoAggiuntiveLUDialog(@NotNull RunnableArgss<String, MtbTCol> onComplete) { public static InfoAggiuntiveLUDialog newInstance(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete) {
return new InfoAggiuntiveLUDialog(mtbColt, onComplete);
}
private InfoAggiuntiveLUDialog(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete) {
super(); super();
this.mOnComplete = onComplete; this.mOnComplete = onComplete;
this.currentMtbColt = mtbColt;
} }
@@ -121,9 +127,17 @@ public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAg
this.mViewModel.getTipiCollo().observe(getViewLifecycleOwner(), tipiCollo -> { this.mViewModel.getTipiCollo().observe(getViewLifecycleOwner(), tipiCollo -> {
codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, tipiCollo); codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, tipiCollo);
mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter); mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter);
if (currentMtbColt != null && !UtilityString.isNullOrEmpty(currentMtbColt.getCodTcol()) && UtilityString.isNullOrEmpty(this.selectedMtbTcol.get())) {
MtbTCol tipoPedana = Stream.of(tipiCollo).filter(x -> x.getCodTcol().equalsIgnoreCase(currentMtbColt.getCodTcol())).findFirstOrElse(null);
if (tipoPedana != null) {
this.selectedMtbTcol.set(tipoPedana.getCodTcol() + " - " + tipoPedana.getDescrizione());
}
}
}); });
this.mBindings.filledExposedDropdownCodTcol.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { this.mBindings.filledExposedDropdownCodTcol.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@@ -141,6 +155,9 @@ public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAg
mBindings.buttonConfirm.setOnClickListener(v -> { mBindings.buttonConfirm.setOnClickListener(v -> {
dismiss(); dismiss();
}); });
}
if (this.currentMtbColt != null) {
this.additionalNotes.set(currentMtbColt.getAnnotazioni());
}
}
} }

View File

@@ -11,6 +11,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -147,7 +148,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
this.init(); this.init();
if(mBluetoothDeviceInterface != null) { if (mBluetoothDeviceInterface != null) {
// Listen to bluetooth events // Listen to bluetooth events
mBluetoothDeviceInterface.setListeners(this::onMessageReceived, this::onMessageSent, x -> this.onError(new Exception(x))); mBluetoothDeviceInterface.setListeners(this::onMessageReceived, this::onMessageSent, x -> this.onError(new Exception(x)));
enabledBluetoothDevice.set(true); enabledBluetoothDevice.set(true);
@@ -400,7 +401,11 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
// Toast.makeText(requireActivity(), "Leggo peso uaglio", Toast.LENGTH_SHORT).show(); // Toast.makeText(requireActivity(), "Leggo peso uaglio", Toast.LENGTH_SHORT).show();
// Let's send a message: // Let's send a message:
mBluetoothDeviceInterface.sendMessage("GW\r"); if (mBluetoothDeviceInterface != null) {
mBluetoothDeviceInterface.sendMessage("GW\r");
} else {
Toast.makeText(requireActivity(), "Nessun dispositivo BLUETOOTH configurato nelle impostazioni.", Toast.LENGTH_SHORT).show();
}
} }
private void onMessageSent(String request) { private void onMessageSent(String request) {
@@ -412,8 +417,8 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
String tmpResp = response.replace(".", ""); String tmpResp = response.replace(".", "");
BigDecimal grossWeight = new BigDecimal(tmpResp.substring(2,7)); BigDecimal grossWeight = new BigDecimal(tmpResp.substring(2, 7));
BigDecimal netWeight = new BigDecimal(tmpResp.substring(8,13)); BigDecimal netWeight = new BigDecimal(tmpResp.substring(8, 13));
mViewModel.setPesoNetto(netWeight); mViewModel.setPesoNetto(netWeight);
mViewModel.setPesoLordo(grossWeight); mViewModel.setPesoLordo(grossWeight);
@@ -424,7 +429,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
if (this.mViewModel.validate()) { if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult()); this.mOnComplete.run(this.mViewModel.getResult());
if(mBluetoothDeviceInterface != null) if (mBluetoothDeviceInterface != null)
mBluetoothDeviceInterface.setListeners(null, null, null); mBluetoothDeviceInterface.setListeners(null, null, null);
dismiss(); dismiss();

View File

@@ -31,6 +31,8 @@ public class DialogInputQuantityV2DTO {
private boolean isDataScadMandatory = false; private boolean isDataScadMandatory = false;
private boolean isNotesAllowed = false; private boolean isNotesAllowed = false;
private boolean isNotesMandatory = false; private boolean isNotesMandatory = false;
private boolean isNumCnfEditable = true;
private boolean isFocusOnStart = true;
private boolean canLUBeClosed; private boolean canLUBeClosed;
private boolean saveOnImeDone = false; private boolean saveOnImeDone = false;
@@ -131,6 +133,15 @@ public class DialogInputQuantityV2DTO {
return this; return this;
} }
public boolean isFocusOnStart() {
return isFocusOnStart;
}
public DialogInputQuantityV2DTO setFocusOnStart(boolean focusOnStart) {
isFocusOnStart = focusOnStart;
return this;
}
public BigDecimal getTotalQtaAvailable() { public BigDecimal getTotalQtaAvailable() {
return UtilityBigDecimal.round(totalQtaAvailable); return UtilityBigDecimal.round(totalQtaAvailable);
} }
@@ -239,6 +250,15 @@ public class DialogInputQuantityV2DTO {
return this; return this;
} }
public boolean isNumCnfEditable() {
return isNumCnfEditable;
}
public DialogInputQuantityV2DTO setNumCnfEditable(boolean numCnfEditable) {
isNumCnfEditable = numCnfEditable;
return this;
}
public RunnableArgsWithReturn<DialogInputQuantityV2ViewModel, String> getSuggestPartitaMag() { public RunnableArgsWithReturn<DialogInputQuantityV2ViewModel, String> getSuggestPartitaMag() {
return suggestPartitaMag; return suggestPartitaMag;
} }

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.text.Html; import android.text.Html;
import android.text.InputType; import android.text.InputType;
import android.text.SpannableString; import android.text.SpannableString;
@@ -24,6 +25,7 @@ import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener; import com.pedromassango.doubleclick.DoubleClickListener;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@@ -42,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbUntMis; import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityObservable; import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding; import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@@ -57,6 +60,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private Runnable mOnAbort; private Runnable mOnAbort;
public ObservableField<Integer> currentTextNumCnfToTake = new ObservableField<>(0); public ObservableField<Integer> currentTextNumCnfToTake = new ObservableField<>(0);
public ObservableField<Boolean> flagShowCnfToTakeLabel = new ObservableField<>(true);
public ObservableField<Integer> currentTextNumPezziToTake = new ObservableField<>(0); public ObservableField<Integer> currentTextNumPezziToTake = new ObservableField<>(0);
public ObservableField<String> currentPartitaMag = new ObservableField<>(); public ObservableField<String> currentPartitaMag = new ObservableField<>();
@@ -79,6 +83,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
public ObservableField<Boolean> enabledChangePartitaMag = new ObservableField<>(true); public ObservableField<Boolean> enabledChangePartitaMag = new ObservableField<>(true);
public ObservableField<Boolean> enabledNotes = new ObservableField<>(false); public ObservableField<Boolean> enabledNotes = new ObservableField<>(false);
public ObservableField<Boolean> enabledLUCloseButton = new ObservableField<>(true); public ObservableField<Boolean> enabledLUCloseButton = new ObservableField<>(true);
private Handler mHandler = new Handler();
private Context context; private Context context;
@@ -87,7 +92,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private boolean mObservablesInitated = false; private boolean mObservablesInitated = false;
private int mBarcodeScannerIstanceID; private int mBarcodeScannerIstanceID;
private boolean mFirstStart = true;
private boolean mAbort = true; private boolean mAbort = true;
@@ -168,7 +172,16 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}); });
} }
this.onLoadingEnded(); this.onLoadingEnded();
mBindings.inputNumCnfText.requestFocus(); if (mDialogInputQuantityV2DTO.isFocusOnStart()) {
mHandler.postDelayed(() -> {
if (mDialogInputQuantityV2DTO.isNumCnfEditable()) {
mBindings.inputNumCnfText.requestFocus();
} else {
UtilityFocus.focusTextBox(requireContext(), mBindings.inputQtaTotText);
}
}, 1000);
}
return mBindings.getRoot(); return mBindings.getRoot();
} }
@@ -181,9 +194,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted(); this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
this.onLoadingEnded();
});
}; };
public void save() { public void save() {
@@ -213,15 +224,13 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
// if(!mFirstStart) {
this.init(); this.init();
// mFirstStart = false;
// }
int onNumCnfInputChanged = SettingsManager.iDB().getOnNumCnfInputChanged(); int onNumCnfInputChanged = SettingsManager.iDB().getOnNumCnfInputChanged();
int onQtaTotInputChanged = SettingsManager.iDB().getOnQtaTotInputChanged();
this.mViewModel.setListener(this); this.mViewModel.setListener(this);
this.mViewModel.init(onNumCnfInputChanged); this.mViewModel.init(onNumCnfInputChanged, onQtaTotInputChanged);
} }
private void initViewObservables() { private void initViewObservables() {
@@ -241,11 +250,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
Date minDataScad = calendar.getTime(); Date minDataScad = calendar.getTime();
if (minDataScad.after(value) && value.after(new Date())) { if (minDataScad.after(value) && value.after(new Date())) {
DialogSimpleMessageView DialogSimpleMessageView
.makeWarningDialog(new SpannableString("La data selezionata è precedente alla data di scadenza consigliata per l'articolo scelto ( " + mtbAart.getGgScadPartita() + " giorni) . Continuare?"), null, () -> { .makeWarningDialog(new SpannableString("La data selezionata è precedente alla data di scadenza consigliata per l'articolo scelto ( " + mtbAart.getGgScadPartita() + " giorni) . Continuare?"), null, () -> this.mViewModel.setDataScad(value), () -> this.currentDataScad.set(null))
this.mViewModel.setDataScad(value);
}, () -> {
this.currentDataScad.set(null);
})
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} else { } else {
this.mViewModel.setDataScad(value); this.mViewModel.setDataScad(value);
@@ -326,7 +331,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
if (!this.enabledQtaTot.get()) { if (!this.enabledQtaTot.get()) {
this.enabledQtaTot.set(true); this.enabledQtaTot.set(true);
} else if (!this.enabledNumCnf.get()) { } else if (!this.enabledNumCnf.get()) {
this.enabledNumCnf.set(true); this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable());
} }
} }
}); });
@@ -335,7 +340,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value); toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value);
if (this.mViewModel.mtbAart.get().isFlagQtaCnfFissaBoolean()) { if (this.mViewModel.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.enabledNumCnf.set(!value); this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable() && !value);
} else { } else {
if (value) { if (value) {
if (this.mViewModel.blockedQtaCnf.get()) { if (this.mViewModel.blockedQtaCnf.get()) {
@@ -347,7 +352,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
if (!this.enabledQtaCnf.get()) { if (!this.enabledQtaCnf.get()) {
this.enabledQtaCnf.set(true); this.enabledQtaCnf.set(true);
} else if (!this.enabledNumCnf.get()) { } else if (!this.enabledNumCnf.get()) {
this.enabledNumCnf.set(true); this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable());
} }
} }
} }
@@ -407,9 +412,10 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed()); this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed());
this.currentTaraArticolo.set(this.mViewModel.getMtbAart().getTaraKg()); this.currentTaraArticolo.set(this.mViewModel.getMtbAart().getTaraKg());
if (this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd() != null && !this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().equals(BigDecimal.ZERO) && !(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue() == 0)) { if (this.mDialogInputQuantityV2DTO.getMtbAart().isFlagQtaCnfFissaBoolean() && this.mDialogInputQuantityV2DTO.getTotalQtaOrd() != null && !this.mDialogInputQuantityV2DTO.getTotalQtaOrd().equals(BigDecimal.ZERO) && !(this.mDialogInputQuantityV2DTO.getQtaCnfOrd().compareTo(BigDecimal.ZERO) == 0)) {
this.currentTextNumCnfToTake.set(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue()); int numCnftoTake = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().divide(this.mDialogInputQuantityV2DTO.getQtaCnfOrd(), 0, RoundingMode.DOWN).intValue();
int qtaText = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().intValue() % this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue(); this.currentTextNumCnfToTake.set(numCnftoTake);
int qtaText = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().remainder(this.mDialogInputQuantityV2DTO.getQtaCnfOrd()).intValue();
this.currentTextNumPezziToTake.set(qtaText); this.currentTextNumPezziToTake.set(qtaText);
} else { } else {
this.currentTextNumCnfToTake.set(0); this.currentTextNumCnfToTake.set(0);
@@ -451,6 +457,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
BigDecimal taraTot = this.mViewModel.getNumCnf().multiply(articolo.getTaraKg()); BigDecimal taraTot = this.mViewModel.getNumCnf().multiply(articolo.getTaraKg());
this.currentTaraTot.set(taraTot); this.currentTaraTot.set(taraTot);
this.currentPesoLordo.set(this.mViewModel.getQtaTot().add(taraTot)); this.currentPesoLordo.set(this.mViewModel.getQtaTot().add(taraTot));
this.flagShowCnfToTakeLabel.set(false);
} }
this.mBindings.executePendingBindings(); this.mBindings.executePendingBindings();

View File

@@ -70,6 +70,7 @@ public class DialogInputQuantityV2ViewModel {
private boolean canOverflowOrderQuantity; private boolean canOverflowOrderQuantity;
private boolean canPartitaMagBeChanged; private boolean canPartitaMagBeChanged;
private int onNumCnfInputChanged; private int onNumCnfInputChanged;
private int onQtaTotInputChanged;
private Listener mListener; private Listener mListener;
@@ -80,8 +81,9 @@ public class DialogInputQuantityV2ViewModel {
this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer;
} }
public void init(int onNumCnfInputChanged) { public void init(int onNumCnfInputChanged, int onQtaTotInputChanged) {
this.onNumCnfInputChanged = onNumCnfInputChanged; this.onNumCnfInputChanged = onNumCnfInputChanged;
this.onQtaTotInputChanged = onQtaTotInputChanged;
if (this.initialNumCnf != null && this.initialQtaTot != null && this.initialQtaCnf != null) { if (this.initialNumCnf != null && this.initialQtaTot != null && this.initialQtaCnf != null) {
this.internalNumCnf = this.initialNumCnf; this.internalNumCnf = this.initialNumCnf;
@@ -379,10 +381,22 @@ public class DialogInputQuantityV2ViewModel {
} }
if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalNumCnf != null) switch (onNumCnfInputChanged) {
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf); case UPDATE_QTA_CNF:
else if (!this.blockedNumCnf.get() && this.internalQtaCnf != null) if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalNumCnf != null)
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf); this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
else if (!this.blockedNumCnf.get() && this.internalQtaCnf != null)
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
break;
case UPDATE_QTA_TOT:
if (!this.blockedNumCnf.get() && this.internalQtaCnf != null)
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
else if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalNumCnf != null)
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
break;
}
this.mListener.onDataChanged(); this.mListener.onDataChanged();
} }

View File

@@ -98,7 +98,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
BarcodeManager.enable();
setBarcodeListener(true); setBarcodeListener(true);
} }

View File

@@ -115,7 +115,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID); BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
BarcodeManager.enable(); BarcodeManager.enable();
if(openedMtbColt == null) { if (openedMtbColt == null) {
mOnComplete.run(null, false); mOnComplete.run(null, false);
} }
super.onDismiss(dialog); super.onDismiss(dialog);
@@ -126,7 +126,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
BarcodeManager.enable();
setBarcodeListener(true); setBarcodeListener(true);
} }
@@ -150,11 +150,11 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
@Override @Override
public void onLUVenditaConfirmRequired(RunnableArgs<Boolean> onConfirm) { public void onLUVenditaConfirmRequired(RunnableArgs<Boolean> onConfirm) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(getString(R.string.lu_gest_v_loading_alert)), DialogSimpleMessageView.makeWarningDialog(new SpannableString(getString(R.string.lu_gest_v_loading_alert)),
null, () -> { null, () -> {
onConfirm.run(true); onConfirm.run(true);
}, () -> { }, () -> {
onConfirm.run(false); onConfirm.run(false);
}) })
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorRipple"> <!-- ripple color -->
<!-- for Button -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/full_white"/>
</shape>
</item>
</ripple>

View File

@@ -193,7 +193,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="2dp" android:layout_marginTop="2dp"
android:gravity="center" android:gravity="center"
android:visibility="@{view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0 ? View.VISIBLE : View.GONE}"> android:visibility="@{view.flagShowCnfToTakeLabel &amp;&amp; (view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0 )? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="view"
type="it.integry.integrywmsnative.gest.login.LoginActivity" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimarySurface"
android:gravity="center">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="32dp"
app:cardCornerRadius="16dp">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="56dp"
android:paddingRight="24dp"
android:gravity="center_horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="72dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp"
android:adjustViewBounds="true"
android:src="@drawable/logo_integry_testo" />
<!-- Username Label -->
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:errorText="@{view.usernameError}"
app:hintTextAppearance="@style/hint_text">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="300dp"
android:hint="Username"
android:inputType="textEmailAddress"
app:binding="@{view.username}" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Password Label -->
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:errorText="@{view.passwordError}"
app:hintTextAppearance="@style/hint_text"
app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="300dp"
android:hint="Password"
android:inputType="textPassword"
app:binding="@{view.password}" />
</com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/login_checkbox_custom_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="@{view.customSettingsCheckboxEnabled}"
android:text="@string/action_customize_server_settings"
app:checked="@{view.customSettingsCheckboxChecked}" />
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/login_layout_server_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="12dp"
app:el_duration="400"
app:el_expanded_bind="@{view.customSettingsCheckboxChecked}">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--Host Label-->
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:errorText="@{view.codAziendaError}"
app:hintTextAppearance="@style/hint_text">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_cod_azienda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Codice azienda"
android:inputType="text"
app:binding="@{view.codAzienda}" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_login"
style="@style/Button.PrimaryFull"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"
android:minWidth="170dp"
android:enabled="@{view.loginButtonEnabled}"
android:text="@string/login"
app:onClick="@{() -> view.login()}" />
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>
</androidx.cardview.widget.CardView>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>

File diff suppressed because it is too large Load Diff

View File

@@ -60,7 +60,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="50dp" android:layout_height="50dp"
android:layout_gravity="end" android:layout_gravity="end"
android:background="@drawable/ripple_effect" android:background="?attr/selectableItemBackground"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:src="@drawable/ic_search_black_24dp" android:src="@drawable/ic_search_black_24dp"
android:onClick="@{()->view.manualSearch()}" android:onClick="@{()->view.manualSearch()}"

View File

@@ -10,122 +10,124 @@
</data> </data>
<ScrollView <ScrollView
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:fitsSystemWindows="true"> android:fitsSystemWindows="true">
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="56dp"
android:paddingRight="24dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="72dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp"
android:src="@drawable/logo_integry_testo" />
<!-- Username Label -->
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:errorText="@{view.usernameError}"
app:hintTextAppearance="@style/hint_text"
style="@style/TextInputLayout.OutlinePrimary">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_username"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Username" android:orientation="vertical"
android:inputType="textEmailAddress" android:paddingLeft="24dp"
app:binding="@{view.username}" /> android:paddingTop="56dp"
</com.google.android.material.textfield.TextInputLayout> android:paddingRight="24dp">
<!-- Password Label --> <androidx.appcompat.widget.AppCompatImageView
<com.google.android.material.textfield.TextInputLayout android:layout_width="wrap_content"
android:layout_width="match_parent" android:layout_height="72dp"
android:layout_height="wrap_content" android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp" android:layout_marginBottom="24dp"
android:layout_marginBottom="8dp" android:src="@drawable/logo_integry_testo" />
app:errorText="@{view.passwordError}"
app:hintTextAppearance="@style/hint_text"
app:passwordToggleEnabled="true"
style="@style/TextInputLayout.OutlinePrimary">
<com.google.android.material.textfield.TextInputEditText <!-- Username Label -->
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"
app:binding="@{view.password}" />
</com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/login_checkbox_custom_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="@{view.customSettingsCheckboxEnabled}"
android:text="@string/action_customize_server_settings"
app:checked="@{view.customSettingsCheckboxChecked}" />
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/login_layout_server_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="12dp"
app:el_duration="400"
app:el_expanded_bind="@{view.customSettingsCheckboxChecked}">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--Host Label-->
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
app:errorText="@{view.codAziendaError}" android:layout_marginBottom="8dp"
app:hintTextAppearance="@style/hint_text" app:errorText="@{view.usernameError}"
style="@style/TextInputLayout.OutlinePrimary"> app:hintTextAppearance="@style/hint_text">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_cod_azienda" android:id="@+id/input_username"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Codice azienda" android:hint="Username"
android:inputType="text" android:inputType="textEmailAddress"
app:binding="@{view.codAzienda}" /> app:binding="@{view.username}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
</LinearLayout> <!-- Password Label -->
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:errorText="@{view.passwordError}"
app:hintTextAppearance="@style/hint_text"
app:passwordToggleEnabled="true">
</net.cachapa.expandablelayout.ExpandableLayout> <com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"
app:binding="@{view.password}" />
</com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/login_checkbox_custom_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="@{view.customSettingsCheckboxEnabled}"
android:text="@string/action_customize_server_settings"
app:checked="@{view.customSettingsCheckboxChecked}" />
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/login_layout_server_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="12dp"
app:el_duration="400"
app:el_expanded_bind="@{view.customSettingsCheckboxChecked}">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--Host Label-->
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:errorText="@{view.codAziendaError}"
app:hintTextAppearance="@style/hint_text">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_cod_azienda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Codice azienda"
android:inputType="text"
app:binding="@{view.codAzienda}" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_login" android:id="@+id/btn_login"
style="@style/Button.PrimaryFull" style="@style/Button.PrimaryFull"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:enabled="@{view.loginButtonEnabled}" android:enabled="@{view.loginButtonEnabled}"
android:text="@string/login" android:text="@string/login"
app:onClick="@{() -> view.login()}" /> app:onClick="@{() -> view.login()}" />
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>
</layout> </layout>

View File

@@ -0,0 +1,341 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.R" />
<import type="androidx.core.content.ContextCompat" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<variable
name="viewModel"
type="it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaActivity" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gray_detail_background_round8">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/header_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<it.integry.integrywmsnative.ui.ElevatedToolbar
android:id="@+id/elevated_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize">
</androidx.appcompat.widget.Toolbar>
</it.integry.integrywmsnative.ui.ElevatedToolbar>
<FrameLayout
android:id="@+id/frame_layout_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/white"
android:padding="16dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:text="@{view.lineaLabel}"
tools:text="L2 - Linea 2"
/>
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/add_extra_items_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:background="?attr/selectableItemBackground"
android:onClick="@{()->viewModel.settings()}"
android:src="@drawable/ic_settings_24dp"
android:tint="@color/colorPrimaryGray" />
</RelativeLayout>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_gravity="center_horizontal"
android:src="@{ContextCompat.getDrawable(context, view.isStarted.get() ? R.drawable.ic_baseline_play_arrow_24 : view.isPaused.get() ? R.drawable.ic_baseline_pause_24 : R.drawable.ic_baseline_stop_24)}"
app:tint="@{ContextCompat.getColor(context, view.isStarted.get() ? R.color.green_600 : view.isPaused.get() ? R.color.orange_600 : R.color.red_600)}"
tools:tint="@color/green_600"
tools:src="@drawable/ic_baseline_play_arrow_24" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/peso_lordo_collo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:text="@{view.isStarted.get() ? R.string.in_progress : view.isPaused.get() ? R.string.stand_by : R.string.stopped}"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Small"
app:textColor="@{ContextCompat.getColor(context, view.isStarted.get() ? R.color.green_600 : view.isPaused.get() ? R.color.orange_600 : R.color.red_600)}"
tools:textColor="@color/green_600"
android:textStyle="bold"
tools:text="In lavorazione" />
</androidx.appcompat.widget.LinearLayoutCompat>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:visibility="@{view.isStarted}"
android:layout_marginTop="16dp">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/risorse_impostate"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
tools:text="Risorse assegnate" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
app:text="@{view.hrNum}"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
android:textStyle="bold"
tools:text="25" />
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical"
app:visibility="@{view.flagShowProdInfo}"
android:layout_marginTop="16dp"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/production_in_progress"
tools:text="Lavorazione in corso"
android:textAppearance="@style/AppTheme.NewMaterial.Text.TextBoxGroupTitleDashboard" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/article"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
tools:text="Articolo" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
app:text="@{view.codMart}"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
android:textStyle="bold"
tools:text="150150-09" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/batch_lot"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
tools:text="Lotto" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
app:text="@{view.partitaMag}"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
android:textStyle="bold"
tools:text="20220530" />
</RelativeLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/label_descrizione"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/description"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Descrizione" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:gravity="end"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
android:textStyle="bold"
android:layout_marginStart="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_descrizione"
app:layout_constraintTop_toTopOf="parent"
app:text="@{view.productDescription}"
tools:text="UVA VITTORIA IN CASSE " />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/orders_in_progress"
tools:text="Ordini in lavorazione"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium" />
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.chip.ChipGroup
android:id="@+id/orders_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.google.android.material.chip.ChipGroup>
</HorizontalScrollView>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:padding="16dp"
android:background="@color/white"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/versamento_merce_fragment_title"
android:textAppearance="@style/AppTheme.NewMaterial.Text.TextBoxGroupTitleDashboard" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/scan_art_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:orientation="horizontal"
android:visibility="visible"
app:layout_constraintTop_toBottomOf="@id/header_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_marginEnd="12dp"
android:gravity="center_horizontal"
android:text="@string/scan_lu_to_deposit"
android:textSize="16sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@@ -53,7 +53,7 @@
android:layout_height="50dp" android:layout_height="50dp"
android:layout_gravity="end" android:layout_gravity="end"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:background="@drawable/ripple_effect" android:background="?attr/selectableItemBackground"
android:onClick="@{()->viewModel.manualSearch()}" android:onClick="@{()->viewModel.manualSearch()}"
android:src="@drawable/ic_search_black_24dp" android:src="@drawable/ic_search_black_24dp"
android:tint="@color/colorPrimaryGray" /> android:tint="@color/colorPrimaryGray" />

View File

@@ -61,7 +61,7 @@
android:layout_height="50dp" android:layout_height="50dp"
android:layout_gravity="end" android:layout_gravity="end"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:background="@drawable/ripple_effect" android:background="?attr/selectableItemBackground"
android:src="@drawable/ic_add_24dp" android:src="@drawable/ic_add_24dp"
android:tint="@color/colorPrimaryGray" android:tint="@color/colorPrimaryGray"
app:visibility="@{spedizioneView.addExtraItemsEnabled}" app:visibility="@{spedizioneView.addExtraItemsEnabled}"
@@ -73,7 +73,7 @@
android:layout_height="50dp" android:layout_height="50dp"
android:layout_gravity="end" android:layout_gravity="end"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:background="@drawable/ripple_effect" android:background="?attr/selectableItemBackground"
app:singleClick="@{() -> spedizioneView.startManualSearch()}" app:singleClick="@{() -> spedizioneView.startManualSearch()}"
android:src="@drawable/ic_black_barcode" android:src="@drawable/ic_black_barcode"
android:tint="@color/colorPrimaryGray" android:tint="@color/colorPrimaryGray"

View File

@@ -8,18 +8,19 @@
<import type="it.integry.integrywmsnative.R" /> <import type="it.integry.integrywmsnative.R" />
<import type="androidx.core.content.ContextCompat" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" /> <import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="android.view.View" /> <import type="android.view.View" />
<import type="androidx.core.content.ContextCompat" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" /> <import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" /> <import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<variable <variable
type="it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.BottomSheetLineAction" type="it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs.BottomSheetLineAction"
name="view" /> name="view" />
<variable <variable
@@ -32,7 +33,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="8dp"> android:padding="16dp">
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/descriptionLayout" android:id="@+id/descriptionLayout"
@@ -202,6 +203,30 @@
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:onClick="@{()->view.onRecoverClicked()}"
android:orientation="horizontal"
android:padding="16dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_black_download" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.Material3.BodyLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="@string/prod_recupero_materiale_title_fragment" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -21,7 +21,7 @@
android:paddingEnd="12dp" android:paddingEnd="12dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
android:clickable="true" android:clickable="true"
android:background="@drawable/ripple_effect"> android:background="?attr/selectableItemBackground">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -50,7 +50,7 @@
android:src="@drawable/ic_erase_96" android:src="@drawable/ic_erase_96"
android:backgroundTint="@android:color/transparent" android:backgroundTint="@android:color/transparent"
android:onClick="@{() -> view.resetValues()}" android:onClick="@{() -> view.resetValues()}"
android:tint="@android:color/white"/> android:tint="@android:color/white" />
<androidx.appcompat.widget.AppCompatImageButton <androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/read_weight_form_device" android:id="@+id/read_weight_form_device"
@@ -329,9 +329,8 @@
style="@style/Button.DangerFull" style="@style/Button.DangerFull"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp" android:layout_marginEnd="8dp"
android:layout_marginEnd="4dp" android:layout_weight="0.5"
android:layout_weight="0.4"
android:onClick="@{() -> view.dismiss()}" android:onClick="@{() -> view.dismiss()}"
android:paddingEnd="3dp" android:paddingEnd="3dp"
android:text="@string/abort" android:text="@string/abort"
@@ -345,9 +344,8 @@
style="@style/Button.PrimaryFull" style="@style/Button.PrimaryFull"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp" android:layout_marginStart="8dp"
android:layout_marginEnd="0dp" android:layout_weight="0.5"
android:layout_weight="0.45"
android:onClick="@{() -> view.save()}" android:onClick="@{() -> view.save()}"
android:paddingEnd="3dp" android:paddingEnd="3dp"
android:text="@string/confirm" android:text="@string/confirm"

View File

@@ -203,7 +203,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="2dp" android:layout_marginTop="2dp"
android:gravity="center" android:gravity="center"
android:visibility="@{view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0 ? View.VISIBLE : View.GONE}"> android:visibility="@{view.flagShowCnfToTakeLabel &amp;&amp; (view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0) ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
@@ -624,7 +624,6 @@
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}" android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:enabled="@{view.enabledQtaTot}" android:enabled="@{view.enabledQtaTot}"
android:focusableInTouchMode="false" android:focusableInTouchMode="false"
android:imeOptions="actionDone"
tools:layout_weight="1"> tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@@ -636,6 +635,7 @@
android:hint="@string/tot_qty" android:hint="@string/tot_qty"
android:inputType="number" android:inputType="number"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:imeOptions="actionDone"
app:binding="@{view.currentQtaTot}" /> app:binding="@{view.currentQtaTot}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>

View File

@@ -59,6 +59,7 @@
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/scan_label"
style="@style/AppTheme.NewMaterial.Text" style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@@ -22,10 +22,11 @@
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal"> android:orientation="horizontal"
app:visibility="@{view.isLargeLayout}">
<FrameLayout <FrameLayout
android:id="@+id/order_list_fragment" android:id="@+id/left_side_fragment_container"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
@@ -36,7 +37,7 @@
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<FrameLayout <FrameLayout
android:id="@+id/order_detail_fragment" android:id="@+id/right_side_fragment_container"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
@@ -44,6 +45,15 @@
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<FrameLayout
android:id="@+id/full_width_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:reverse_visibility="@{view.isLargeLayout}"
tools:layout="@layout/fragment_prod_rientro_merce_order_list" />

View File

@@ -23,7 +23,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/ripple_effect" android:background="?attr/selectableItemBackground"
android:clickable="true" android:clickable="true"
android:paddingTop="12dp" android:paddingTop="12dp"
android:paddingEnd="12dp" android:paddingEnd="12dp"
@@ -65,9 +65,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:paddingLeft="6dp" android:paddingLeft="6dp"
android:paddingTop="2dp" android:paddingTop="0dp"
android:paddingRight="6dp" android:paddingRight="6dp"
android:paddingBottom="2dp" android:paddingBottom="0dp"
android:text="@{mtbColt.mtbColr.get(0).numCnf.intValue() + ` col`}" android:text="@{mtbColt.mtbColr.get(0).numCnf.intValue() + ` col`}"
android:textStyle="bold" android:textStyle="bold"
tools:text="45 col" /> tools:text="45 col" />

View File

@@ -1,74 +1,84 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<FrameLayout <FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".gest.prod_rientro_merce.order_list.ProdRientroMerceOrderListFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_list"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/empty_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:alpha="0.3"> tools:context=".gest.prod_rientro_merce.order_list.ProdRientroMerceOrderListFragment">
<androidx.constraintlayout.widget.Guideline <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/guideline_empty_top" android:id="@+id/swiperefresh"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintGuide_percent="0.4" /> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/filter_chips">
<androidx.constraintlayout.widget.Guideline <androidx.recyclerview.widget.RecyclerView
android:id="@+id/guideline_empty_left" android:id="@+id/main_list"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:orientation="vertical" android:scrollbars="vertical"
app:layout_constraintGuide_percent="0.15" /> tools:listitem="@layout/fragment_prod_rientro_merce_order_list__list_group_model" />
<androidx.constraintlayout.widget.Guideline </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<LinearLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp" android:id="@+id/empty_view"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:orientation="vertical" android:layout_height="match_parent"
android:gravity="center_horizontal" android:alpha="0.3">
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<androidx.appcompat.widget.AppCompatImageView <androidx.constraintlayout.widget.Guideline
android:layout_width="72dp" android:id="@+id/guideline_empty_top"
android:layout_height="wrap_content"
android:src="@drawable/ic_playlist_add_check_24dp"
android:adjustViewBounds="true"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.4" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:textColor="@android:color/black" android:orientation="vertical"
android:textSize="18sp" app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
android:text="@string/no_orders_found_message"/> app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
</LinearLayout> app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
</androidx.constraintlayout.widget.ConstraintLayout> <androidx.appcompat.widget.AppCompatImageView
android:layout_width="72dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/ic_playlist_add_check_24dp" />
</FrameLayout> <androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/no_orders_found_message"
android:textColor="@android:color/black"
android:textSize="18sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
</layout> </layout>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"> <layout>
<data> <data>
@@ -16,110 +16,98 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/ripple_effect" android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="2dp" android:paddingVertical="8dp"
android:paddingEnd="4dp"> android:paddingStart="4dp"
android:paddingEnd="12dp">
<RelativeLayout
android:id="@+id/ordine_lavorazione_main_list_group_item_container_root" <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ordine_state_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_margin="8dp"
android:background="@android:color/transparent"
android:src="@drawable/ic_play_circle_filled_24dp"
android:tint="@color/blue_700" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_toEndOf="@id/ordine_state_icon"
android:background="@color/full_white" android:orientation="vertical">
android:gravity="center_vertical"
android:paddingStart="2dp"
android:paddingTop="8dp"
android:paddingEnd="8dp"
android:paddingBottom="8dp">
<RelativeLayout
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ordine_state_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_margin="8dp"
android:background="@android:color/transparent"
android:src="@drawable/ic_play_circle_filled_24dp"
android:tint="@color/blue_700" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toEndOf="@id/ordine_state_icon" android:gravity="center_vertical">
android:orientation="vertical">
<RelativeLayout <androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent" android:id="@+id/pre_first_row"
android:layout_height="wrap_content"> style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/pre_first_row"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
tools:text="Cons 07 nov 2018" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical"> android:layout_alignParentEnd="true"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:textColor="#000"
tools:text="Cons 07 nov 2018" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/right_descrizione" android:id="@+id/descrizione"
style="@style/AppTheme.NewMaterial.Text.Small" style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentStart="true"
android:ellipsize="end" android:layout_toStartOf="@id/descrizione"
android:gravity="center_vertical" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:textColor="#000" android:textColor="#000"
tools:text="EUROGROUP ITALIA SRL" /> tools:text="N° 39" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/descrizione" android:id="@+id/right_descrizione"
style="@style/AppTheme.NewMaterial.Text.Medium" style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_marginTop="8dp"
android:layout_toStartOf="@id/descrizione" tools:text="CLIENTE (COMMESSA)" />
android:ellipsize="end"
android:maxLines="1" <androidx.appcompat.widget.AppCompatTextView
android:textColor="#000" android:id="@+id/sub_descrizione"
tools:text="N° 39" /> style="@style/AppTheme.NewMaterial.Text.Small"
</RelativeLayout> android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
tools:text="descrizione estesa articolo" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/right_sub_descrizione"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_alignParentEnd="true"
tools:text="2 UL x 10 COL" />
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/order_progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:layout_marginTop="4dp"
android:max="100"
android:progress="0" />
<RelativeLayout </androidx.appcompat.widget.LinearLayoutCompat>
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/right_sub_descrizione"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
tools:text="Cod Jcom" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sub_descrizione"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/right_sub_descrizione"
android:paddingEnd="6dp"
tools:text="TextView" />
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -1,8 +1,7 @@
<layout xmlns:app="http://schemas.android.com/apk/res-auto"> <layout xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -24,15 +23,15 @@
<TextView <TextView
android:id="@+id/group_title" android:id="@+id/group_title"
style="@style/AppTheme.NewMaterial.Text.ListDivider"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/AppTheme.NewMaterial.Text.ListDivider"
android:textAllCaps="true"
android:ellipsize="end" android:ellipsize="end"
android:singleLine="true" android:singleLine="true"
android:textStyle="bold" android:textAllCaps="true"
android:textColor="@android:color/black" android:textColor="@android:color/black"
tools:text="NOME GRUPPO"/> android:textStyle="bold"
tools:text="NOME GRUPPO" />
</RelativeLayout> </RelativeLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>

View File

@@ -79,8 +79,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent">
app:layout_constraintTop_toBottomOf="@id/title_layout">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
@@ -89,6 +88,7 @@
android:layout_height="0dp" android:layout_height="0dp"
android:focusableInTouchMode="true" android:focusableInTouchMode="true"
android:orientation="vertical" android:orientation="vertical"
tools:listitem="@layout/layout_filter_agente__list_item"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_max="270dp" app:layout_constraintHeight_max="270dp"

View File

@@ -26,7 +26,7 @@
android:paddingEnd="12dp" android:paddingEnd="12dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
android:clickable="true" android:clickable="true"
android:background="@drawable/ripple_effect"> android:background="?attr/selectableItemBackground">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -4,7 +4,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/ripple_effect" android:background="?attr/selectableItemBackground"
android:clickable="true" android:clickable="true"
android:focusable="true"> android:focusable="true">

View File

@@ -39,6 +39,7 @@
<string name="picking_not_available">Picking non disponibile</string> <string name="picking_not_available">Picking non disponibile</string>
<string name="scan_item">Scansiona il codice a barre di un <b>articolo</b></string> <string name="scan_item">Scansiona il codice a barre di un <b>articolo</b></string>
<string name="please_open_lu">Prima di procedere apri una <b>nuova UL</b></string> <string name="please_open_lu">Prima di procedere apri una <b>nuova UL</b></string>
<string name="scan_lu_to_deposit">Scansiona il codice a barre di una <b>UL</b> per versarla</string>
<string name="extra_item">Articolo extra</string> <string name="extra_item">Articolo extra</string>
<string name="info">Info</string> <string name="info">Info</string>
<string name="lu_info">Info UL</string> <string name="lu_info">Info UL</string>
@@ -396,12 +397,16 @@
<string name="in_progress">In lavorazione</string> <string name="in_progress">In lavorazione</string>
<string name="stand_by">In pausa</string> <string name="stand_by">In pausa</string>
<string name="stopped">Ferma</string> <string name="stopped">Ferma</string>
<string name="risorse_impostate">Risorse allocate</string> <string name="risorse_impostate">Risorse assegnate</string>
<string name="orders_in_progress">Ordini in lavorazione</string> <string name="orders_in_progress">Ordini in lavorazione</string>
<string name="production_in_progress">Lavorazione in corso</string>
<string name="ridistribuisci_risorse">Assegna risorse</string> <string name="ridistribuisci_risorse">Assegna risorse</string>
<string name="avvia_nuova_produzione">Avvia nuova produzione</string> <string name="avvia_nuova_produzione">Avvia nuova produzione</string>
<string name="arresta_produzione">Arresta produzione</string> <string name="arresta_produzione">Arresta produzione</string>
<string name="inizio_produzione">Inizio produzione</string> <string name="inizio_produzione">Inizio produzione</string>
<string name="ultima_produzione">Ultima produzione</string> <string name="ultima_produzione">Ultima produzione</string>
<string name="nessuna_linea_disponibile">Nessuna linea disponibile</string> <string name="nessuna_linea_disponibile">Nessuna linea disponibile</string>
<string name="line_details">Dettaglio linea</string>
<string name="materiali_versati">Materiali versati</string>
<string name="scan_lu_to_recover">Scansiona il codice a barre della <b>UL</b> da recuperare</string>
</resources> </resources>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="large_layout" type="bool">true</item>
</resources>

View File

@@ -118,6 +118,7 @@
<string name="scan_item">Please scan an <b>item</b> barcode</string> <string name="scan_item">Please scan an <b>item</b> barcode</string>
<string name="extra_item">Extra item</string> <string name="extra_item">Extra item</string>
<string name="piece">Piece</string> <string name="piece">Piece</string>
<string name="scan_lu_to_deposit">Please scan a <b>LU barcode</b> to deposit</string>
<string name="password_error_length">between 3 and 30 alphanumeric characters</string> <string name="password_error_length">between 3 and 30 alphanumeric characters</string>
<string name="username_error_not_valid">enter a valid username</string> <string name="username_error_not_valid">enter a valid username</string>
@@ -404,10 +405,14 @@
<string name="stopped">Stopped</string> <string name="stopped">Stopped</string>
<string name="risorse_impostate">Resources set</string> <string name="risorse_impostate">Resources set</string>
<string name="orders_in_progress">Orders in progress</string> <string name="orders_in_progress">Orders in progress</string>
<string name="production_in_progress">Production in progress</string>
<string name="ridistribuisci_risorse">Set resources</string> <string name="ridistribuisci_risorse">Set resources</string>
<string name="avvia_nuova_produzione">Start production</string> <string name="avvia_nuova_produzione">Start production</string>
<string name="arresta_produzione">Stop production</string> <string name="arresta_produzione">Stop production</string>
<string name="inizio_produzione">Production start</string> <string name="inizio_produzione">Production start</string>
<string name="ultima_produzione">Last production</string> <string name="ultima_produzione">Last production</string>
<string name="nessuna_linea_disponibile">No production line available</string> <string name="nessuna_linea_disponibile">No production line available</string>
<string name="line_details">Line details</string>
<string name="materiali_versati">Deposited products</string>
<string name="scan_lu_to_recover">Please scan the <b>LU barcode</b> to recover</string>
</resources> </resources>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="large_layout" type="bool">false</item>
</resources>

View File

@@ -10,7 +10,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.1.3' classpath 'com.android.tools.build:gradle:7.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.10' classpath 'com.google.gms:google-services:4.3.10'

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip