Finish v1.13.17(163)
This commit is contained in:
commit
7f448bbbb3
@ -7,8 +7,8 @@ apply plugin: 'com.google.gms.google-services'
|
||||
|
||||
android {
|
||||
|
||||
def appVersionCode = 162
|
||||
def appVersionName = '1.13.16'
|
||||
def appVersionCode = 163
|
||||
def appVersionName = '1.13.17'
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
@ -91,27 +91,27 @@ dependencies {
|
||||
//Firebase
|
||||
|
||||
// Import the Firebase BoM
|
||||
implementation platform('com.google.firebase:firebase-bom:25.12.0')
|
||||
implementation platform('com.google.firebase:firebase-bom:26.0.0')
|
||||
implementation 'com.google.firebase:firebase-analytics'
|
||||
implementation 'com.google.firebase:firebase-core'
|
||||
implementation 'com.google.firebase:firebase-crash'
|
||||
implementation 'com.google.firebase:firebase-perf'
|
||||
implementation 'com.google.firebase:firebase-crashlytics'
|
||||
implementation 'com.google.firebase:firebase-analytics'
|
||||
implementation 'com.google.android.gms:play-services-basement:17.4.0'
|
||||
implementation 'com.google.firebase:firebase-perf'
|
||||
implementation 'com.google.android.gms:play-services-basement:17.5.0'
|
||||
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'com.google.android.material:material:1.3.0-alpha03'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.3'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||
implementation 'androidx.preference:preference:1.1.1'
|
||||
implementation 'androidx.preference:preference-ktx:1.1.1'
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||
implementation 'com.annimon:stream:1.2.1'
|
||||
implementation 'androidx.lifecycle:lifecycle-runtime:2.2.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
|
||||
implementation 'org.apache.commons:commons-text:1.9'
|
||||
|
||||
@ -14,14 +14,6 @@
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "it.integry.integrywmsnative",
|
||||
"certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "963231271247-59qdc1vobbnjfp135ce4hv12c53s9hse.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
@ -30,6 +22,14 @@
|
||||
"certificate_hash": "3b6d97a981f446f5011049d781aeb9960f9352af"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "it.integry.integrywmsnative",
|
||||
"certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
@ -41,20 +41,13 @@
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"analytics_service": {
|
||||
"status": 1
|
||||
},
|
||||
"appinvite_service": {
|
||||
"status": 2,
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
"ads_service": {
|
||||
"status": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,10 +25,14 @@
|
||||
android:windowSoftInputMode="adjustNothing" />
|
||||
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
|
||||
<activity
|
||||
android:name=".gest.picking_resi.PickingResiActivity"
|
||||
android:name=".gest.picking_resi_OLD.PickingResiActivity"
|
||||
android:label="@string/activity_ultime_consegne_title"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Light" />
|
||||
<activity
|
||||
android:name=".gest.picking_resi.PickingResiActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Light" />
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
|
||||
@ -8,6 +8,8 @@ import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePicking
|
||||
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule;
|
||||
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoComponent;
|
||||
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
|
||||
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdineAcquistoGrigliaComponent;
|
||||
@ -16,6 +18,8 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComp
|
||||
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
|
||||
import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
|
||||
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
|
||||
|
||||
// Definition of the Application graph
|
||||
@Singleton
|
||||
@ -28,7 +32,9 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
|
||||
PickingLiberoModule.class,
|
||||
RettificaGiacenzeModule.class,
|
||||
SpedizioneModule.class,
|
||||
AccettazionePickingModule.class})
|
||||
AccettazionePickingModule.class,
|
||||
PickingResiModule.class,
|
||||
DialogInputQuantityV2Module.class})
|
||||
public interface MainApplicationComponent {
|
||||
|
||||
MainActivityComponent.Factory mainActivityComponent();
|
||||
@ -38,5 +44,7 @@ public interface MainApplicationComponent {
|
||||
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
|
||||
SpedizioneComponent.Factory spedizioneComponent();
|
||||
AccettazionePickingComponent.Factory accettazionePickingComponent();
|
||||
PickingResiComponent.Factory pickingResiComponent();
|
||||
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
|
||||
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ import androidx.room.ForeignKey;
|
||||
import androidx.room.Index;
|
||||
import androidx.room.PrimaryKey;
|
||||
|
||||
import java.util.Date;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
|
||||
@Entity(
|
||||
tableName = "articoli_griglia",
|
||||
@ -159,7 +159,7 @@ public class ArticoloGriglia {
|
||||
articolo.setQtaCnf(this.getQtaCnf());
|
||||
articolo.setUntMis(this.getUntMis());
|
||||
articolo.setDescrizione(this.getDescrizione());
|
||||
articolo.setDataIns(new Date());
|
||||
articolo.setDataIns(UtilityDate.getDateInstance());
|
||||
articolo.setQtaOrd(0);
|
||||
|
||||
return articolo;
|
||||
|
||||
@ -1,10 +1,15 @@
|
||||
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
|
||||
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.MtbColt;
|
||||
|
||||
public interface ILUBaseOperationsListener {
|
||||
|
||||
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
|
||||
|
||||
void onLUOpened(MtbColt mtbColt);
|
||||
|
||||
void onLUClosed();
|
||||
|
||||
void onRowSaved();
|
||||
}
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
|
||||
|
||||
public interface ILoadingListener {
|
||||
|
||||
void onLoadingStarted();
|
||||
|
||||
void onLoadingEnded();
|
||||
|
||||
}
|
||||
|
||||
@ -141,6 +141,8 @@ public class DtbDocr {
|
||||
|
||||
private MtbAart mtbAart;
|
||||
|
||||
private String dataScadPartitaMag;
|
||||
|
||||
public String getCodAnag() {
|
||||
return codAnag;
|
||||
}
|
||||
@ -739,6 +741,19 @@ public class DtbDocr {
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDataScadPartitaMag() {
|
||||
return dataScadPartitaMag;
|
||||
}
|
||||
|
||||
public Date getDataScadPartitaMagD() {
|
||||
return UtilityDate.recognizeDateWithExceptionHandler(getDataScadPartitaMag());
|
||||
}
|
||||
|
||||
public DtbDocr setDataScadPartitaMag(String dataScadPartitaMag) {
|
||||
this.dataScadPartitaMag = dataScadPartitaMag;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MtbAart getMtbAart() {
|
||||
return mtbAart;
|
||||
}
|
||||
|
||||
@ -6,7 +6,6 @@ import com.annimon.stream.Stream;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
@ -18,6 +17,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.DtbOrdt;
|
||||
import it.integry.integrywmsnative.core.rest.RESTBuilder;
|
||||
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityLogger;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityThread;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.ArtDTO;
|
||||
@ -84,7 +84,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
|
||||
}
|
||||
|
||||
ordineDTO.setChiaveGriglia(griglia.getCodAlis());
|
||||
ordineDTO.setDataConsD(new Date());
|
||||
ordineDTO.setDataConsD(UtilityDate.getDateInstance());
|
||||
ordineDTO.setArtRows(artRows);
|
||||
saveDTO.setGestione("O");
|
||||
saveDTO.setOrdineDTO(ordineDTO);
|
||||
@ -101,7 +101,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
|
||||
if (dtoList.size() > 0){
|
||||
DtbOrdt dto = dtoList.get(0);
|
||||
ordine.setTransmitted(true);
|
||||
ordine.setTransmissionDate(new Date());
|
||||
ordine.setTransmissionDate(UtilityDate.getDateInstance());
|
||||
ordine.setGestione(dto.getGestione());
|
||||
ordine.setDataOrdS(dto.getDataOrd());
|
||||
ordine.setCodMdep(dto.getCodMdep());
|
||||
|
||||
@ -3,6 +3,7 @@ package it.integry.integrywmsnative.core.rest.model;
|
||||
public class Ean13PesoModel {
|
||||
|
||||
private String precode;
|
||||
//TODO: Change to bigdecimal
|
||||
private Float peso;
|
||||
|
||||
public String getPrecode() {
|
||||
|
||||
@ -26,6 +26,14 @@ public class UtilityBigDecimal {
|
||||
return input.compareTo(toCompareWith) < 0;
|
||||
}
|
||||
|
||||
public static boolean equalsOrLowerThan(BigDecimal input, BigDecimal toCompareWith) {
|
||||
return equalsTo(input, toCompareWith) || lowerThan(input, toCompareWith);
|
||||
}
|
||||
|
||||
public static boolean equalsOrGreaterThan(BigDecimal input, BigDecimal toCompareWith) {
|
||||
return equalsTo(input, toCompareWith) || greaterThan(input, toCompareWith);
|
||||
}
|
||||
|
||||
public static BigDecimal getLowerBetween(BigDecimal input1, BigDecimal input2) {
|
||||
if(input1 == null) return input2;
|
||||
if(input2 == null) return input1;
|
||||
|
||||
@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityResources;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityToast;
|
||||
import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding;
|
||||
@ -246,7 +247,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
|
||||
|
||||
accettazioneListModel.setQtaEvasa(numCnfEvasa);
|
||||
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
|
||||
accettazioneListModel.setUntMis("col");
|
||||
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
} else {
|
||||
BigDecimal qtaEvasa = BigDecimal.ZERO;
|
||||
|
||||
@ -299,7 +300,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
|
||||
|
||||
accettazioneListModel.setQtaEvasa(numCnfEvasa);
|
||||
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
|
||||
accettazioneListModel.setUntMis("col");
|
||||
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
} else {
|
||||
BigDecimal qtaEvasa = BigDecimal.ZERO;
|
||||
|
||||
@ -353,7 +354,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
|
||||
|
||||
accettazioneListModel.setQtaEvasa(numCnfEvasa);
|
||||
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
|
||||
accettazioneListModel.setUntMis("col");
|
||||
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
} else {
|
||||
BigDecimal qtaEvasa = BigDecimal.ZERO;
|
||||
|
||||
@ -411,7 +412,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
|
||||
.anyMatch(x -> !x.isHidden());
|
||||
}
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
this.openProgress();
|
||||
|
||||
@ -8,7 +8,9 @@ import com.annimon.stream.Stream;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -493,10 +495,38 @@ public class AccettazionePickingViewModel {
|
||||
}
|
||||
}
|
||||
|
||||
BigDecimal initialNumCnf;
|
||||
BigDecimal initialQtaCnf;
|
||||
BigDecimal initialQtaTot;
|
||||
|
||||
if (qtaColDaPrelevare != null) {
|
||||
initialNumCnf = numCnfDaPrelevare;
|
||||
initialQtaCnf = qtaCnfDaPrelevare;
|
||||
initialQtaTot = qtaColDaPrelevare;
|
||||
|
||||
} else {
|
||||
initialNumCnf = totalNumCnfOrd;
|
||||
initialQtaCnf = qtaCnfOrd;
|
||||
initialQtaTot = totalQtaOrd;
|
||||
}
|
||||
|
||||
if(UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) {
|
||||
initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana();
|
||||
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
|
||||
}
|
||||
|
||||
if(dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
|
||||
dataScad = UtilityDate.getDateInstance();
|
||||
Calendar c = new GregorianCalendar();
|
||||
c.setTime(dataScad);
|
||||
c.add(Calendar.DATE, pickingObjectDTO.getMtbAart().getGgScadPartita());
|
||||
dataScad = c.getTime();
|
||||
}
|
||||
|
||||
this.sendOnItemDispatched(
|
||||
pickingObjectDTO,
|
||||
pickingObjectDTO.getMtbAart(),
|
||||
null, null, null,
|
||||
initialNumCnf, initialQtaCnf, initialQtaTot,
|
||||
qtaDaEvadere,
|
||||
numCnfDaEvadere,
|
||||
qtaCnfDaEvadere,
|
||||
@ -904,14 +934,10 @@ public class AccettazionePickingViewModel {
|
||||
boolean canOverflowQuantity,
|
||||
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
|
||||
|
||||
void onRowSaved();
|
||||
|
||||
void onFilterApplied(String newValue);
|
||||
|
||||
void onFilterRemoved();
|
||||
|
||||
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -191,7 +191,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
|
||||
mAdapter = null;
|
||||
}
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
this.openProgress();
|
||||
@ -258,6 +258,8 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
|
||||
|
||||
@Override
|
||||
public void onLUOpened(MtbColt mtbColt) {
|
||||
mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo()));
|
||||
|
||||
initAdapter();
|
||||
|
||||
thereIsAnOpenedUL.set(true);
|
||||
@ -275,6 +277,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
|
||||
|
||||
@Override
|
||||
public void onLUClosed() {
|
||||
mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString());
|
||||
destroyAdapter();
|
||||
|
||||
thereIsAnyRowInUL.set(false);
|
||||
|
||||
@ -7,7 +7,6 @@ import dagger.Provides;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
|
||||
|
||||
@Module(subcomponents = {PickingLiberoComponent.class})
|
||||
public class PickingLiberoModule {
|
||||
@ -16,8 +15,7 @@ public class PickingLiberoModule {
|
||||
@Singleton
|
||||
PickingLiberoViewModel providesPickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer,
|
||||
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
|
||||
PrinterRESTConsumer printerRESTConsumer,
|
||||
BarcodeRESTConsumer barcodeRESTConsumer) {
|
||||
return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, barcodeRESTConsumer);
|
||||
return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,9 @@ import com.annimon.stream.Stream;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@ -24,11 +26,11 @@ 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.VtbDest;
|
||||
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
|
||||
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
|
||||
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
@ -37,7 +39,6 @@ import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
|
||||
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
|
||||
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
|
||||
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
|
||||
|
||||
@ -48,7 +49,6 @@ public class PickingLiberoViewModel {
|
||||
|
||||
private final ArticoloRESTConsumer mArticoloRESTConsumer;
|
||||
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
|
||||
private final PrinterRESTConsumer mPrinterRESTConsumer;
|
||||
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
|
||||
|
||||
|
||||
@ -62,11 +62,9 @@ public class PickingLiberoViewModel {
|
||||
@Inject
|
||||
public PickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer,
|
||||
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
|
||||
PrinterRESTConsumer printerRESTConsumer,
|
||||
BarcodeRESTConsumer barcodeRESTConsumer) {
|
||||
this.mArticoloRESTConsumer = articoloRESTConsumer;
|
||||
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
|
||||
this.mPrinterRESTConsumer = printerRESTConsumer;
|
||||
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
|
||||
}
|
||||
|
||||
@ -815,7 +813,6 @@ public class PickingLiberoViewModel {
|
||||
}
|
||||
|
||||
public interface Listener extends ILoadingListener, ILUBaseOperationsListener {
|
||||
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
|
||||
|
||||
void onError(Exception ex);
|
||||
|
||||
@ -840,8 +837,6 @@ public class PickingLiberoViewModel {
|
||||
boolean canPartitaMagBeChanged,
|
||||
boolean canLUBeClosed,
|
||||
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
|
||||
|
||||
void onRowSaved();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,109 +1,135 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.text.SpannableString;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.databinding.ObservableArrayList;
|
||||
import androidx.databinding.ObservableField;
|
||||
import androidx.databinding.ObservableList;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.SpannableString;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.tfb.fbtoast.FBToast;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
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.expansion.BaseActivity;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
|
||||
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.expansion.BaseActivity;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.CommonModelConsts;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
|
||||
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.report.ReportManager;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityNumber;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityResources;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityToast;
|
||||
import it.integry.integrywmsnative.databinding.ActivityPickingResiBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
|
||||
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListAdapter;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
|
||||
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListModel;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
|
||||
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
|
||||
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
|
||||
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
|
||||
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
|
||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
|
||||
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
|
||||
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
|
||||
|
||||
public class PickingResiActivity extends BaseActivity implements IOnColloClosedCallback {
|
||||
public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener {
|
||||
|
||||
|
||||
private ActivityPickingResiBinding mBindings;
|
||||
|
||||
@Inject
|
||||
PickingResiViewModel mViewmodel;
|
||||
|
||||
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
|
||||
|
||||
private ObservableArrayList<PickingResiListModel> mPickingResiMutableData = new ObservableArrayList<>();
|
||||
|
||||
public BindableBoolean noLUPresent = new BindableBoolean(true);
|
||||
public BindableBoolean noItemsToPick = new BindableBoolean(false);
|
||||
public BindableBoolean bottomSheetEnabled = new BindableBoolean(false);
|
||||
|
||||
private String mTitle;
|
||||
private List<DocumentoResoDTO> mDocumentiResiList;
|
||||
public ObservableList<WithdrawableDtbDocr> mDtbDocrList;
|
||||
private final List<MtbColt> mColliRegistrati = new ArrayList<>();
|
||||
|
||||
private ActivityPickingResiBinding mBinding;
|
||||
private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
|
||||
|
||||
public ObservableField<MtbColt> currentMtbColt = new ObservableField<>();
|
||||
|
||||
private PickingResiListAdapter mAdapter;
|
||||
|
||||
private int barcodeScannerIstanceID = -1;
|
||||
|
||||
private String mActivityTitle;
|
||||
private String mDefaultGestioneOfUL;
|
||||
private String mDefaultCodAnagOfUL;
|
||||
private Integer mDefaultSegnoOfUL;
|
||||
|
||||
private boolean mShouldCloseActivity;
|
||||
|
||||
public static void startActivity(Context context, String activityTitle, List<DocumentoResoDTO> documentoResoDTOList, Integer segno) {
|
||||
String consegneCacheKey = DataCache.addItem(documentoResoDTOList);
|
||||
|
||||
Intent intent = new Intent(context, PickingResiActivity.class);
|
||||
|
||||
intent.putExtra("activity_title", activityTitle);
|
||||
|
||||
String consegneCacheKey = DataCache.addItem(documentoResoDTOList);
|
||||
intent.putExtra("key", consegneCacheKey);
|
||||
|
||||
intent.putExtra("segno", segno);
|
||||
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi);
|
||||
mBinding.setViewmodel(this);
|
||||
|
||||
this.mDtbDocrList = new ObservableArrayList<>();
|
||||
|
||||
mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, this.mBinding.bottomSheetInclude);
|
||||
mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this);
|
||||
mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::onItemEdited);
|
||||
mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::onItemDeleted);
|
||||
|
||||
|
||||
mTitle = getIntent().getStringExtra("activity_title");
|
||||
mDocumentiResiList = DataCache.retrieveItem(getIntent().getStringExtra("key"));
|
||||
mDefaultSegnoOfUL = getIntent().getIntExtra("segno", +1);
|
||||
int defaultSegnoLU = getIntent().getIntExtra("segno", +1);
|
||||
|
||||
mActivityTitle = getIntent().getStringExtra("activity_title");
|
||||
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi);
|
||||
|
||||
this.initView();
|
||||
MainApplication.appComponent
|
||||
.pickingResiComponent()
|
||||
.create()
|
||||
.inject(this);
|
||||
|
||||
mViewmodel.setListener(this);
|
||||
|
||||
setSupportActionBar(mBindings.toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
getSupportActionBar().setTitle(mTitle);
|
||||
|
||||
mBindings.setLifecycleOwner(this);
|
||||
mBindings.setPickingResiView(this);
|
||||
|
||||
mBindings.bottomSheetLuContent.init(mBindings.bottomSheetLuContent, null);
|
||||
mBottomSheetFragmentLUContentViewModel = mBindings.bottomSheetLuContent.getViewModelInstance();
|
||||
mBindings.bottomSheetLuContent.setListener(this);
|
||||
mBottomSheetFragmentLUContentViewModel.setListener(this);
|
||||
|
||||
|
||||
this.initVars();
|
||||
this.initBarcodeReader();
|
||||
this.initRecyclerView();
|
||||
|
||||
|
||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||
|
||||
this.mViewmodel.init(mDocumentiResiList, defaultSegnoLU, codMdep);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -114,435 +140,255 @@ public class PickingResiActivity extends BaseActivity implements IOnColloClosedC
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if(mArticoliInColloBottomSheetViewModel.isExpanded()){
|
||||
mArticoliInColloBottomSheetViewModel.collapse();
|
||||
}
|
||||
else if(thereIsAnOpenedUL()) {
|
||||
mArticoliInColloBottomSheetViewModel.closeCurrentUL(() -> {
|
||||
BarcodeManager.removeCallback(barcodeScannerIstanceID);
|
||||
super.onBackPressed();
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
if (this.mBindings.bottomSheetLuContent.isExpanded()) {
|
||||
this.mBindings.bottomSheetLuContent.collapse();
|
||||
} else if (!noLUPresent.get()) {
|
||||
this.mShouldCloseActivity = true;
|
||||
BarcodeManager.removeCallback(barcodeScannerIstanceID);
|
||||
this.mViewmodel.closeLU(true);
|
||||
} else {
|
||||
BarcodeManager.removeCallback(barcodeScannerIstanceID);
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
|
||||
private void initVars() {
|
||||
this.noLUPresent.addOnPropertyChangedCallback(() -> {
|
||||
this.bottomSheetEnabled.set(!this.noLUPresent.get());
|
||||
});
|
||||
}
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(this::onScanSuccessful)
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
|
||||
}
|
||||
|
||||
private void initRecyclerView() {
|
||||
this.mBindings.elevatedToolbar.setRecyclerView(this.mBindings.mainList);
|
||||
|
||||
setSupportActionBar(this.mBinding.toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
this.mViewmodel.getPickingList().observe(this, updatedData -> {
|
||||
this.mPickingResiMutableData.clear();
|
||||
this.mPickingResiMutableData.addAll(convertDataModelToListModel(updatedData));
|
||||
this.noItemsToPick.set(updatedData.isEmpty());
|
||||
});
|
||||
|
||||
getSupportActionBar().setTitle(mActivityTitle);
|
||||
PickingResiListAdapter pickingResiListAdapter = new PickingResiListAdapter(this, mPickingResiMutableData);
|
||||
this.mBindings.mainList.setAdapter(pickingResiListAdapter);
|
||||
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this));
|
||||
|
||||
this.mBinding.elevatedToolbar.setRecyclerView(this.mBinding.mainList);
|
||||
|
||||
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(this);
|
||||
UltimeConsegneClienteRESTConsumer.loadDocRowFromConsegna(mDocumentiResiList, dtbDocrToPick -> {
|
||||
progressDialog.dismiss();
|
||||
this.mDtbDocrList.addAll(dtbDocrToPick);
|
||||
|
||||
try {
|
||||
this.initDatiPicking();
|
||||
} catch (Exception ex) {
|
||||
DialogSimpleMessageHelper.showSimpleErrorDialog(this, ex.getMessage());
|
||||
pickingResiListAdapter.setOnItemClicked(clickedItem -> {
|
||||
if (!noLUPresent.get()) {
|
||||
this.mViewmodel.dispatchOrdineRow(clickedItem);
|
||||
}
|
||||
|
||||
this.initList();
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, progressDialog);
|
||||
});
|
||||
}
|
||||
|
||||
private void initList() {
|
||||
|
||||
mAdapter = new PickingResiListAdapter(this, this.mDtbDocrList);
|
||||
mAdapter.setOnItemClicked(this::onOrdineRowDispatch);
|
||||
private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) {
|
||||
List<PickingResiListModel> pickingResiListModels = new ArrayList<>();
|
||||
|
||||
this.mBinding.mainList.setLayoutManager(new LinearLayoutManager(this));
|
||||
this.mBinding.mainList.setAdapter(mAdapter);
|
||||
Stream.of(dataList)
|
||||
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
|
||||
.forEach(x -> {
|
||||
|
||||
PickingResiListModel pickingResiListModel = new PickingResiListModel();
|
||||
|
||||
pickingResiListModel.setGroupTitle(x.getCodDtip() + " - N° " + x.getNumDoc() + " del " + UtilityDate.formatDate(x.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN));
|
||||
pickingResiListModel.setBadge1(x.getCodMart());
|
||||
pickingResiListModel.setDescrizione(UtilityString.isNull(x.getDescrizioneEstesa(), x.getDescrizione()));
|
||||
pickingResiListModel.setActive(true);
|
||||
pickingResiListModel.setOriginalModel(x);
|
||||
|
||||
BigDecimal qtaColEvasa = BigDecimal.ZERO;
|
||||
BigDecimal numCnfColEvasa = BigDecimal.ZERO;
|
||||
|
||||
for (MtbColr mtbColr : x.getWithdrawRows()) {
|
||||
qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol());
|
||||
numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf());
|
||||
}
|
||||
|
||||
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
|
||||
pickingResiListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
pickingResiListModel.setQtaEvasa(numCnfColEvasa);
|
||||
pickingResiListModel.setQtaTot(x.getNumCnf());
|
||||
|
||||
} else {
|
||||
if (x.getMtbAart() != null)
|
||||
pickingResiListModel.setUntMis(x.getMtbAart().getUntMis());
|
||||
else pickingResiListModel.setUntMis(x.getUntDoc());
|
||||
pickingResiListModel.setQtaEvasa(qtaColEvasa);
|
||||
pickingResiListModel.setQtaTot(x.getQtaDoc());
|
||||
}
|
||||
|
||||
|
||||
pickingResiListModels.add(pickingResiListModel);
|
||||
});
|
||||
|
||||
return pickingResiListModels;
|
||||
}
|
||||
|
||||
private void initDatiPicking() throws Exception {
|
||||
List<String> foundGestioni = Stream.of(this.mDocumentiResiList)
|
||||
.map(DocumentoResoDTO::getGestione)
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.toList();
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
if(foundGestioni.size() > 1) {
|
||||
throw new Exception("Sono stati caricati documenti con diverse gestioni");
|
||||
} else mDefaultGestioneOfUL = foundGestioni.get(0);
|
||||
this.openProgress();
|
||||
|
||||
this.mViewmodel.processBarcodeDTO(data, () -> {
|
||||
BarcodeManager.enable();
|
||||
this.closeProgress();
|
||||
});
|
||||
};
|
||||
|
||||
List<String> foundCodAnags = Stream.of(this.mDocumentiResiList)
|
||||
.map(DocumentoResoDTO::getCodAnag)
|
||||
.distinct()
|
||||
.toList();
|
||||
public void createNewLU() {
|
||||
this.mBindings.mainFab.close(true);
|
||||
|
||||
if(foundCodAnags.size() > 1) {
|
||||
throw new Exception("Sono stati caricati documenti con diversi codici anagrafici");
|
||||
} else mDefaultCodAnagOfUL = foundCodAnags.get(0);
|
||||
this.openProgress();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void onScanSuccessful(BarcodeScanDTO data) {
|
||||
|
||||
}
|
||||
|
||||
public void createNewUL() {
|
||||
this.createNewUL(null, null, null, false, true, null);
|
||||
}
|
||||
|
||||
public void createNewUL(Integer customNumCollo, String customSerCollo, Dialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) {
|
||||
this.mBinding.mainFab.close(true);
|
||||
|
||||
if (progress == null){
|
||||
progress = UtilityProgress.createDefaultProgressDialog(this);
|
||||
}
|
||||
|
||||
MtbColt mtbColt = new MtbColt();
|
||||
mtbColt.initDefaultFields();
|
||||
mtbColt .setGestione(mDefaultGestioneOfUL)
|
||||
.setSegno(mDefaultSegnoOfUL)
|
||||
.setCodAnag(mDefaultCodAnagOfUL)
|
||||
.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep())
|
||||
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||
|
||||
|
||||
if(customNumCollo != null) {
|
||||
mtbColt.setNumCollo(customNumCollo);
|
||||
}
|
||||
|
||||
if(!UtilityString.isNullOrEmpty(customSerCollo)) {
|
||||
mtbColt.setSerCollo(customSerCollo);
|
||||
}
|
||||
|
||||
|
||||
Dialog finalProgress = progress;
|
||||
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColt, value -> {
|
||||
|
||||
value.setDisablePrint(disablePrint);
|
||||
|
||||
setULToCurrentContext(value);
|
||||
|
||||
if(closeProgress) finalProgress.dismiss();
|
||||
|
||||
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
|
||||
|
||||
if(onComplete != null) onComplete.run();
|
||||
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, finalProgress);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void setULToCurrentContext(MtbColt mtbColt){
|
||||
if(mtbColt != null && mtbColt.getMtbColr() == null) {
|
||||
mtbColt.setMtbColr(new ObservableArrayList<>());
|
||||
}
|
||||
|
||||
this.currentMtbColt.set(mtbColt);
|
||||
mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void onOrdineRowDispatch(final WithdrawableDtbDocr item) {
|
||||
if(currentMtbColt.get() != null){
|
||||
|
||||
List<MtbColr> currentMtbColrs = item.getWithdrawRows();
|
||||
|
||||
BigDecimal qtaEvasaTotaleInMtbColr = BigDecimal.ZERO;
|
||||
for (MtbColr mtbColr : currentMtbColrs) {
|
||||
qtaEvasaTotaleInMtbColr.add(mtbColr.getQtaCol());
|
||||
}
|
||||
|
||||
BigDecimal qtaDaEvadere = item.getQtaDoc().subtract(qtaEvasaTotaleInMtbColr);
|
||||
if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO;
|
||||
|
||||
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
|
||||
.setBatchLot(item.getPartitaMag())
|
||||
.setCodArtFor(item.getCodArtFor())
|
||||
.setMtbAart(item.getMtbAart())
|
||||
.setQtaDisponibile(qtaDaEvadere)
|
||||
.setQtaTot(qtaDaEvadere)
|
||||
.setQtaEvasa(qtaEvasaTotaleInMtbColr)
|
||||
.setCanPartitaMagBeChanged(false)
|
||||
.setMaxQta(qtaDaEvadere);
|
||||
|
||||
|
||||
DialogInputQuantity.makeBase(this, dto, false, (quantityDTO, closeUL) -> {
|
||||
onOrdineRowDispatched(item, quantityDTO, closeUL);
|
||||
|
||||
}, null).show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void onOrdineRowDispatched(WithdrawableDtbDocr item, QuantityDTO quantityDTO, boolean closeUL){
|
||||
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
|
||||
|
||||
final MtbColr mtbColr = new MtbColr()
|
||||
.setCodMart(item.getCodMart())
|
||||
.setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get()))
|
||||
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
|
||||
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
|
||||
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
|
||||
.setDescrizione(item.getDescrizioneEstesa())
|
||||
.setDatetimeRow(UtilityDate.getDateInstance())
|
||||
|
||||
.setCodAnagDoc(item.getCodAnag())
|
||||
.setCodDtipDoc(item.getCodDtip())
|
||||
.setSerDoc(item.getSerDoc())
|
||||
.setNumDoc(item.getNumDoc())
|
||||
.setDataDoc(item.getDataDocS())
|
||||
.setIdRigaDoc(item.getIdRiga());
|
||||
// .setCodJcom(item.getCodJcom());
|
||||
|
||||
|
||||
|
||||
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||
|
||||
MtbColt cloneMtbColt = (MtbColt) currentMtbColt.get().clone();
|
||||
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
|
||||
|
||||
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
|
||||
cloneMtbColt.getMtbColr().add(mtbColr);
|
||||
|
||||
ColliMagazzinoRESTConsumer.saveColloStatic(cloneMtbColt, value -> {
|
||||
|
||||
mtbColr
|
||||
.setDataCollo(value.getDataColloS())
|
||||
.setNumCollo(value.getNumCollo())
|
||||
.setGestione(value.getGestione())
|
||||
.setSerCollo(value.getSerCollo())
|
||||
.setRiga(value.getMtbColr().get(0).getRiga())
|
||||
.setUntMis(item.getMtbAart().getUntMis())
|
||||
.setMtbAart(item.getMtbAart());
|
||||
|
||||
item.getWithdrawRows().add(mtbColr);
|
||||
|
||||
this.refreshDtbDocrItem(item);
|
||||
|
||||
currentMtbColt.get().getMtbColr().add(mtbColr);
|
||||
|
||||
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
|
||||
removeListFilter();
|
||||
|
||||
FBToast.successToast(this, this.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
|
||||
|
||||
progress.dismiss();
|
||||
|
||||
// if(closeUL) onColloClosed(null);
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, progress);
|
||||
this.mViewmodel.createNewLU(null, null, () -> {
|
||||
this.closeProgress();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onColloClosed(Runnable onComplete, boolean shouldPrint) {
|
||||
if(thereIsAnOpenedUL()) {
|
||||
public void onMtbColrEdit(MtbColr mtbColr) {
|
||||
this.mViewmodel.dispatchRowEdit(mtbColr);
|
||||
}
|
||||
|
||||
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
|
||||
progress.show();
|
||||
@Override
|
||||
public void onMtbColrDelete(MtbColr mtbColr) {
|
||||
this.mViewmodel.deleteRow(mtbColr);
|
||||
}
|
||||
|
||||
if(thereIsAnyRowInUL()) {
|
||||
NoteAggiuntiveLUDialog.make(this, noteString -> {
|
||||
@Override
|
||||
public void onBottomSheetLUClose() {
|
||||
this.mViewmodel.closeLU(true);
|
||||
}
|
||||
|
||||
MtbColt currentLU = currentMtbColt.get();
|
||||
@Override
|
||||
public void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
|
||||
NoteAggiuntiveLUDialog.make(this, onComplete, onAbort).show();
|
||||
}
|
||||
|
||||
Runnable postNoteSave = () -> {
|
||||
ColliMagazzinoRESTConsumer.updateDataFineStatic(
|
||||
currentLU,
|
||||
() -> printCollo(progress, currentMtbColt.get(), onComplete),
|
||||
ex -> UtilityExceptions.defaultException(this, ex, progress));
|
||||
};
|
||||
|
||||
if(!UtilityString.isNullOrEmpty(noteString)) {
|
||||
currentLU.setAnnotazioni(noteString);
|
||||
|
||||
ColliMagazzinoRESTConsumer.saveColloStatic(currentLU, mtbColt -> {
|
||||
postNoteSave.run();
|
||||
}, ex -> UtilityExceptions.defaultException(this, ex, progress));
|
||||
} else postNoteSave.run();
|
||||
|
||||
|
||||
}, () -> {
|
||||
|
||||
}).show();
|
||||
} else {
|
||||
deleteCollo(progress, onComplete);
|
||||
}
|
||||
@Override
|
||||
public void onError(Exception ex) {
|
||||
this.closeProgress();
|
||||
|
||||
if(ex instanceof InvalidPesoKGException) {
|
||||
UtilityToast.showToast(ex.getMessage());
|
||||
} else {
|
||||
if(onComplete != null) onComplete.run();
|
||||
}
|
||||
}
|
||||
|
||||
private void onItemEdited(MtbColr mtbColrOriginal, MtbColr mtbColrEdited) {
|
||||
for(int i = 0; i < mDtbDocrList.size(); i++) {
|
||||
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrOriginal);
|
||||
|
||||
if(foundIndex >= 0){
|
||||
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
|
||||
mDtbDocrList.get(i).getWithdrawRows().add(foundIndex, mtbColrEdited);
|
||||
|
||||
refreshDtbDocrItem(this.mDtbDocrList.get(i));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onItemDeleted(MtbColr mtbColrDeleted) {
|
||||
for(int i = 0; i < mDtbDocrList.size(); i++) {
|
||||
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrDeleted);
|
||||
|
||||
if(foundIndex >= 0){
|
||||
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
|
||||
|
||||
refreshDtbDocrItem(this.mDtbDocrList.get(i));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void printCollo(Dialog progress, MtbColt mtbColtToPrint, Runnable onComplete) {
|
||||
DialogAskShouldPrint.make(this, "Packing List", shouldPrint -> {
|
||||
|
||||
if(shouldPrint) {
|
||||
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
|
||||
|
||||
if (printerList.size() > 0) {
|
||||
try {
|
||||
singlePrint(mtbColtToPrint, printerList.get(0), () -> {
|
||||
postCloseOperations(mtbColtToPrint, onComplete);
|
||||
progress.dismiss();
|
||||
}, ex -> {
|
||||
progress.dismiss();
|
||||
String errorMessage = ex.getMessage();
|
||||
DialogSimpleMessageHelper.makeErrorDialog(
|
||||
this,
|
||||
new SpannableString(errorMessage),
|
||||
null,
|
||||
null,
|
||||
R.string.button_ignore_print,
|
||||
() -> postCloseOperations(mtbColtToPrint, onComplete)).show();
|
||||
});
|
||||
|
||||
} catch (Exception ex) {
|
||||
UtilityExceptions.defaultException(this, ex, progress);
|
||||
postCloseOperations(mtbColtToPrint, onComplete);
|
||||
}
|
||||
} else {
|
||||
progress.dismiss();
|
||||
String errorMessage = "Nessuna stampante configurata";
|
||||
DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(errorMessage), null, () -> postCloseOperations(mtbColtToPrint, onComplete)).show();
|
||||
}
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, progress);
|
||||
});
|
||||
} else {
|
||||
postCloseOperations(mtbColtToPrint, onComplete);
|
||||
progress.dismiss();
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
|
||||
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
|
||||
|
||||
PrinterRESTConsumer.printColloStatic(
|
||||
printerName,
|
||||
mtbColtToPrint,
|
||||
1,
|
||||
reportName, onComplete, onAbort);
|
||||
|
||||
}, onAbort);
|
||||
}
|
||||
|
||||
private void postCloseOperations(MtbColt generatedMtbColt, Runnable onComplete) {
|
||||
this.mColliRegistrati.add(generatedMtbColt);
|
||||
|
||||
setULToCurrentContext(null);
|
||||
|
||||
for(int i = 0; i < this.mDtbDocrList.size(); i++) {
|
||||
WithdrawableDtbDocr dtbDocr = this.mDtbDocrList.get(i);
|
||||
|
||||
List<MtbColr> withdraws = dtbDocr.getWithdrawRows();
|
||||
|
||||
for(int k = 0; k < withdraws.size(); k++) {
|
||||
MtbColr withdrawRow = withdraws.get(k);
|
||||
|
||||
dtbDocr.setQtaDoc(dtbDocr.getQtaDoc().subtract(withdrawRow.getQtaCol()));
|
||||
}
|
||||
|
||||
dtbDocr.getWithdrawRows().clear();
|
||||
|
||||
if(UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc()) <= 0) {
|
||||
this.mDtbDocrList.remove(dtbDocr);
|
||||
i--;
|
||||
} else this.refreshDtbDocrItem(dtbDocr);
|
||||
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
|
||||
}
|
||||
|
||||
removeListFilter();
|
||||
|
||||
if(onComplete != null) onComplete.run();
|
||||
BarcodeManager.enable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemDispatched(MtbAart mtbAart,
|
||||
BigDecimal initialNumCnf,
|
||||
BigDecimal initialQtaCnf,
|
||||
BigDecimal initialQtaTot,
|
||||
BigDecimal totalQtaAvailable,
|
||||
BigDecimal totalNumCnfAvailable,
|
||||
BigDecimal qtaCnfAvailable,
|
||||
String partitaMag,
|
||||
Date dataScad,
|
||||
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
|
||||
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
|
||||
.setMtbAart(mtbAart)
|
||||
.setInitialNumCnf(initialNumCnf)
|
||||
.setInitialQtaCnf(initialQtaCnf)
|
||||
.setInitialQtaTot(initialQtaTot)
|
||||
.setTotalQtaAvailable(totalQtaAvailable)
|
||||
.setTotalNumCnfAvailable(totalNumCnfAvailable)
|
||||
.setQtaCnfAvailable(qtaCnfAvailable)
|
||||
.setPartitaMag(partitaMag)
|
||||
.setDataScad(dataScad)
|
||||
.setCanOverflowOrderQuantity(false)
|
||||
.setCanLUBeClosed(false)
|
||||
.setCanPartitaMagBeChanged(false);
|
||||
|
||||
private void deleteCollo(Dialog progress, Runnable onComplete) {
|
||||
DialogInputQuantityV2
|
||||
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
|
||||
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
|
||||
.setNumCnf(resultDTO.getNumCnf())
|
||||
.setQtaCnf(resultDTO.getQtaCnf())
|
||||
.setQtaTot(resultDTO.getQtaTot())
|
||||
.setPartitaMag(resultDTO.getPartitaMag())
|
||||
.setDataScad(resultDTO.getDataScad());
|
||||
|
||||
ColliMagazzinoRESTConsumer.deleteColloStatic(currentMtbColt.get(), () -> {
|
||||
setULToCurrentContext(null);
|
||||
|
||||
progress.dismiss();
|
||||
|
||||
|
||||
if(onComplete != null) onComplete.run();
|
||||
}, ex -> UtilityExceptions.defaultException(this, ex, progress)
|
||||
);
|
||||
this.openProgress();
|
||||
onComplete.run(pickedQuantityDTO, shouldCloseLU);
|
||||
}, () -> {
|
||||
// this.mViewmodel.resetMatchedRows();
|
||||
})
|
||||
.show(getSupportFragmentManager(), "tag");
|
||||
}
|
||||
|
||||
|
||||
public boolean thereIsAnOpenedUL() {
|
||||
return currentMtbColt.get() != null;
|
||||
@Override
|
||||
public void onRowSaved() {
|
||||
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
|
||||
}
|
||||
|
||||
public boolean thereIsAnyRowInUL() {
|
||||
return currentMtbColt.get() != null &&
|
||||
currentMtbColt.get().getMtbColr() != null &&
|
||||
currentMtbColt.get().getMtbColr().size() > 0;
|
||||
@Override
|
||||
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
|
||||
String text = getResources().getString(R.string.alert_delete_mtb_colr);
|
||||
DialogSimpleMessageHelper.makeWarningDialog(this,
|
||||
new SpannableString(text),
|
||||
null,
|
||||
() -> onComplete.run(true),
|
||||
() -> onComplete.run(false)
|
||||
).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLUOpened(MtbColt mtbColt) {
|
||||
noLUPresent.set(false);
|
||||
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
|
||||
|
||||
private void refreshDtbDocrItem(WithdrawableDtbDocr dtbDocr) {
|
||||
int index = this.mDtbDocrList.indexOf(dtbDocr);
|
||||
this.mDtbDocrList.remove(dtbDocr);
|
||||
this.mDtbDocrList.add(index, dtbDocr);
|
||||
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLUClosed() {
|
||||
noLUPresent.set(true);
|
||||
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
|
||||
|
||||
public void removeListFilter() {
|
||||
if (this.mShouldCloseActivity) super.onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLUSuccessullyPrinted() {
|
||||
Resources res = getResources();
|
||||
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
|
||||
DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
|
||||
DialogAskShouldPrint.make(this, "Packing List", onComplete).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLUPrintError(Exception ex, Runnable onComplete) {
|
||||
this.closeProgress();
|
||||
DialogSimpleMessageHelper.makeErrorDialog(
|
||||
this,
|
||||
new SpannableString(ex.getMessage()),
|
||||
null,
|
||||
null,
|
||||
R.string.button_ignore_print,
|
||||
onComplete).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingStarted() {
|
||||
this.openProgress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingEnded() {
|
||||
this.closeProgress();
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi;
|
||||
|
||||
import dagger.Subcomponent;
|
||||
|
||||
@Subcomponent
|
||||
public interface PickingResiComponent {
|
||||
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
PickingResiComponent create();
|
||||
}
|
||||
|
||||
void inject(PickingResiActivity pickingResiActivity);
|
||||
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer;
|
||||
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
|
||||
|
||||
@Module(subcomponents = PickingResiComponent.class)
|
||||
public class PickingResiModule {
|
||||
|
||||
@Provides
|
||||
PickingResiRESTConsumer providesPickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
||||
return new PickingResiRESTConsumer(systemRESTConsumer);
|
||||
}
|
||||
|
||||
@Provides
|
||||
BottomSheetFragmentLUContentViewModel providesBottomSheetFragmentLUContentViewModel() {
|
||||
return new BottomSheetFragmentLUContentViewModel();
|
||||
}
|
||||
|
||||
@Provides
|
||||
PickingResiViewModel providesPickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliDataRecoverService colliDataRecoverService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PickingResiRESTConsumer pickingResiRESTConsumer) {
|
||||
return new PickingResiViewModel(articoloRESTConsumer, barcodeRESTConsumer, colliDataRecoverService, ordiniRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, pickingResiRESTConsumer);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,578 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi;
|
||||
|
||||
import androidx.databinding.ObservableArrayList;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.annimon.stream.Optional;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
|
||||
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
|
||||
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener;
|
||||
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUPrintListener;
|
||||
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
|
||||
import it.integry.integrywmsnative.core.model.CommonModelConsts;
|
||||
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.report.ReportManager;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
|
||||
|
||||
public class PickingResiViewModel {
|
||||
|
||||
|
||||
private Listener mListener;
|
||||
|
||||
private final MutableLiveData<List<WithdrawableDtbDocr>> mPickingList = new MutableLiveData<>();
|
||||
private final List<MtbColt> mColliRegistrati = new ArrayList<>();
|
||||
|
||||
private MtbColt mCurrentMtbColt = null;
|
||||
|
||||
private String mDefaultGestioneOfLU;
|
||||
private String mDefaultCodAnagOfLU;
|
||||
private int mDefaultSegnoOfLU;
|
||||
private String mDefaultCodMdepOfLU;
|
||||
|
||||
private final ArticoloRESTConsumer mArticoloRESTConsumer;
|
||||
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
|
||||
private final ColliDataRecoverService mColliDataRecoverService;
|
||||
private final OrdiniRESTConsumer mOrdiniRestConsumerService;
|
||||
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
|
||||
private final PrinterRESTConsumer mPrinterRESTConsumer;
|
||||
private final PickingResiRESTConsumer mPickingResiRESTConsumer;
|
||||
|
||||
|
||||
@Inject
|
||||
public PickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer,
|
||||
BarcodeRESTConsumer barcodeRESTConsumer,
|
||||
ColliDataRecoverService colliDataRecoverService,
|
||||
OrdiniRESTConsumer ordiniRESTConsumer,
|
||||
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
|
||||
PrinterRESTConsumer printerRESTConsumer,
|
||||
PickingResiRESTConsumer mPickingResiRESTConsumer) {
|
||||
this.mArticoloRESTConsumer = articoloRESTConsumer;
|
||||
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
|
||||
this.mColliDataRecoverService = colliDataRecoverService;
|
||||
this.mOrdiniRestConsumerService = ordiniRESTConsumer;
|
||||
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
|
||||
this.mPrinterRESTConsumer = printerRESTConsumer;
|
||||
this.mPickingResiRESTConsumer = mPickingResiRESTConsumer;
|
||||
}
|
||||
|
||||
public void init(List<DocumentoResoDTO> documentList, int defaultSegnoLU, String codMdep) {
|
||||
this.mDefaultSegnoOfLU = defaultSegnoLU;
|
||||
this.mDefaultCodMdepOfLU = codMdep;
|
||||
|
||||
this.sendOnLoadingStarted();
|
||||
|
||||
this.initDatiPicking(documentList);
|
||||
|
||||
this.mPickingResiRESTConsumer.loadDocRows(documentList, withdrawableDtbDocr -> {
|
||||
this.mPickingList.postValue(withdrawableDtbDocr);
|
||||
this.sendOnLoadingEnded();
|
||||
}, ex -> this.sendError(new DocumentsLoadException(ex)));
|
||||
}
|
||||
|
||||
private void initDatiPicking(List<DocumentoResoDTO> documentList) {
|
||||
List<String> foundGestioni = Stream.of(documentList)
|
||||
.map(DocumentoResoDTO::getGestione)
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.toList();
|
||||
|
||||
if (foundGestioni.size() > 1) {
|
||||
this.sendError(new Exception("Sono stati caricati documenti con diverse gestioni"));
|
||||
} else mDefaultGestioneOfLU = foundGestioni.get(0);
|
||||
|
||||
|
||||
List<String> foundCodAnags = Stream.of(documentList)
|
||||
.map(DocumentoResoDTO::getCodAnag)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
if (foundCodAnags.size() > 1) {
|
||||
this.sendError(new Exception("Sono stati caricati documenti con diversi codici anagrafici"));
|
||||
} else mDefaultCodAnagOfLU = foundCodAnags.get(0);
|
||||
}
|
||||
|
||||
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
|
||||
MtbColt mtbColt = new MtbColt();
|
||||
mtbColt.initDefaultFields();
|
||||
mtbColt.setGestione(mDefaultGestioneOfLU)
|
||||
.setSegno(mDefaultSegnoOfLU)
|
||||
.setCodAnag(mDefaultCodAnagOfLU)
|
||||
.setCodMdep(mDefaultCodMdepOfLU)
|
||||
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||
|
||||
if (customNumCollo != null) mtbColt.setNumCollo(customNumCollo);
|
||||
if (!UtilityString.isNullOrEmpty(customSerCollo)) mtbColt.setSerCollo(customSerCollo);
|
||||
|
||||
mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> {
|
||||
mtbColt
|
||||
.setNumCollo(value.getNumCollo())
|
||||
.setDataCollo(value.getDataColloS())
|
||||
.setMtbColr(new ObservableArrayList<>());
|
||||
|
||||
this.mCurrentMtbColt = mtbColt;
|
||||
|
||||
if (onComplete != null) onComplete.run();
|
||||
this.sendLUOpened(mtbColt);
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
|
||||
public void closeLU(boolean shouldPrint) {
|
||||
if (mCurrentMtbColt == null) return;
|
||||
|
||||
this.sendOnLoadingStarted();
|
||||
|
||||
mColliMagazzinoRESTConsumer.canLUBeDeleted(mCurrentMtbColt, canBeDeleted -> {
|
||||
|
||||
if (canBeDeleted) {
|
||||
deleteLU(() -> {
|
||||
this.sendLUClosed();
|
||||
this.sendOnLoadingEnded();
|
||||
});
|
||||
} else {
|
||||
this.sendOnNoteAggiuntiveRequired(noteAggiuntive -> {
|
||||
|
||||
if (!UtilityString.isNullOrEmpty(noteAggiuntive)) {
|
||||
this.mCurrentMtbColt.setAnnotazioni(noteAggiuntive);
|
||||
}
|
||||
|
||||
this.mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> {
|
||||
|
||||
if (shouldPrint) {
|
||||
printCollo(mCurrentMtbColt, () -> {
|
||||
postCloseOperations(mCurrentMtbColt, () -> {
|
||||
this.sendLUClosed();
|
||||
this.sendOnLoadingEnded();
|
||||
});
|
||||
});
|
||||
} else {
|
||||
postCloseOperations(mCurrentMtbColt, () -> {
|
||||
this.sendLUClosed();
|
||||
this.sendOnLoadingEnded();
|
||||
});
|
||||
}
|
||||
|
||||
}, this::sendError);
|
||||
|
||||
}, () -> {
|
||||
this.sendLUClosed();
|
||||
this.sendOnLoadingEnded();
|
||||
});
|
||||
}
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
private void deleteLU(Runnable onComplete) {
|
||||
mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> {
|
||||
|
||||
this.mCurrentMtbColt = null;
|
||||
if (onComplete != null) onComplete.run();
|
||||
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
private void printCollo(MtbColt mtbColtToPrint, Runnable onComplete) {
|
||||
this.sendLUPrintRequest(shouldPrint -> {
|
||||
if (!shouldPrint) {
|
||||
onComplete.run();
|
||||
} else {
|
||||
this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdepOfLU, PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
|
||||
if (printerList == null || printerList.size() == 0) {
|
||||
this.sendError(new NoPrintersFoundException());
|
||||
onComplete.run();
|
||||
return;
|
||||
}
|
||||
singlePrint(mtbColtToPrint, printerList.get(0), onComplete, ex -> this.sendLUPrintError(ex, onComplete));
|
||||
}, this::sendError);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onFailed) {
|
||||
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
|
||||
|
||||
this.mPrinterRESTConsumer.printCollo(
|
||||
printerName,
|
||||
mtbColtToPrint,
|
||||
1,
|
||||
reportName, onComplete, onFailed);
|
||||
|
||||
}, onFailed);
|
||||
}
|
||||
|
||||
private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) {
|
||||
this.mColliRegistrati.add(mtbColt);
|
||||
|
||||
Stream.of(this.mPickingList.getValue())
|
||||
.forEach(x -> {
|
||||
List<MtbColr> withdraws = x.getWithdrawRows();
|
||||
|
||||
for (int k = 0; k < withdraws.size(); k++) {
|
||||
MtbColr withdrawRow = withdraws.get(k);
|
||||
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
|
||||
}
|
||||
|
||||
x.getWithdrawRows().clear();
|
||||
|
||||
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
|
||||
this.mPickingList.getValue().remove(x);
|
||||
}
|
||||
});
|
||||
|
||||
this.mPickingList.postValue(this.mPickingList.getValue());
|
||||
onComplete.run();
|
||||
}
|
||||
|
||||
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
|
||||
|
||||
//Se non c'è una UL aperta
|
||||
if (mCurrentMtbColt == null) {
|
||||
|
||||
//Se è un'etichetta anonima
|
||||
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
|
||||
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
|
||||
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
|
||||
//dell'etichetta anonima
|
||||
// this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
|
||||
} else {
|
||||
// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
|
||||
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
|
||||
// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
|
||||
|
||||
} else {
|
||||
// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) {
|
||||
BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc();
|
||||
BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf();
|
||||
BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf();
|
||||
|
||||
|
||||
|
||||
this.sendOnItemDispatched(
|
||||
withdrawableDtbDocr.getMtbAart(),
|
||||
totalNumCnfDoc,
|
||||
qtaCnfDoc,
|
||||
totalQtaDoc,
|
||||
totalQtaDoc,
|
||||
totalNumCnfDoc,
|
||||
qtaCnfDoc,
|
||||
withdrawableDtbDocr.getPartitaMag(),
|
||||
withdrawableDtbDocr.getDataScadPartitaMagD(),
|
||||
(pickedQuantityDTO, shouldCloseLU) -> {
|
||||
|
||||
this.saveNewRow(withdrawableDtbDocr,
|
||||
pickedQuantityDTO.getNumCnf(),
|
||||
pickedQuantityDTO.getQtaCnf(),
|
||||
pickedQuantityDTO.getQtaTot(),
|
||||
pickedQuantityDTO.getPartitaMag(),
|
||||
pickedQuantityDTO.getDataScad(),
|
||||
shouldCloseLU);
|
||||
});
|
||||
}
|
||||
|
||||
public void dispatchRowEdit(final MtbColr mtbColrToEdit) {
|
||||
|
||||
this.sendOnItemDispatched(
|
||||
mtbColrToEdit.getMtbAart(),
|
||||
mtbColrToEdit.getNumCnf(),
|
||||
mtbColrToEdit.getQtaCnf(),
|
||||
mtbColrToEdit.getQtaCol(),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
mtbColrToEdit.getPartitaMag(),
|
||||
mtbColrToEdit.getDataScadPartitaD(),
|
||||
(pickedQuantityDTO, shouldCloseLU) -> {
|
||||
|
||||
this.saveEditedRow(mtbColrToEdit,
|
||||
pickedQuantityDTO.getNumCnf(),
|
||||
pickedQuantityDTO.getQtaCnf(),
|
||||
pickedQuantityDTO.getQtaTot(),
|
||||
pickedQuantityDTO.getPartitaMag(),
|
||||
pickedQuantityDTO.getDataScad(),
|
||||
shouldCloseLU);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
|
||||
this.sendOnLoadingStarted();
|
||||
|
||||
final MtbColr mtbColr = new MtbColr()
|
||||
.setCodMart(withdrawableDtbDocr.getMtbAart().getCodMart())
|
||||
.setPartitaMag(partitaMag)
|
||||
.setDataScadPartita(dataScad)
|
||||
.setQtaCol(qtaTot)
|
||||
.setQtaCnf(qtaCnf)
|
||||
.setNumCnf(numCnf)
|
||||
.setDescrizione(withdrawableDtbDocr.getMtbAart().getDescrizioneEstesa())
|
||||
.setDatetimeRow(UtilityDate.getDateInstance())
|
||||
|
||||
.setCodAnagDoc(withdrawableDtbDocr.getCodAnag())
|
||||
.setCodDtipDoc(withdrawableDtbDocr.getCodDtip())
|
||||
.setSerDoc(withdrawableDtbDocr.getSerDoc())
|
||||
.setNumDoc(withdrawableDtbDocr.getNumDoc())
|
||||
.setDataDoc(withdrawableDtbDocr.getDataDocS())
|
||||
.setIdRigaDoc(withdrawableDtbDocr.getIdRiga());
|
||||
|
||||
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||
|
||||
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
|
||||
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
|
||||
|
||||
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
|
||||
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
|
||||
|
||||
boolean shouldPrint = true;
|
||||
|
||||
//Se è l'unico articolo del collo (controllo se è uguale a 0 perché ancora non è stato aggiunto nella lista delle righe)
|
||||
if (shouldCloseLU && mCurrentMtbColt.getMtbColr().size() == 0) {
|
||||
shouldPrint = false;
|
||||
}
|
||||
|
||||
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
|
||||
this.sendOnLoadingEnded();
|
||||
|
||||
if (shouldCloseLU) closeLU(shouldPrint);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean finalShouldPrint = shouldPrint;
|
||||
this.mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
|
||||
|
||||
mtbColr
|
||||
.setDataCollo(value.getDataColloS())
|
||||
.setNumCollo(value.getNumCollo())
|
||||
.setGestione(value.getGestione())
|
||||
.setSerCollo(value.getSerCollo())
|
||||
.setRiga(value.getMtbColr().get(0).getRiga())
|
||||
.setUntMis(withdrawableDtbDocr.getMtbAart().getUntMis())
|
||||
.setMtbAart(withdrawableDtbDocr.getMtbAart());
|
||||
|
||||
withdrawableDtbDocr.getWithdrawRows().add(mtbColr);
|
||||
mCurrentMtbColt.getMtbColr().add(mtbColr);
|
||||
|
||||
this.mPickingList.postValue(this.mPickingList.getValue());
|
||||
|
||||
this.sendOnRowSaved();
|
||||
this.sendOnLoadingEnded();
|
||||
|
||||
if (shouldCloseLU) closeLU(finalShouldPrint);
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
|
||||
|
||||
this.sendOnLoadingStarted();
|
||||
|
||||
MtbColt mtbColt = new MtbColt()
|
||||
.setNumCollo(mtbColrToUpdate.getNumCollo())
|
||||
.setDataCollo(mtbColrToUpdate.getDataColloS())
|
||||
.setSerCollo(mtbColrToUpdate.getSerCollo())
|
||||
.setGestione(mtbColrToUpdate.getGestione())
|
||||
.setMtbColr(new ObservableArrayList<>());
|
||||
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
|
||||
|
||||
final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone();
|
||||
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
|
||||
mtbColr.setRiga(null)
|
||||
.setNumCnf(numCnf.subtract(mtbColrToUpdate.getNumCnf()))
|
||||
.setQtaCnf(qtaCnf)
|
||||
.setQtaCol(qtaTot.subtract(mtbColrToUpdate.getQtaCol()))
|
||||
.setPartitaMag(partitaMag)
|
||||
.setDataScadPartita(dataScad);
|
||||
|
||||
mtbColt.getMtbColr().add(mtbColr);
|
||||
|
||||
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
|
||||
|
||||
mtbColr.setNumCnf(numCnf)
|
||||
.setQtaCnf(qtaCnf)
|
||||
.setQtaCol(qtaTot);
|
||||
|
||||
Optional<WithdrawableDtbDocr> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
|
||||
.filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToUpdate))
|
||||
.findSingle();
|
||||
|
||||
if (pickingObjectDTO.isPresent()) {
|
||||
pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToUpdate);
|
||||
pickingObjectDTO.get().getWithdrawRows().add(mtbColr);
|
||||
}
|
||||
|
||||
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
|
||||
this.mCurrentMtbColt.getMtbColr().add(mtbColr);
|
||||
|
||||
this.sendOnRowSaved();
|
||||
this.sendOnLoadingEnded();
|
||||
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
public void deleteRow(MtbColr mtbColrToDelete) {
|
||||
this.sendMtbColrDeleteRequest(canDelete -> {
|
||||
if (canDelete) {
|
||||
this.sendOnLoadingStarted();
|
||||
|
||||
MtbColt mtbColt = new MtbColt()
|
||||
.setNumCollo(mtbColrToDelete.getNumCollo())
|
||||
.setDataCollo(mtbColrToDelete.getDataColloS())
|
||||
.setSerCollo(mtbColrToDelete.getSerCollo())
|
||||
.setGestione(mtbColrToDelete.getGestione())
|
||||
.setMtbColr(new ObservableArrayList<>());
|
||||
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
|
||||
|
||||
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
|
||||
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
|
||||
mtbColr.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
|
||||
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
|
||||
.setRiga(null);
|
||||
|
||||
mtbColt.getMtbColr().add(mtbColr);
|
||||
|
||||
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
|
||||
|
||||
Optional<WithdrawableDtbDocr> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
|
||||
.filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToDelete))
|
||||
.findSingle();
|
||||
|
||||
if (pickingObjectDTO.isPresent()) {
|
||||
pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToDelete);
|
||||
}
|
||||
|
||||
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
|
||||
|
||||
this.sendOnRowSaved();
|
||||
this.sendOnLoadingEnded();
|
||||
|
||||
}, this::sendError);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() {
|
||||
return mPickingList;
|
||||
}
|
||||
|
||||
private void sendOnNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
|
||||
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete, onAbort);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
private void sendLUOpened(MtbColt mtbColt) {
|
||||
if (this.mListener != null) mListener.onLUOpened(mtbColt);
|
||||
}
|
||||
|
||||
private void sendLUClosed() {
|
||||
if (this.mListener != null) mListener.onLUClosed();
|
||||
}
|
||||
|
||||
private void sendLUPrintRequest(RunnableArgs<Boolean> onComplete) {
|
||||
if (this.mListener != null) mListener.onLUPrintRequest(onComplete);
|
||||
}
|
||||
|
||||
private void sendLUPrintError(Exception ex, Runnable onComplete) {
|
||||
if (this.mListener != null) mListener.onLUPrintError(ex, onComplete);
|
||||
}
|
||||
|
||||
private void sendMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
|
||||
if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete);
|
||||
}
|
||||
|
||||
private void sendOnItemDispatched(MtbAart mtbAart,
|
||||
BigDecimal initialNumCnf,
|
||||
BigDecimal initialQtaCnf,
|
||||
BigDecimal initialQtaTot,
|
||||
BigDecimal totalQtaAvailable,
|
||||
BigDecimal totalNumCnfAvailable,
|
||||
BigDecimal qtaCnfAvailable,
|
||||
String partitaMag,
|
||||
Date dataScad,
|
||||
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
|
||||
if (this.mListener != null) mListener.onItemDispatched(mtbAart,
|
||||
initialNumCnf,
|
||||
initialQtaCnf,
|
||||
initialQtaTot,
|
||||
totalQtaAvailable,
|
||||
totalNumCnfAvailable,
|
||||
qtaCnfAvailable,
|
||||
partitaMag,
|
||||
dataScad,
|
||||
onComplete);
|
||||
}
|
||||
|
||||
private void sendOnRowSaved() {
|
||||
if (this.mListener != null) mListener.onRowSaved();
|
||||
}
|
||||
|
||||
|
||||
public PickingResiViewModel setListener(Listener listener) {
|
||||
this.mListener = listener;
|
||||
return this;
|
||||
}
|
||||
|
||||
public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener {
|
||||
|
||||
void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort);
|
||||
|
||||
void onError(Exception ex);
|
||||
|
||||
void onItemDispatched(MtbAart mtbAart,
|
||||
BigDecimal initialNumCnf,
|
||||
BigDecimal initialQtaCnf,
|
||||
BigDecimal initialQtaTot,
|
||||
BigDecimal totalQtaAvailable,
|
||||
BigDecimal totalNumCnfAvailable,
|
||||
BigDecimal qtaCnfAvailable,
|
||||
String partitaMag,
|
||||
Date dataScad,
|
||||
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,197 +1,149 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi.core;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.databinding.ObservableArrayList;
|
||||
import androidx.databinding.ObservableList;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.DtbDocr;
|
||||
import it.integry.integrywmsnative.core.model.MtbColr;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityNumber;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityResources;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemBinding;
|
||||
import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemHeaderBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
|
||||
import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding;
|
||||
import it.integry.integrywmsnative.databinding.PickingResiMainListItemHeaderBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||
|
||||
public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<PickingResiListAdapter.SubheaderHolder, PickingResiListAdapter.SingleItemViewHolder> {
|
||||
|
||||
|
||||
private Context mContext;
|
||||
|
||||
private List<WithdrawableDtbDocr> mDataset;
|
||||
|
||||
private final List<PickingResiListModel> mDataset = new ArrayList<>();
|
||||
private RunnableArgs<WithdrawableDtbDocr> mOnItemClicked;
|
||||
|
||||
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
||||
PickingResiMainListItemHeaderBinding mBinding;
|
||||
|
||||
UltimeConsegneMainListItemHeaderBinding mBinding;
|
||||
|
||||
SubheaderHolder(UltimeConsegneMainListItemHeaderBinding binding) {
|
||||
SubheaderHolder(PickingResiMainListItemHeaderBinding binding) {
|
||||
super(binding.getRoot());
|
||||
this.mBinding = binding;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
|
||||
PickingResiMainListItemBinding mBinding;
|
||||
|
||||
UltimeConsegneMainListItemBinding mBinding;
|
||||
|
||||
SingleItemViewHolder(UltimeConsegneMainListItemBinding binding) {
|
||||
SingleItemViewHolder(PickingResiMainListItemBinding binding) {
|
||||
super(binding.getRoot());
|
||||
this.mBinding = binding;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public PickingResiListAdapter(Context context, ObservableList<WithdrawableDtbDocr> data) {
|
||||
public PickingResiListAdapter(AppCompatActivity context, ObservableArrayList<PickingResiListModel> mutableDataSet) {
|
||||
this.mContext = context;
|
||||
this.mDataset = new ArrayList<>();
|
||||
|
||||
refreshData(data);
|
||||
|
||||
data.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<WithdrawableDtbDocr>>() {
|
||||
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
|
||||
@Override
|
||||
public void onChanged(ObservableList<WithdrawableDtbDocr> sender) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeChanged(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeInserted(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeMoved(ObservableList<WithdrawableDtbDocr> sender, int fromPosition, int toPosition, int itemCount) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeRemoved(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
|
||||
refreshData(sender);
|
||||
public void onChanged(ObservableList sender) {
|
||||
mDataset.clear();
|
||||
mDataset.addAll(sender);
|
||||
notifyDataSetChanged();
|
||||
notifyDataChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void refreshData(List<WithdrawableDtbDocr> data) {
|
||||
this.mDataset.clear();
|
||||
this.mDataset.addAll(Stream.of(data)
|
||||
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
|
||||
.toList());
|
||||
|
||||
this.notifyDataChanged();
|
||||
}
|
||||
|
||||
public void setOnItemClicked(RunnableArgs<WithdrawableDtbDocr> onItemClicked) {
|
||||
this.mOnItemClicked = onItemClicked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
||||
UltimeConsegneMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item, parent, false);
|
||||
return new SingleItemViewHolder(binding);
|
||||
public PickingResiListAdapter.SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
||||
PickingResiMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item, parent, false);
|
||||
return new PickingResiListAdapter.SingleItemViewHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
||||
UltimeConsegneMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item_header, parent, false);
|
||||
return new SubheaderHolder(binding);
|
||||
public PickingResiListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
||||
PickingResiMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item_header, parent, false);
|
||||
return new PickingResiListAdapter.SubheaderHolder(binding);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onBindSubheaderViewHolder(PickingResiListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
|
||||
PickingResiListModel pickingResiListModel = this.mDataset.get(nextItemPosition);
|
||||
|
||||
subheaderHolder.mBinding.groupTitle.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getGroupTitle()) ? View.GONE : View.VISIBLE);
|
||||
subheaderHolder.mBinding.groupTitle.setText(pickingResiListModel.getGroupTitle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) {
|
||||
final WithdrawableDtbDocr dtbDocr = this.mDataset.get(position);
|
||||
public void onBindItemViewHolder(final PickingResiListAdapter.SingleItemViewHolder holder, final int position) {
|
||||
PickingResiListModel pickingResiListModel = this.mDataset.get(position);
|
||||
|
||||
BigDecimal qtaColEvasa = BigDecimal.ZERO;
|
||||
BigDecimal numCnfColEvasa = BigDecimal.ZERO;
|
||||
|
||||
for(MtbColr mtbColr : dtbDocr.getWithdrawRows()) {
|
||||
qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol());
|
||||
numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf());
|
||||
}
|
||||
|
||||
Float qtaDaEvadere = UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc().subtract(qtaColEvasa));
|
||||
|
||||
holder.mBinding.badge1.setText(dtbDocr.getCodMart());
|
||||
holder.mBinding.descrizione.setText(UtilityString.isNullOrEmpty(dtbDocr.getDescrizioneEstesa()) ? dtbDocr.getDescrizioneEstesa() : dtbDocr.getDescrizione());
|
||||
|
||||
|
||||
|
||||
//Setting qty with unt_mis
|
||||
if(!SettingsManager.iDB().isFlagForceAllToColli() && (dtbDocr.getMtbAart() == null || dtbDocr.getMtbAart().isFlagQtaCnfFissaBoolean())){
|
||||
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(qtaColEvasa));
|
||||
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getQtaDoc()));
|
||||
holder.mBinding.untMis.setText(dtbDocr.getUntDoc());
|
||||
} else {
|
||||
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(numCnfColEvasa));
|
||||
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getNumCnf()));
|
||||
holder.mBinding.untMis.setText(UtilityResources.getString(R.string.unt_mis_col));
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (qtaDaEvadere <= 0 ) {
|
||||
if (pickingResiListModel.getQtaEvasa().subtract(pickingResiListModel.getQtaTot()).floatValue() >= 0) {
|
||||
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
|
||||
} else if (qtaDaEvadere > 0 && qtaColEvasa.floatValue() > 0) {
|
||||
} else if (pickingResiListModel.getQtaEvasa().floatValue() > 0) {
|
||||
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
|
||||
} else if (position % 2 == 1) {
|
||||
holder.mBinding.getRoot().setBackgroundColor(Color.WHITE);
|
||||
} else {
|
||||
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.full_white));
|
||||
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
|
||||
}
|
||||
|
||||
holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE);
|
||||
holder.mBinding.getRoot().setAlpha(!pickingResiListModel.isActive() ? 0.8f : 1);
|
||||
holder.mBinding.badge1.setBackground(mContext.getResources().getDrawable(!pickingResiListModel.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner));
|
||||
holder.mBinding.qtaEvasa.setTextColor(mContext.getResources().getColor(!pickingResiListModel.isActive() ? R.color.gray_600 : R.color.green_700));
|
||||
|
||||
holder.mBinding.descrizione.setText(pickingResiListModel.getDescrizione());
|
||||
holder.mBinding.descrizione.setTextColor(pickingResiListModel.isDescrizionePresente() ? Color.BLACK : Color.GRAY);
|
||||
|
||||
|
||||
holder.mBinding.badge1.setText(pickingResiListModel.getBadge1());
|
||||
|
||||
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaEvasa()));
|
||||
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaTot()));
|
||||
|
||||
holder.mBinding.untMis.setText(pickingResiListModel.getUntMis());
|
||||
holder.mBinding.untMis.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getUntMis()) ? View.GONE : View.VISIBLE);
|
||||
|
||||
holder.mBinding.getRoot().setOnClickListener(v -> {
|
||||
if(this.mOnItemClicked != null) this.mOnItemClicked.run(dtbDocr);
|
||||
if (this.mOnItemClicked != null)
|
||||
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel());
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
|
||||
DtbDocr nextDtbDocr = this.mDataset.get(nextItemPosition);
|
||||
subheaderHolder.mBinding.descrizione.setText(nextDtbDocr.getCodDtip() + " - N° " + nextDtbDocr.getNumDoc() + " del " + UtilityDate.formatDate(nextDtbDocr.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPlaceSubheaderBetweenItems(int position) {
|
||||
if (getItemSize() == 1) return true;
|
||||
else if (getItemSize() > 1) {
|
||||
PickingResiListModel compare1 = this.mDataset.get(position);
|
||||
PickingResiListModel compare2 = this.mDataset.get(position + 1);
|
||||
|
||||
DtbDocr compare1 = this.mDataset.get(position);
|
||||
DtbDocr compare2 = this.mDataset.get(position + 1);
|
||||
|
||||
if( !compare1.getDataDocS().equalsIgnoreCase(compare2.getDataDocS()) ||
|
||||
!compare1.getSerDoc().equalsIgnoreCase(compare2.getSerDoc()) ||
|
||||
!compare1.getNumDoc().equals(compare2.getNumDoc()) ||
|
||||
!compare1.getCodAnag().equalsIgnoreCase(compare2.getCodAnag()) ||
|
||||
!compare1.getCodDtip().equalsIgnoreCase(compare2.getCodDtip())) {
|
||||
return true;
|
||||
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemSize() {
|
||||
return this.mDataset.size();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,103 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi.core;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||
|
||||
public class PickingResiListModel {
|
||||
|
||||
private String groupTitle;
|
||||
|
||||
private String badge1;
|
||||
|
||||
private String descrizione;
|
||||
private boolean descrizionePresente;
|
||||
private BigDecimal qtaEvasa;
|
||||
private BigDecimal qtaTot;
|
||||
private String untMis;
|
||||
|
||||
private boolean active;
|
||||
|
||||
private WithdrawableDtbDocr mOriginalModel;
|
||||
|
||||
public String getGroupTitle() {
|
||||
return groupTitle;
|
||||
}
|
||||
|
||||
public PickingResiListModel setGroupTitle(String groupTitle) {
|
||||
this.groupTitle = groupTitle;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getBadge1() {
|
||||
return badge1;
|
||||
}
|
||||
|
||||
public PickingResiListModel setBadge1(String badge1) {
|
||||
this.badge1 = badge1;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDescrizione() {
|
||||
return descrizione;
|
||||
}
|
||||
|
||||
public PickingResiListModel setDescrizione(String descrizione) {
|
||||
this.descrizione = descrizione;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isDescrizionePresente() {
|
||||
return descrizionePresente;
|
||||
}
|
||||
|
||||
public PickingResiListModel setDescrizionePresente(boolean descrizionePresente) {
|
||||
this.descrizionePresente = descrizionePresente;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getQtaEvasa() {
|
||||
return qtaEvasa;
|
||||
}
|
||||
|
||||
public PickingResiListModel setQtaEvasa(BigDecimal qtaEvasa) {
|
||||
this.qtaEvasa = qtaEvasa;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getQtaTot() {
|
||||
return qtaTot;
|
||||
}
|
||||
|
||||
public PickingResiListModel setQtaTot(BigDecimal qtaTot) {
|
||||
this.qtaTot = qtaTot;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getUntMis() {
|
||||
return untMis;
|
||||
}
|
||||
|
||||
public PickingResiListModel setUntMis(String untMis) {
|
||||
this.untMis = untMis;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return active;
|
||||
}
|
||||
|
||||
public PickingResiListModel setActive(boolean active) {
|
||||
this.active = active;
|
||||
return this;
|
||||
}
|
||||
|
||||
public WithdrawableDtbDocr getOriginalModel() {
|
||||
return mOriginalModel;
|
||||
}
|
||||
|
||||
public PickingResiListModel setOriginalModel(WithdrawableDtbDocr originalModel) {
|
||||
this.mOriginalModel = originalModel;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi.exceptions;
|
||||
|
||||
public class DocumentsLoadException extends Exception {
|
||||
|
||||
public DocumentsLoadException(Throwable cause) {
|
||||
super("Errore durante il caricamento dei documenti");
|
||||
initCause(cause);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,232 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi.rest;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.DtbDocr;
|
||||
import it.integry.integrywmsnative.core.model.MtbAart;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityQuery;
|
||||
|
||||
@Singleton
|
||||
public class PickingResiRESTConsumer {
|
||||
|
||||
|
||||
private final SystemRESTConsumer mSystemRestConsumer;
|
||||
|
||||
@Inject
|
||||
public PickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
||||
this.mSystemRestConsumer = systemRESTConsumer;
|
||||
}
|
||||
|
||||
public void loadDocRows(List<DocumentoResoDTO> documents, RunnableArgs<ArrayList<WithdrawableDtbDocr>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||
List<HashMap<String, Object>> filterCond = new ArrayList<>();
|
||||
|
||||
for(int i = 0; i < documents.size(); i++) {
|
||||
HashMap<String, Object> filter = new HashMap<>();
|
||||
|
||||
filter.put("dtb_docr.data_doc", documents.get(i).getDataDocD());
|
||||
filter.put("dtb_docr.num_doc", documents.get(i).getNumDoc());
|
||||
filter.put("dtb_docr.ser_doc", documents.get(i).getSerDoc());
|
||||
filter.put("dtb_docr.cod_anag", documents.get(i).getCodAnag());
|
||||
filter.put("dtb_docr.cod_dtip", documents.get(i).getCodDtip());
|
||||
|
||||
filterCond.add(filter);
|
||||
}
|
||||
|
||||
String sql = "SELECT dtb_docr.[cod_anag]" +
|
||||
" ,dtb_docr.[cod_dtip]" +
|
||||
" ,dtb_docr.[data_doc]" +
|
||||
" ,dtb_docr.[ser_doc]" +
|
||||
" ,dtb_docr.[num_doc]" +
|
||||
" ,dtb_docr.[id_riga]" +
|
||||
" ,dtb_docr.[cod_mart]" +
|
||||
" ,dtb_docr.[descrizione]" +
|
||||
" ,dtb_docr.[unt_doc]" +
|
||||
" ,(dtb_docr.[rap_conv] / dtb_docr.[rap_conv]) as rap_conv" +
|
||||
" ,(dtb_docr.[qta_doc] * dtb_docr.[rap_conv]) - ISNULL(mtb_colr.qta_col, 0) as qta_doc" +
|
||||
" ,dtb_docr.[val_unt]" +
|
||||
" ,dtb_docr.[sconto5]" +
|
||||
" ,dtb_docr.[sconto6]" +
|
||||
" ,dtb_docr.[sconto7]" +
|
||||
" ,dtb_docr.[sconto8]" +
|
||||
" ,dtb_docr.[cod_aliq]" +
|
||||
" ,dtb_docr.[perc_prov]" +
|
||||
" ,dtb_docr.[val_prov]" +
|
||||
" ,dtb_docr.[data_ord]" +
|
||||
" ,dtb_docr.[num_ord]" +
|
||||
" ,dtb_docr.[riga_ord]" +
|
||||
" ,dtb_docr.[importo_riga]" +
|
||||
" ,dtb_docr.[cod_col]" +
|
||||
" ,dtb_docr.[cod_tagl]" +
|
||||
" ,dtb_docr.[cod_jcom]" +
|
||||
" ,dtb_docr.[cod_mdep]" +
|
||||
" ,dtb_docr.[perc_gest]" +
|
||||
" ,dtb_docr.[val_gest]" +
|
||||
" ,dtb_docr.[partita_mag]" +
|
||||
" ,dtb_docr.[val_unt_iva]" +
|
||||
" ,dtb_docr.[qta_cnf]" +
|
||||
" ,dtb_docr.[descrizione_estesa]" +
|
||||
" ,dtb_docr.[costo_unt]" +
|
||||
" ,dtb_docr.[perc_ispe]" +
|
||||
" ,dtb_docr.[val_ispe]" +
|
||||
" ,dtb_docr.[perc_promo]" +
|
||||
" ,dtb_docr.[val_promo]" +
|
||||
" ,dtb_docr.[perc_oneri]" +
|
||||
" ,dtb_docr.[val_oneri]" +
|
||||
" ,dtb_docr.[flag_evaso_forzato]" +
|
||||
" ,dtb_docr.[cod_dtip_comp]" +
|
||||
" ,dtb_docr.[data_doc_comp]" +
|
||||
" ,dtb_docr.[ser_doc_comp]" +
|
||||
" ,dtb_docr.[num_doc_comp]" +
|
||||
" ,dtb_docr.[cod_promo]" +
|
||||
" ,dtb_docr.[perc_prov2]" +
|
||||
" ,dtb_docr.[val_prov2]" +
|
||||
" ,dtb_docr.[cod_art_for]" +
|
||||
" ,dtb_docr.[unt_doc2]" +
|
||||
" ,dtb_docr.[qta_doc2]" +
|
||||
" ,dtb_docr.[unt_doc3]" +
|
||||
" ,dtb_docr.[qta_doc3]" +
|
||||
" ,dtb_docr.[num_cnf]" +
|
||||
" ,dtb_docr.[peso_lordo]" +
|
||||
" ,dtb_docr.[posizione]" +
|
||||
" ,dtb_docr.[cod_anag_comp]" +
|
||||
" ,dtb_docr.[cod_mtip]" +
|
||||
" ,dtb_docr.[matricola]" +
|
||||
" ,dtb_docr.[data_iniz_comp]" +
|
||||
" ,dtb_docr.[data_fine_comp]" +
|
||||
" ,dtb_docr.[cod_kit]" +
|
||||
" ,dtb_docr.[cod_alis]" +
|
||||
" ,dtb_docr.[data_ins_row]" +
|
||||
" ,dtb_docr.[note] " +
|
||||
" ,dtb_doct.[gestione] " +
|
||||
" ,mtb_partita_mag.[data_scad] as data_scad_partita_mag " +
|
||||
"FROM dtb_docr " +
|
||||
"INNER JOIN dtb_doct ON dtb_docr.num_doc = dtb_doct.num_doc AND dtb_docr.data_doc = dtb_doct.data_doc AND dtb_docr.cod_anag = dtb_doct.cod_anag AND dtb_docr.cod_dtip = dtb_doct.cod_dtip AND dtb_docr.ser_doc = dtb_doct.ser_doc " +
|
||||
"INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart " +
|
||||
"LEFT OUTER JOIN mtb_partita_mag ON dtb_docr.cod_mart = mtb_partita_mag.cod_mart " +
|
||||
" AND dtb_docr.partita_mag = mtb_partita_mag.partita_mag " +
|
||||
"LEFT OUTER JOIN ctb_cont ON mtb_aart.cod_ccon_ricavi = ctb_cont.cod_ccon " +
|
||||
"LEFT OUTER JOIN ctb_grup ON ctb_cont.cod_cgrp = ctb_grup.cod_cgrp " +
|
||||
"LEFT OUTER JOIN (" +
|
||||
" SELECT gestione," +
|
||||
" cod_mart," +
|
||||
" cod_col," +
|
||||
" cod_tagl," +
|
||||
" SUM(qta_col) as qta_col," +
|
||||
" data_ord," +
|
||||
" num_ord," +
|
||||
" riga_ord," +
|
||||
" partita_mag," +
|
||||
" qta_cnf," +
|
||||
" gestione_rif," +
|
||||
" data_collo_rif," +
|
||||
" ser_collo_rif," +
|
||||
" num_collo_rif," +
|
||||
" cod_jcom," +
|
||||
" SUM(num_cnf) as num_cnf," +
|
||||
" cod_anag_doc," +
|
||||
" cod_dtip_doc," +
|
||||
" data_doc," +
|
||||
" ser_doc," +
|
||||
" num_doc," +
|
||||
" id_riga_doc" +
|
||||
" FROM mtb_colr" +
|
||||
" GROUP BY gestione," +
|
||||
" cod_barre," +
|
||||
" cod_mart," +
|
||||
" cod_col," +
|
||||
" cod_tagl," +
|
||||
" data_ord," +
|
||||
" num_ord," +
|
||||
" riga_ord," +
|
||||
" partita_mag," +
|
||||
" qta_cnf," +
|
||||
" gestione_rif," +
|
||||
" data_collo_rif," +
|
||||
" ser_collo_rif," +
|
||||
" num_collo_rif," +
|
||||
" cod_jcom," +
|
||||
" cod_anag_doc," +
|
||||
" cod_dtip_doc," +
|
||||
" data_doc," +
|
||||
" ser_doc," +
|
||||
" num_doc," +
|
||||
" id_riga_doc" +
|
||||
" ) mtb_colr" +
|
||||
" ON " +
|
||||
" dtb_docr.cod_anag = mtb_colr.cod_anag_doc AND " +
|
||||
" dtb_docr.cod_dtip = mtb_colr.cod_dtip_doc AND " +
|
||||
" dtb_docr.ser_doc = mtb_colr.ser_doc AND " +
|
||||
" dtb_docr.data_doc = mtb_colr.data_doc AND " +
|
||||
" dtb_docr.num_doc = mtb_colr.num_doc AND " +
|
||||
" dtb_docr.id_riga = mtb_colr.id_riga_doc " +
|
||||
"WHERE " +
|
||||
" (ctb_grup.sezione <> 1 OR ctb_grup.sezione IS NULL) AND " +
|
||||
" dtb_docr.[qta_doc] - ISNULL(mtb_colr.qta_col, 0) > 0 AND" +
|
||||
" ( " +
|
||||
UtilityQuery.concatFieldListInWhereCond(filterCond) +
|
||||
" ) " +
|
||||
"ORDER BY cod_mart";
|
||||
|
||||
|
||||
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {}.getType();
|
||||
this.mSystemRestConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<WithdrawableDtbDocr>>() {
|
||||
@Override
|
||||
public void onSuccess(ArrayList<WithdrawableDtbDocr> values) {
|
||||
|
||||
if(values != null && values.size() > 0){
|
||||
List<String> codMarts = Stream.of(values)
|
||||
.map(DtbDocr::getCodMart)
|
||||
.withoutNulls()
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
ArticoloRESTConsumer.getByCodMart(codMarts, arts -> {
|
||||
|
||||
if(arts != null && arts.size() > 0) {
|
||||
for (DtbDocr value : values) {
|
||||
|
||||
MtbAart foundMtbAart = null;
|
||||
|
||||
List<MtbAart> mtbAartStream = Stream.of(arts)
|
||||
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
|
||||
|
||||
if(mtbAartStream != null && mtbAartStream.size() > 0){
|
||||
foundMtbAart = mtbAartStream.get(0);
|
||||
}
|
||||
|
||||
value.setMtbAart(foundMtbAart);
|
||||
}
|
||||
|
||||
|
||||
if(onComplete != null) onComplete.run(values);
|
||||
}
|
||||
|
||||
}, onFailed);
|
||||
|
||||
} else {
|
||||
if(onComplete != null) onComplete.run(values);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(Exception ex) {
|
||||
if(onFailed != null) onFailed.run(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi.dto;
|
||||
package it.integry.integrywmsnative.gest.picking_resi.rest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -0,0 +1,548 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi_OLD;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.SpannableString;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.databinding.ObservableArrayList;
|
||||
import androidx.databinding.ObservableField;
|
||||
import androidx.databinding.ObservableList;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.tfb.fbtoast.FBToast;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||
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.expansion.BaseActivity;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.CommonModelConsts;
|
||||
import it.integry.integrywmsnative.core.model.MtbColr;
|
||||
import it.integry.integrywmsnative.core.model.MtbColt;
|
||||
import it.integry.integrywmsnative.core.report.ReportManager;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityNumber;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.databinding.ActivityPickingResiBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi_OLD.core.PickingResiListAdapter;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
|
||||
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
|
||||
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
|
||||
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
|
||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
|
||||
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
|
||||
|
||||
public class PickingResiActivity extends BaseActivity implements IOnColloClosedCallback {
|
||||
|
||||
private List<DocumentoResoDTO> mDocumentiResiList;
|
||||
public ObservableList<WithdrawableDtbDocr> mDtbDocrList;
|
||||
private final List<MtbColt> mColliRegistrati = new ArrayList<>();
|
||||
|
||||
private ActivityPickingResiBinding mBinding;
|
||||
private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
|
||||
|
||||
public ObservableField<MtbColt> currentMtbColt = new ObservableField<>();
|
||||
|
||||
private PickingResiListAdapter mAdapter;
|
||||
|
||||
private int barcodeScannerIstanceID = -1;
|
||||
|
||||
private String mActivityTitle;
|
||||
private String mDefaultGestioneOfUL;
|
||||
private String mDefaultCodAnagOfUL;
|
||||
private Integer mDefaultSegnoOfUL;
|
||||
|
||||
|
||||
public static void startActivity(Context context, String activityTitle, List<DocumentoResoDTO> documentoResoDTOList, Integer segno) {
|
||||
String consegneCacheKey = DataCache.addItem(documentoResoDTOList);
|
||||
|
||||
Intent intent = new Intent(context, PickingResiActivity.class);
|
||||
intent.putExtra("activity_title", activityTitle);
|
||||
intent.putExtra("key", consegneCacheKey);
|
||||
intent.putExtra("segno", segno);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi);
|
||||
// mBinding.setViewmodel(this);
|
||||
|
||||
this.mDtbDocrList = new ObservableArrayList<>();
|
||||
|
||||
// mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, this.mBinding.bottomSheetInclude);
|
||||
// mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this);
|
||||
// mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::onItemEdited);
|
||||
// mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::onItemDeleted);
|
||||
|
||||
|
||||
mDocumentiResiList = DataCache.retrieveItem(getIntent().getStringExtra("key"));
|
||||
mDefaultSegnoOfUL = getIntent().getIntExtra("segno", +1);
|
||||
|
||||
mActivityTitle = getIntent().getStringExtra("activity_title");
|
||||
|
||||
this.initView();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSupportNavigateUp() {
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if(mArticoliInColloBottomSheetViewModel.isExpanded()){
|
||||
mArticoliInColloBottomSheetViewModel.collapse();
|
||||
}
|
||||
else if(thereIsAnOpenedUL()) {
|
||||
mArticoliInColloBottomSheetViewModel.closeCurrentUL(() -> {
|
||||
BarcodeManager.removeCallback(barcodeScannerIstanceID);
|
||||
super.onBackPressed();
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
BarcodeManager.removeCallback(barcodeScannerIstanceID);
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(this::onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
|
||||
|
||||
|
||||
setSupportActionBar(this.mBinding.toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
getSupportActionBar().setTitle(mActivityTitle);
|
||||
|
||||
this.mBinding.elevatedToolbar.setRecyclerView(this.mBinding.mainList);
|
||||
|
||||
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(this);
|
||||
UltimeConsegneClienteRESTConsumer.loadDocRowFromConsegna(mDocumentiResiList, dtbDocrToPick -> {
|
||||
progressDialog.dismiss();
|
||||
this.mDtbDocrList.addAll(dtbDocrToPick);
|
||||
|
||||
try {
|
||||
this.initDatiPicking();
|
||||
} catch (Exception ex) {
|
||||
DialogSimpleMessageHelper.showSimpleErrorDialog(this, ex.getMessage());
|
||||
}
|
||||
|
||||
this.initList();
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, progressDialog);
|
||||
});
|
||||
}
|
||||
|
||||
private void initList() {
|
||||
|
||||
mAdapter = new PickingResiListAdapter(this, this.mDtbDocrList);
|
||||
mAdapter.setOnItemClicked(this::onOrdineRowDispatch);
|
||||
|
||||
this.mBinding.mainList.setLayoutManager(new LinearLayoutManager(this));
|
||||
this.mBinding.mainList.setAdapter(mAdapter);
|
||||
}
|
||||
|
||||
private void initDatiPicking() throws Exception {
|
||||
List<String> foundGestioni = Stream.of(this.mDocumentiResiList)
|
||||
.map(DocumentoResoDTO::getGestione)
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.toList();
|
||||
|
||||
if(foundGestioni.size() > 1) {
|
||||
throw new Exception("Sono stati caricati documenti con diverse gestioni");
|
||||
} else mDefaultGestioneOfUL = foundGestioni.get(0);
|
||||
|
||||
|
||||
List<String> foundCodAnags = Stream.of(this.mDocumentiResiList)
|
||||
.map(DocumentoResoDTO::getCodAnag)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
if(foundCodAnags.size() > 1) {
|
||||
throw new Exception("Sono stati caricati documenti con diversi codici anagrafici");
|
||||
} else mDefaultCodAnagOfUL = foundCodAnags.get(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void onScanSuccessful(BarcodeScanDTO data) {
|
||||
|
||||
}
|
||||
|
||||
public void createNewUL() {
|
||||
this.createNewUL(null, null, null, false, true, null);
|
||||
}
|
||||
|
||||
public void createNewUL(Integer customNumCollo, String customSerCollo, Dialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) {
|
||||
this.mBinding.mainFab.close(true);
|
||||
|
||||
if (progress == null){
|
||||
progress = UtilityProgress.createDefaultProgressDialog(this);
|
||||
}
|
||||
|
||||
MtbColt mtbColt = new MtbColt();
|
||||
mtbColt.initDefaultFields();
|
||||
mtbColt .setGestione(mDefaultGestioneOfUL)
|
||||
.setSegno(mDefaultSegnoOfUL)
|
||||
.setCodAnag(mDefaultCodAnagOfUL)
|
||||
.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep())
|
||||
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||
|
||||
|
||||
if(customNumCollo != null) {
|
||||
mtbColt.setNumCollo(customNumCollo);
|
||||
}
|
||||
|
||||
if(!UtilityString.isNullOrEmpty(customSerCollo)) {
|
||||
mtbColt.setSerCollo(customSerCollo);
|
||||
}
|
||||
|
||||
|
||||
Dialog finalProgress = progress;
|
||||
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColt, value -> {
|
||||
|
||||
value.setDisablePrint(disablePrint);
|
||||
|
||||
setULToCurrentContext(value);
|
||||
|
||||
if(closeProgress) finalProgress.dismiss();
|
||||
|
||||
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
|
||||
|
||||
if(onComplete != null) onComplete.run();
|
||||
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, finalProgress);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void setULToCurrentContext(MtbColt mtbColt){
|
||||
if(mtbColt != null && mtbColt.getMtbColr() == null) {
|
||||
mtbColt.setMtbColr(new ObservableArrayList<>());
|
||||
}
|
||||
|
||||
this.currentMtbColt.set(mtbColt);
|
||||
mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void onOrdineRowDispatch(final WithdrawableDtbDocr item) {
|
||||
if(currentMtbColt.get() != null){
|
||||
|
||||
List<MtbColr> currentMtbColrs = item.getWithdrawRows();
|
||||
|
||||
BigDecimal qtaEvasaTotaleInMtbColr = BigDecimal.ZERO;
|
||||
for (MtbColr mtbColr : currentMtbColrs) {
|
||||
qtaEvasaTotaleInMtbColr.add(mtbColr.getQtaCol());
|
||||
}
|
||||
|
||||
BigDecimal qtaDaEvadere = item.getQtaDoc().subtract(qtaEvasaTotaleInMtbColr);
|
||||
if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO;
|
||||
|
||||
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
|
||||
.setBatchLot(item.getPartitaMag())
|
||||
.setCodArtFor(item.getCodArtFor())
|
||||
.setMtbAart(item.getMtbAart())
|
||||
.setQtaDisponibile(qtaDaEvadere)
|
||||
.setQtaTot(qtaDaEvadere)
|
||||
.setQtaEvasa(qtaEvasaTotaleInMtbColr)
|
||||
.setCanPartitaMagBeChanged(false)
|
||||
.setMaxQta(qtaDaEvadere);
|
||||
|
||||
|
||||
DialogInputQuantity.makeBase(this, dto, false, (quantityDTO, closeUL) -> {
|
||||
onOrdineRowDispatched(item, quantityDTO, closeUL);
|
||||
|
||||
}, null).show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void onOrdineRowDispatched(WithdrawableDtbDocr item, QuantityDTO quantityDTO, boolean closeUL){
|
||||
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
|
||||
|
||||
final MtbColr mtbColr = new MtbColr()
|
||||
.setCodMart(item.getCodMart())
|
||||
.setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get()))
|
||||
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
|
||||
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
|
||||
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
|
||||
.setDescrizione(item.getDescrizioneEstesa())
|
||||
.setDatetimeRow(UtilityDate.getDateInstance())
|
||||
|
||||
.setCodAnagDoc(item.getCodAnag())
|
||||
.setCodDtipDoc(item.getCodDtip())
|
||||
.setSerDoc(item.getSerDoc())
|
||||
.setNumDoc(item.getNumDoc())
|
||||
.setDataDoc(item.getDataDocS())
|
||||
.setIdRigaDoc(item.getIdRiga());
|
||||
// .setCodJcom(item.getCodJcom());
|
||||
|
||||
|
||||
|
||||
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||
|
||||
MtbColt cloneMtbColt = (MtbColt) currentMtbColt.get().clone();
|
||||
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
|
||||
|
||||
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
|
||||
cloneMtbColt.getMtbColr().add(mtbColr);
|
||||
|
||||
ColliMagazzinoRESTConsumer.saveColloStatic(cloneMtbColt, value -> {
|
||||
|
||||
mtbColr
|
||||
.setDataCollo(value.getDataColloS())
|
||||
.setNumCollo(value.getNumCollo())
|
||||
.setGestione(value.getGestione())
|
||||
.setSerCollo(value.getSerCollo())
|
||||
.setRiga(value.getMtbColr().get(0).getRiga())
|
||||
.setUntMis(item.getMtbAart().getUntMis())
|
||||
.setMtbAart(item.getMtbAart());
|
||||
|
||||
item.getWithdrawRows().add(mtbColr);
|
||||
|
||||
this.refreshDtbDocrItem(item);
|
||||
|
||||
currentMtbColt.get().getMtbColr().add(mtbColr);
|
||||
|
||||
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
|
||||
removeListFilter();
|
||||
|
||||
FBToast.successToast(this, this.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
|
||||
|
||||
progress.dismiss();
|
||||
|
||||
// if(closeUL) onColloClosed(null);
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, progress);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onColloClosed(Runnable onComplete, boolean shouldPrint) {
|
||||
if(thereIsAnOpenedUL()) {
|
||||
|
||||
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
|
||||
progress.show();
|
||||
|
||||
if(thereIsAnyRowInUL()) {
|
||||
NoteAggiuntiveLUDialog.make(this, noteString -> {
|
||||
|
||||
MtbColt currentLU = currentMtbColt.get();
|
||||
|
||||
Runnable postNoteSave = () -> {
|
||||
ColliMagazzinoRESTConsumer.updateDataFineStatic(
|
||||
currentLU,
|
||||
() -> printCollo(progress, currentMtbColt.get(), onComplete),
|
||||
ex -> UtilityExceptions.defaultException(this, ex, progress));
|
||||
};
|
||||
|
||||
if(!UtilityString.isNullOrEmpty(noteString)) {
|
||||
currentLU.setAnnotazioni(noteString);
|
||||
|
||||
ColliMagazzinoRESTConsumer.saveColloStatic(currentLU, mtbColt -> {
|
||||
postNoteSave.run();
|
||||
}, ex -> UtilityExceptions.defaultException(this, ex, progress));
|
||||
} else postNoteSave.run();
|
||||
|
||||
|
||||
}, () -> {
|
||||
|
||||
}).show();
|
||||
} else {
|
||||
deleteCollo(progress, onComplete);
|
||||
}
|
||||
|
||||
} else {
|
||||
if(onComplete != null) onComplete.run();
|
||||
}
|
||||
}
|
||||
|
||||
private void onItemEdited(MtbColr mtbColrOriginal, MtbColr mtbColrEdited) {
|
||||
for(int i = 0; i < mDtbDocrList.size(); i++) {
|
||||
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrOriginal);
|
||||
|
||||
if(foundIndex >= 0){
|
||||
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
|
||||
mDtbDocrList.get(i).getWithdrawRows().add(foundIndex, mtbColrEdited);
|
||||
|
||||
refreshDtbDocrItem(this.mDtbDocrList.get(i));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onItemDeleted(MtbColr mtbColrDeleted) {
|
||||
for(int i = 0; i < mDtbDocrList.size(); i++) {
|
||||
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrDeleted);
|
||||
|
||||
if(foundIndex >= 0){
|
||||
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
|
||||
|
||||
refreshDtbDocrItem(this.mDtbDocrList.get(i));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void printCollo(Dialog progress, MtbColt mtbColtToPrint, Runnable onComplete) {
|
||||
DialogAskShouldPrint.make(this, "Packing List", shouldPrint -> {
|
||||
|
||||
if(shouldPrint) {
|
||||
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
|
||||
|
||||
if (printerList.size() > 0) {
|
||||
try {
|
||||
singlePrint(mtbColtToPrint, printerList.get(0), () -> {
|
||||
postCloseOperations(mtbColtToPrint, onComplete);
|
||||
progress.dismiss();
|
||||
}, ex -> {
|
||||
progress.dismiss();
|
||||
String errorMessage = ex.getMessage();
|
||||
DialogSimpleMessageHelper.makeErrorDialog(
|
||||
this,
|
||||
new SpannableString(errorMessage),
|
||||
null,
|
||||
null,
|
||||
R.string.button_ignore_print,
|
||||
() -> postCloseOperations(mtbColtToPrint, onComplete)).show();
|
||||
});
|
||||
|
||||
} catch (Exception ex) {
|
||||
UtilityExceptions.defaultException(this, ex, progress);
|
||||
postCloseOperations(mtbColtToPrint, onComplete);
|
||||
}
|
||||
} else {
|
||||
progress.dismiss();
|
||||
String errorMessage = "Nessuna stampante configurata";
|
||||
DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(errorMessage), null, () -> postCloseOperations(mtbColtToPrint, onComplete)).show();
|
||||
}
|
||||
}, ex -> {
|
||||
UtilityExceptions.defaultException(this, ex, progress);
|
||||
});
|
||||
} else {
|
||||
postCloseOperations(mtbColtToPrint, onComplete);
|
||||
progress.dismiss();
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
|
||||
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
|
||||
|
||||
PrinterRESTConsumer.printColloStatic(
|
||||
printerName,
|
||||
mtbColtToPrint,
|
||||
1,
|
||||
reportName, onComplete, onAbort);
|
||||
|
||||
}, onAbort);
|
||||
}
|
||||
|
||||
private void postCloseOperations(MtbColt generatedMtbColt, Runnable onComplete) {
|
||||
this.mColliRegistrati.add(generatedMtbColt);
|
||||
|
||||
setULToCurrentContext(null);
|
||||
|
||||
for(int i = 0; i < this.mDtbDocrList.size(); i++) {
|
||||
WithdrawableDtbDocr dtbDocr = this.mDtbDocrList.get(i);
|
||||
|
||||
List<MtbColr> withdraws = dtbDocr.getWithdrawRows();
|
||||
|
||||
for(int k = 0; k < withdraws.size(); k++) {
|
||||
MtbColr withdrawRow = withdraws.get(k);
|
||||
|
||||
dtbDocr.setQtaDoc(dtbDocr.getQtaDoc().subtract(withdrawRow.getQtaCol()));
|
||||
}
|
||||
|
||||
dtbDocr.getWithdrawRows().clear();
|
||||
|
||||
if(UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc()) <= 0) {
|
||||
this.mDtbDocrList.remove(dtbDocr);
|
||||
i--;
|
||||
} else this.refreshDtbDocrItem(dtbDocr);
|
||||
}
|
||||
|
||||
removeListFilter();
|
||||
|
||||
if(onComplete != null) onComplete.run();
|
||||
}
|
||||
|
||||
|
||||
private void deleteCollo(Dialog progress, Runnable onComplete) {
|
||||
|
||||
ColliMagazzinoRESTConsumer.deleteColloStatic(currentMtbColt.get(), () -> {
|
||||
setULToCurrentContext(null);
|
||||
|
||||
progress.dismiss();
|
||||
|
||||
|
||||
if(onComplete != null) onComplete.run();
|
||||
}, ex -> UtilityExceptions.defaultException(this, ex, progress)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public boolean thereIsAnOpenedUL() {
|
||||
return currentMtbColt.get() != null;
|
||||
}
|
||||
|
||||
public boolean thereIsAnyRowInUL() {
|
||||
return currentMtbColt.get() != null &&
|
||||
currentMtbColt.get().getMtbColr() != null &&
|
||||
currentMtbColt.get().getMtbColr().size() > 0;
|
||||
}
|
||||
|
||||
|
||||
private void refreshDtbDocrItem(WithdrawableDtbDocr dtbDocr) {
|
||||
int index = this.mDtbDocrList.indexOf(dtbDocr);
|
||||
this.mDtbDocrList.remove(dtbDocr);
|
||||
this.mDtbDocrList.add(index, dtbDocr);
|
||||
}
|
||||
|
||||
|
||||
public void removeListFilter() {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,197 @@
|
||||
package it.integry.integrywmsnative.gest.picking_resi_OLD.core;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.databinding.ObservableList;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.DtbDocr;
|
||||
import it.integry.integrywmsnative.core.model.MtbColr;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityNumber;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityResources;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding;
|
||||
import it.integry.integrywmsnative.databinding.PickingResiMainListItemHeaderBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||
|
||||
public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<PickingResiListAdapter.SubheaderHolder, PickingResiListAdapter.SingleItemViewHolder> {
|
||||
|
||||
|
||||
private Context mContext;
|
||||
|
||||
private List<WithdrawableDtbDocr> mDataset;
|
||||
|
||||
private RunnableArgs<WithdrawableDtbDocr> mOnItemClicked;
|
||||
|
||||
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
PickingResiMainListItemHeaderBinding mBinding;
|
||||
|
||||
SubheaderHolder(PickingResiMainListItemHeaderBinding binding) {
|
||||
super(binding.getRoot());
|
||||
this.mBinding = binding;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
PickingResiMainListItemBinding mBinding;
|
||||
|
||||
SingleItemViewHolder(PickingResiMainListItemBinding binding) {
|
||||
super(binding.getRoot());
|
||||
this.mBinding = binding;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public PickingResiListAdapter(Context context, ObservableList<WithdrawableDtbDocr> data) {
|
||||
this.mContext = context;
|
||||
this.mDataset = new ArrayList<>();
|
||||
|
||||
refreshData(data);
|
||||
|
||||
data.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<WithdrawableDtbDocr>>() {
|
||||
@Override
|
||||
public void onChanged(ObservableList<WithdrawableDtbDocr> sender) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeChanged(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeInserted(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeMoved(ObservableList<WithdrawableDtbDocr> sender, int fromPosition, int toPosition, int itemCount) {
|
||||
refreshData(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemRangeRemoved(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
|
||||
refreshData(sender);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void refreshData(List<WithdrawableDtbDocr> data) {
|
||||
this.mDataset.clear();
|
||||
this.mDataset.addAll(Stream.of(data)
|
||||
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
|
||||
.toList());
|
||||
|
||||
this.notifyDataChanged();
|
||||
}
|
||||
|
||||
public void setOnItemClicked(RunnableArgs<WithdrawableDtbDocr> onItemClicked) {
|
||||
this.mOnItemClicked = onItemClicked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
||||
PickingResiMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item, parent, false);
|
||||
return new SingleItemViewHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
||||
PickingResiMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item_header, parent, false);
|
||||
return new SubheaderHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) {
|
||||
final WithdrawableDtbDocr dtbDocr = this.mDataset.get(position);
|
||||
|
||||
BigDecimal qtaColEvasa = BigDecimal.ZERO;
|
||||
BigDecimal numCnfColEvasa = BigDecimal.ZERO;
|
||||
|
||||
for(MtbColr mtbColr : dtbDocr.getWithdrawRows()) {
|
||||
qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol());
|
||||
numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf());
|
||||
}
|
||||
|
||||
Float qtaDaEvadere = UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc().subtract(qtaColEvasa));
|
||||
|
||||
holder.mBinding.badge1.setText(dtbDocr.getCodMart());
|
||||
holder.mBinding.descrizione.setText(UtilityString.isNullOrEmpty(dtbDocr.getDescrizioneEstesa()) ? dtbDocr.getDescrizioneEstesa() : dtbDocr.getDescrizione());
|
||||
|
||||
|
||||
|
||||
//Setting qty with unt_mis
|
||||
if(!SettingsManager.iDB().isFlagForceAllToColli() && (dtbDocr.getMtbAart() == null || dtbDocr.getMtbAart().isFlagQtaCnfFissaBoolean())){
|
||||
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(qtaColEvasa));
|
||||
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getQtaDoc()));
|
||||
holder.mBinding.untMis.setText(dtbDocr.getUntDoc());
|
||||
} else {
|
||||
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(numCnfColEvasa));
|
||||
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getNumCnf()));
|
||||
holder.mBinding.untMis.setText(UtilityResources.getString(R.string.unt_mis_col));
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (qtaDaEvadere <= 0 ) {
|
||||
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
|
||||
} else if (qtaDaEvadere > 0 && qtaColEvasa.floatValue() > 0) {
|
||||
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
|
||||
} else {
|
||||
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.full_white));
|
||||
}
|
||||
|
||||
holder.mBinding.getRoot().setOnClickListener(v -> {
|
||||
if(this.mOnItemClicked != null) this.mOnItemClicked.run(dtbDocr);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
|
||||
DtbDocr nextDtbDocr = this.mDataset.get(nextItemPosition);
|
||||
subheaderHolder.mBinding.groupTitle.setText(nextDtbDocr.getCodDtip() + " - N° " + nextDtbDocr.getNumDoc() + " del " + UtilityDate.formatDate(nextDtbDocr.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPlaceSubheaderBetweenItems(int position) {
|
||||
|
||||
DtbDocr compare1 = this.mDataset.get(position);
|
||||
DtbDocr compare2 = this.mDataset.get(position + 1);
|
||||
|
||||
if( !compare1.getDataDocS().equalsIgnoreCase(compare2.getDataDocS()) ||
|
||||
!compare1.getSerDoc().equalsIgnoreCase(compare2.getSerDoc()) ||
|
||||
!compare1.getNumDoc().equals(compare2.getNumDoc()) ||
|
||||
!compare1.getCodAnag().equalsIgnoreCase(compare2.getCodAnag()) ||
|
||||
!compare1.getCodDtip().equalsIgnoreCase(compare2.getCodDtip())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemSize() {
|
||||
return this.mDataset.size();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -98,7 +98,7 @@ public class ProdRecuperoMaterialeViewModel {
|
||||
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
|
||||
|
||||
@ -75,7 +75,7 @@ public class DialogScanLisA {
|
||||
}
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
|
||||
|
||||
@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper;
|
||||
import android.app.Activity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
|
||||
@ -16,6 +15,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepositor
|
||||
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
|
||||
public class OrdineAcquistoPvHelper {
|
||||
|
||||
@ -67,7 +67,7 @@ public class OrdineAcquistoPvHelper {
|
||||
|
||||
public void createNewOrder(Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onError) {
|
||||
Ordine ordine = new Ordine();
|
||||
ordine.setDataIns(new Date());
|
||||
ordine.setDataIns(UtilityDate.getDateInstance());
|
||||
ordine.setIdGriglia(griglia.getGrigliaId());
|
||||
mOrdineRepository.insert(ordine, id -> {
|
||||
ordine.setOrdineId(id);
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package it.integry.integrywmsnative.gest.spedizione;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
@ -44,6 +45,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityResources;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityToast;
|
||||
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
|
||||
@ -96,6 +98,21 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
|
||||
|
||||
private final int PICK_UL_REQUEST = 1;
|
||||
|
||||
public static void startActivity(Context context, List<SitArtOrdDTO> ordini, List<OrdineVenditaInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
|
||||
Intent myIntent = new Intent(context, SpedizioneActivity.class);
|
||||
|
||||
String keyPickingList = DataCache.addItem(ordini);
|
||||
myIntent.putExtra("keyPickingList", keyPickingList);
|
||||
|
||||
String keyTestateOrdini = DataCache.addItem(selectedOrders);
|
||||
myIntent.putExtra("keyTestateOrdini", keyTestateOrdini);
|
||||
|
||||
String keyColliRegistrati = DataCache.addItem(mtbColtList);
|
||||
myIntent.putExtra("keyColliRegistrati", keyColliRegistrati);
|
||||
|
||||
context.startActivity(myIntent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@ -249,7 +266,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
|
||||
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
|
||||
|
||||
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
|
||||
spedizioneListModel.setUntMis("col");
|
||||
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
|
||||
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
|
||||
} else {
|
||||
@ -287,7 +304,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
|
||||
cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
|
||||
|
||||
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
|
||||
cloneModel.setUntMis("col");
|
||||
cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
|
||||
BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
|
||||
|
||||
@ -412,7 +429,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
|
||||
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
|
||||
|
||||
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
|
||||
spedizioneListModel.setUntMis("col");
|
||||
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
|
||||
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
|
||||
} else {
|
||||
@ -450,7 +467,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
|
||||
cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
|
||||
|
||||
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
|
||||
cloneModel.setUntMis("col");
|
||||
cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
|
||||
|
||||
BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
|
||||
|
||||
@ -528,7 +545,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
|
||||
}
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
this.openProgress();
|
||||
|
||||
@ -1155,10 +1155,6 @@ public class SpedizioneViewModel {
|
||||
//Se è l'unico articolo del collo (controllo se è uguale a 0 perché ancora non è stato aggiunto nella lista delle righe)
|
||||
if (shouldCloseLU && mCurrentMtbColt.getMtbColr().size() == 0) {
|
||||
shouldPrint = false;
|
||||
// if(UtilityString.isNullOrEmpty(cloneMtbColt.getCodTcol())) {
|
||||
// cloneMtbColt.setCodTcol(pickingObjectDTO.getSitArtOrdDTO().getCodTcol());
|
||||
// cloneMtbColt.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
@ -1387,7 +1383,7 @@ public class SpedizioneViewModel {
|
||||
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onFailed) {
|
||||
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
|
||||
|
||||
PrinterRESTConsumer.printColloStatic(
|
||||
this.mPrinterRESTConsumer.printCollo(
|
||||
printerName,
|
||||
mtbColtToPrint,
|
||||
1,
|
||||
@ -1515,15 +1511,12 @@ public class SpedizioneViewModel {
|
||||
|
||||
public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener {
|
||||
|
||||
|
||||
void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete);
|
||||
|
||||
void onFilterApplied(String newValue);
|
||||
|
||||
void onFilterRemoved();
|
||||
|
||||
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
|
||||
|
||||
void onError(Exception ex);
|
||||
|
||||
void onItemDispatched(PickingObjectDTO pickingObjectDTO,
|
||||
@ -1544,8 +1537,6 @@ public class SpedizioneViewModel {
|
||||
Date dataScad,
|
||||
boolean canOverflowOrderQuantity,
|
||||
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
|
||||
|
||||
void onRowSaved();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -29,9 +29,8 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
|
||||
|
||||
public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<SpedizioneListAdapter.SubheaderHolder, SpedizioneListAdapter.SingleItemViewHolder> {
|
||||
|
||||
|
||||
private Context mContext;
|
||||
private List<SpedizioneListModel> mDataset = new ArrayList<>();
|
||||
private final List<SpedizioneListModel> mDataset = new ArrayList<>();
|
||||
|
||||
private RunnableArgs<PickingObjectDTO> mOnItemClicked;
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ import it.integry.integrywmsnative.core.model.DtbDocr;
|
||||
import it.integry.integrywmsnative.core.model.MtbAart;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDB;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityQuery;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
|
||||
public class UltimeConsegneClienteRESTConsumer {
|
||||
|
||||
@ -1,40 +1,23 @@
|
||||
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore;
|
||||
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.annimon.stream.Optional;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
||||
import it.integry.integrywmsnative.core.model.GtbAnag;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
||||
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
|
||||
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
||||
|
||||
/**
|
||||
|
||||
@ -19,7 +19,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
||||
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
|
||||
import it.integry.integrywmsnative.gest.picking_resi_OLD.PickingResiActivity;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
|
||||
|
||||
|
||||
@ -2,7 +2,6 @@ package it.integry.integrywmsnative.gest.vendita;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableString;
|
||||
@ -25,13 +24,11 @@ import java.util.List;
|
||||
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.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
||||
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
||||
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
|
||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||
import it.integry.integrywmsnative.core.model.MtbColt;
|
||||
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
|
||||
import it.integry.integrywmsnative.core.rest.CommonRESTException;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
|
||||
@ -234,7 +231,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
|
||||
+ "<br />" +
|
||||
"<b>" + alreadyRegisteredUL + "</b> " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)),
|
||||
null,
|
||||
() -> startVenditaActivity(sitArtsDTO, selectedOrders, mtbColtList)
|
||||
() -> SpedizioneActivity.startActivity(getActivity(), sitArtsDTO, selectedOrders, mtbColtList)
|
||||
).show();
|
||||
|
||||
}, ex -> UtilityExceptions.defaultException(getActivity(), ex, progress));
|
||||
@ -350,19 +347,4 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
|
||||
onComplete.run();
|
||||
}
|
||||
}
|
||||
|
||||
private void startVenditaActivity(List<SitArtOrdDTO> ordini, List<OrdineVenditaInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
|
||||
Intent myIntent = new Intent(getActivity(), SpedizioneActivity.class);
|
||||
|
||||
String keyPickingList = DataCache.addItem(ordini);
|
||||
myIntent.putExtra("keyPickingList", keyPickingList);
|
||||
|
||||
String keyTestateOrdini = DataCache.addItem(selectedOrders);
|
||||
myIntent.putExtra("keyTestateOrdini", keyTestateOrdini);
|
||||
|
||||
String keyColliRegistrati = DataCache.addItem(mtbColtList);
|
||||
myIntent.putExtra("keyColliRegistrati", keyColliRegistrati);
|
||||
|
||||
getActivity().startActivity(myIntent);
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,12 +93,14 @@ public class SimpleAutoCompleteDropdownAdapter extends ArrayAdapter {
|
||||
protected void publishResults(CharSequence constraint,
|
||||
FilterResults results) {
|
||||
// NOTE: this function is *always* called from the UI thread.
|
||||
ArrayList<T> filtered = (ArrayList<T>) results.values;
|
||||
notifyDataSetChanged();
|
||||
clear();
|
||||
for (int i = 0, l = filtered.size(); i < l; i++)
|
||||
add(filtered.get(i));
|
||||
notifyDataSetInvalidated();
|
||||
if(constraint != null && constraint.length() > 2) {
|
||||
ArrayList<T> filtered = (ArrayList<T>) results.values;
|
||||
notifyDataSetChanged();
|
||||
clear();
|
||||
for (int i = 0, l = filtered.size(); i < l; i++)
|
||||
add(filtered.get(i));
|
||||
notifyDataSetInvalidated();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -146,7 +146,7 @@ public class DialogAskPositionOfLU {
|
||||
}
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
|
||||
BarcodeManager.disable();
|
||||
|
||||
|
||||
@ -138,7 +138,7 @@ public class DialogChooseArtsFromListaArts {
|
||||
}
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext);
|
||||
|
||||
@ -409,7 +409,7 @@ public class DialogInputQuantity {
|
||||
}
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
if(UtilityBarcode.isEanPeso(data)){
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.res.ColorStateList;
|
||||
@ -27,16 +28,26 @@ import org.jetbrains.annotations.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
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.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
|
||||
import it.integry.integrywmsnative.core.model.MtbUntMis;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityObservable;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
||||
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
|
||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
|
||||
|
||||
public class DialogInputQuantityV2 extends DialogFragment implements DialogInputQuantityV2ViewModel.Listener {
|
||||
|
||||
private DialogInputQuantityV2ViewModel mViewModel;
|
||||
@Inject
|
||||
DialogInputQuantityV2ViewModel mViewModel;
|
||||
private DialogInputQuantityV2DTO mDialogInputQuantityV2DTO;
|
||||
private RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> mOnComplete;
|
||||
private Runnable mOnAbort;
|
||||
@ -60,6 +71,9 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
|
||||
private DialogInputQuantityV2Binding mBindings;
|
||||
private boolean mEnableDataCallback = true;
|
||||
|
||||
private int mBarcodeScannerIstanceID;
|
||||
private Dialog mCurrentProgress;
|
||||
|
||||
public static DialogInputQuantityV2 newInstance(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO, @NotNull RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> onComplete, @NotNull Runnable onAbort) {
|
||||
return new DialogInputQuantityV2(dialogInputQuantityV2DTO, onComplete, onAbort);
|
||||
}
|
||||
@ -74,6 +88,8 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
|
||||
|
||||
this.initBarcode();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@ -85,7 +101,12 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
|
||||
|
||||
mBindings.toolbar.setTitle("Inserimento articolo");
|
||||
|
||||
this.mViewModel = new DialogInputQuantityV2ViewModel()
|
||||
MainApplication.appComponent
|
||||
.dialogInputQuantityV2Component()
|
||||
.create()
|
||||
.inject(this);
|
||||
|
||||
this.mViewModel
|
||||
.setMtbAart(mDialogInputQuantityV2DTO.getMtbAart())
|
||||
.setInitialNumCnf(mDialogInputQuantityV2DTO.getInitialNumCnf())
|
||||
.setInitialQtaCnf(mDialogInputQuantityV2DTO.getInitialQtaCnf())
|
||||
@ -114,6 +135,35 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
|
||||
return mBindings.getRoot();
|
||||
}
|
||||
|
||||
private void initBarcode() {
|
||||
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this.context, ex, false)));
|
||||
}
|
||||
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
this.openProgress();
|
||||
|
||||
this.mViewModel.processBarcodeDTO(data, () -> {
|
||||
BarcodeManager.enable();
|
||||
this.closeProgress();
|
||||
});
|
||||
};
|
||||
|
||||
private void openProgress() {
|
||||
if (this.mCurrentProgress == null) {
|
||||
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
|
||||
}
|
||||
}
|
||||
|
||||
private void closeProgress() {
|
||||
if (mCurrentProgress != null) {
|
||||
mCurrentProgress.dismiss();
|
||||
mCurrentProgress = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
if (this.mViewModel.validate()) {
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
|
||||
|
||||
import dagger.Subcomponent;
|
||||
|
||||
@Subcomponent
|
||||
public interface DialogInputQuantityV2Component {
|
||||
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
DialogInputQuantityV2Component create();
|
||||
}
|
||||
|
||||
void inject(DialogInputQuantityV2 dialogInputQuantityV2);
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||
|
||||
@Module(subcomponents = DialogInputQuantityV2Component.class)
|
||||
public class DialogInputQuantityV2Module {
|
||||
|
||||
@Provides
|
||||
DialogInputQuantityV2ViewModel providesDialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer) {
|
||||
return new DialogInputQuantityV2ViewModel(barcodeRESTConsumer);
|
||||
}
|
||||
|
||||
}
|
||||
@ -5,8 +5,15 @@ import androidx.databinding.ObservableField;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||
import it.integry.integrywmsnative.core.model.MtbAart;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidBatchLotException;
|
||||
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidExpireDateException;
|
||||
@ -55,6 +62,13 @@ public class DialogInputQuantityV2ViewModel {
|
||||
|
||||
private Listener mListener;
|
||||
|
||||
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
|
||||
|
||||
@Inject
|
||||
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer) {
|
||||
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
|
||||
}
|
||||
|
||||
public void init() {
|
||||
if(this.initialNumCnf != null && this.initialQtaTot != null && this.initialQtaCnf != null) {
|
||||
this.internalNumCnf = this.initialNumCnf;
|
||||
@ -87,6 +101,61 @@ public class DialogInputQuantityV2ViewModel {
|
||||
this.mListener.onDataChanged();
|
||||
}
|
||||
|
||||
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
|
||||
if(UtilityBarcode.isEanPeso(barcodeScanDTO)) {
|
||||
Ean13PesoModel ean13PesoModel;
|
||||
|
||||
try {
|
||||
ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
|
||||
} catch (Exception ex) {
|
||||
this.mListener.onError(ex);
|
||||
onComplete.run();
|
||||
return;
|
||||
}
|
||||
|
||||
if(this.mtbAart.get() != null && this.mtbAart.get().getBarCode() != null && ean13PesoModel.getPrecode().contains(this.mtbAart.get().getBarCode())) {
|
||||
this.setQtaTot(BigDecimal.valueOf(ean13PesoModel.getPeso()));
|
||||
}
|
||||
|
||||
onComplete.run();
|
||||
} else if(UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
|
||||
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
|
||||
|
||||
if(ean128Model == null) {
|
||||
onComplete.run();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
|
||||
this.setPartitaMag(ean128Model.BatchLot);
|
||||
}
|
||||
|
||||
try {
|
||||
if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){
|
||||
this.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore));
|
||||
} else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
|
||||
this.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry));
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
this.mListener.onError(ex);
|
||||
}
|
||||
|
||||
if(ean128Model.Count != null && ean128Model.Count > 0) {
|
||||
this.setNumCnf(BigDecimal.valueOf(ean128Model.Count));
|
||||
} else if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
|
||||
this.setQtaTot(BigDecimal.valueOf(ean128Model.NetWeightKg));
|
||||
}
|
||||
|
||||
this.mListener.onDataChanged();
|
||||
onComplete.run();
|
||||
|
||||
}, ex -> {
|
||||
this.mListener.onError(ex);
|
||||
onComplete.run();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public String getPartitaMag() {
|
||||
return internalPartitaMag;
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ public class DialogScanArt {
|
||||
}
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
|
||||
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
|
||||
|
||||
|
||||
@ -126,7 +126,7 @@ public class DialogScanOrCreateLU {
|
||||
}
|
||||
|
||||
|
||||
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||
BarcodeManager.disable();
|
||||
|
||||
final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
|
||||
|
||||
@ -4,9 +4,11 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<data>
|
||||
|
||||
<import type="android.view.View" />
|
||||
|
||||
<variable
|
||||
name="viewmodel"
|
||||
name="pickingResiView"
|
||||
type="it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity" />
|
||||
</data>
|
||||
|
||||
@ -24,8 +26,7 @@
|
||||
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@id/empty_space_padding">
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:id="@+id/appbar"
|
||||
@ -62,65 +63,6 @@
|
||||
android:orientation="vertical"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<net.cachapa.expandablelayout.ExpandableLayout
|
||||
android:id="@+id/filtered_arts_in_list_expandable_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:el_duration="400"
|
||||
app:el_expanded="false">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_toStartOf="@+id/remove_art_filter_list"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="14sp"
|
||||
android:text="@string/filtered_arts_in_list" />
|
||||
<TextView
|
||||
android:id="@+id/description_filter_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@android:color/black"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
tools:text="COD_ART_HERE"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/remove_art_filter_list"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Button.DangerOutline"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:text="@string/remove_filter_button"
|
||||
android:onClick="@{() -> viewmodel.removeListFilter()}"
|
||||
app:strokeColor="@color/red_600"/>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</net.cachapa.expandablelayout.ExpandableLayout>
|
||||
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/main_list"
|
||||
@ -137,7 +79,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:alpha="0.3"
|
||||
android:visibility="@{viewmodel.mDtbDocrList.size() > 0 ? View.GONE : View.VISIBLE}"
|
||||
app:visibility="@{pickingResiView.noItemsToPick}"
|
||||
tools:context=".gest.lista_bancali.ListaBancaliActivity">
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
@ -192,7 +134,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:visibility="@{viewmodel.currentMtbColt == null ? View.VISIBLE : View.GONE}"
|
||||
app:visibility="@{pickingResiView.noLUPresent}"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
@ -233,36 +175,33 @@
|
||||
app:fab_colorNormal="@color/white"
|
||||
app:fab_colorPressed="@color/white_pressed"
|
||||
app:fab_colorRipple="#66FFFFFF"
|
||||
app:onClick="@{() -> viewmodel.createNewUL()}"
|
||||
app:onClick="@{() -> pickingResiView.createNewLU()}"
|
||||
fab:fab_label="@string/action_create_ul" />
|
||||
|
||||
</com.github.clans.fab.FloatingActionMenu>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/empty_space_padding"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}"
|
||||
android:layout_alignParentBottom="true">
|
||||
<!-- <RelativeLayout-->
|
||||
<!-- android:id="@+id/empty_space_padding"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="?attr/actionBarSize"-->
|
||||
<!-- android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}"-->
|
||||
<!-- android:layout_alignParentBottom="true">-->
|
||||
|
||||
</RelativeLayout>
|
||||
<!-- </RelativeLayout>-->
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
<View
|
||||
android:id="@+id/shadow"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="16dp"
|
||||
android:background="@drawable/shape_gradient_top_shadow"
|
||||
android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}"
|
||||
app:layout_anchor="@id/bottom_sheet_include" />
|
||||
|
||||
<include
|
||||
android:id="@+id/bottom_sheet_include"
|
||||
layout="@layout/fragment_articoli_in_collo_bottom_sheet"
|
||||
android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}" />
|
||||
<it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView
|
||||
android:id="@+id/bottom_sheet_lu_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:visibility="@{pickingResiView.bottomSheetEnabled}"
|
||||
app:behavior_hideable="false"
|
||||
app:behavior_peekHeight="66dp"
|
||||
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" />
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
android:focusable="true">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/content_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
@ -37,7 +38,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="right">
|
||||
android:gravity="end">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/qta_evasa"
|
||||
@ -96,5 +97,14 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/deactivated_over_bg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@id/content_view"
|
||||
android:layout_alignBottom="@id/content_view"
|
||||
android:background="@android:color/black"
|
||||
android:alpha="0.15" />
|
||||
|
||||
</RelativeLayout>
|
||||
</layout>
|
||||
@ -10,7 +10,7 @@
|
||||
android:background="@color/mainGreen">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/descrizione"
|
||||
android:id="@+id/group_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="DESCRIZIONE"
|
||||
@ -13,7 +13,7 @@ buildscript {
|
||||
classpath 'com.android.tools.build:gradle:4.1.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath 'com.google.gms:google-services:4.3.4'
|
||||
classpath 'com.google.firebase:perf-plugin:1.3.2'
|
||||
classpath 'com.google.firebase:perf-plugin:1.3.3'
|
||||
|
||||
// Add the Firebase Crashlytics Gradle plugin.
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user