Ricreato caricamento lista principale

This commit is contained in:
Giuseppe Scorrano 2020-11-04 12:40:28 +01:00
parent d3396cdb63
commit f9483e14be
27 changed files with 1654 additions and 708 deletions

View File

@ -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'

View File

@ -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
}
}
}

View File

@ -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"

View File

@ -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;
@ -28,7 +30,8 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
PickingLiberoModule.class,
RettificaGiacenzeModule.class,
SpedizioneModule.class,
AccettazionePickingModule.class})
AccettazionePickingModule.class,
PickingResiModule.class})
public interface MainApplicationComponent {
MainActivityComponent.Factory mainActivityComponent();
@ -38,5 +41,6 @@ public interface MainApplicationComponent {
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
SpedizioneComponent.Factory spedizioneComponent();
AccettazionePickingComponent.Factory accettazionePickingComponent();
PickingResiComponent.Factory pickingResiComponent();
}

View File

@ -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;

View File

@ -1,109 +1,126 @@
package it.integry.integrywmsnative.gest.picking_resi;
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 androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
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.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.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.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.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListModel;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
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 mDefaultSegnoLU;
private int barcodeScannerIstanceID = -1;
public ObservableList<WithdrawableDtbDocr> mDtbDocrList = new ObservableArrayList<>();
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);
mDefaultSegnoLU = 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();
this.mViewmodel.init(mDocumentiResiList);
}
@Override
@ -114,435 +131,177 @@ public class PickingResiActivity extends BaseActivity implements IOnColloClosedC
@Override
public void onBackPressed() {
if(mArticoliInColloBottomSheetViewModel.isExpanded()){
mArticoliInColloBottomSheetViewModel.collapse();
}
else if(thereIsAnOpenedUL()) {
mArticoliInColloBottomSheetViewModel.closeCurrentUL(() -> {
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 initVars() {
this.noLUPresent.addOnPropertyChangedCallback(() -> {
this.bottomSheetEnabled.set(!this.noLUPresent.get());
});
}
else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
private void initView() {
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(this::onScanSuccessful)
.setOnScanSuccessfull(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 initRecyclerView() {
this.mBindings.elevatedToolbar.setRecyclerView(this.mBindings.mainList);
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);
this.mViewmodel.getPickingList().observe(this, updatedData -> {
this.mPickingResiMutableData.clear();
this.mPickingResiMutableData.addAll(convertDataModelToListModel(updatedData));
this.noItemsToPick.set(updatedData.isEmpty());
});
PickingResiListAdapter pickingResiListAdapter = new PickingResiListAdapter(this, mPickingResiMutableData);
this.mBindings.mainList.setAdapter(pickingResiListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this));
pickingResiListAdapter.setOnItemClicked(clickedItem -> {
if (!noLUPresent.get()) {
// this.mViewmodel.dispatchOrdineRow(clickedItem);
}
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()) {
private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) {
List<PickingResiListModel> pickingResiListModels = new ArrayList<>();
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
progress.show();
Stream.of(dataList)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.forEach(x -> {
if(thereIsAnyRowInUL()) {
NoteAggiuntiveLUDialog.make(this, noteString -> {
PickingResiListModel pickingResiListModel = new PickingResiListModel();
MtbColt currentLU = currentMtbColt.get();
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);
Runnable postNoteSave = () -> {
ColliMagazzinoRESTConsumer.updateDataFineStatic(
currentLU,
() -> printCollo(progress, currentMtbColt.get(), onComplete),
ex -> UtilityExceptions.defaultException(this, ex, progress));
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 RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
this.mViewmodel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
this.closeProgress();
});
};
if(!UtilityString.isNullOrEmpty(noteString)) {
currentLU.setAnnotazioni(noteString);
public void createNewLU() {
this.mBindings.mainFab.close(true);
ColliMagazzinoRESTConsumer.saveColloStatic(currentLU, mtbColt -> {
postNoteSave.run();
}, ex -> UtilityExceptions.defaultException(this, ex, progress));
} else postNoteSave.run();
this.openProgress();
}, () -> {
}).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();
this.mViewmodel.createNewLU(null, null, () -> {
this.closeProgress();
});
} 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();
}
@Override
public void onMtbColrEdit(MtbColr mtbColr) {
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);
@Override
public void onMtbColrDelete(MtbColr mtbColr) {
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();
@Override
public void onBottomSheetLUClose() {
if(UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc()) <= 0) {
this.mDtbDocrList.remove(dtbDocr);
i--;
} else this.refreshDtbDocrItem(dtbDocr);
}
removeListFilter();
@Override
public void onError(Exception ex) {
if(onComplete != null) onComplete.run();
}
@Override
public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaOrd, BigDecimal totalNumCnfOrd, BigDecimal qtaCnfOrd, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
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)
);
}
@Override
public void onRowSaved() {
public boolean thereIsAnOpenedUL() {
return currentMtbColt.get() != null;
}
public boolean thereIsAnyRowInUL() {
return currentMtbColt.get() != null &&
currentMtbColt.get().getMtbColr() != null &&
currentMtbColt.get().getMtbColr().size() > 0;
@Override
public void onLUOpened(MtbColt mtbColt) {
}
@Override
public void onLUClosed() {
private void refreshDtbDocrItem(WithdrawableDtbDocr dtbDocr) {
int index = this.mDtbDocrList.indexOf(dtbDocr);
this.mDtbDocrList.remove(dtbDocr);
this.mDtbDocrList.add(index, dtbDocr);
}
@Override
public void onLUSuccessullyPrinted() {
public void removeListFilter() {
}
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
}
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
}
@Override
public void onLoadingStarted() {
}
@Override
public void onLoadingEnded() {
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -0,0 +1,212 @@
package it.integry.integrywmsnative.gest.picking_resi;
import androidx.lifecycle.MutableLiveData;
import java.math.BigDecimal;
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.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.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColt;
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.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;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
public class PickingResiViewModel {
private Listener mListener;
private MutableLiveData<List<WithdrawableDtbDocr>> mPickingList = new MutableLiveData<>();
private MtbColt mCurrentMtbColt = null;
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> mDocumentList) {
this.sendOnLoadingStarted();
this.mPickingResiRESTConsumer.loadDocRows(mDocumentList, withdrawableDtbDocr -> {
this.mPickingList.postValue(withdrawableDtbDocr);
this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex)));
}
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
}
public void closeLU(boolean shouldPrint) {
if (mCurrentMtbColt == null) return;
this.sendOnLoadingStarted();
}
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 MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() {
return mPickingList;
}
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 sendOnItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaOrd,
BigDecimal totalNumCnfOrd,
BigDecimal qtaCnfOrd,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO,
mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
totalQtaOrd,
totalNumCnfOrd,
qtaCnfOrd,
totalQtaToBeTaken,
totalNumCnfToBeTaken,
qtaCnfToBeTaken,
totalQtaAvailable,
totalNumCnfAvailable,
qtaCnfAvailable,
partitaMag,
dataScad,
canOverflowOrderQuantity,
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 onError(Exception ex);
void onItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaOrd,
BigDecimal totalNumCnfOrd,
BigDecimal qtaCnfOrd,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onRowSaved();
}
}

View File

@ -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 (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
return false;
}
}
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();
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,183 @@
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] " +
"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 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 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);
}
});
}
}

View File

@ -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;

View File

@ -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() {
}
}

View File

@ -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();
}
}

View File

@ -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);

View File

@ -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;

View File

@ -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 {

View File

@ -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;
/**

View File

@ -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;

View File

@ -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);
}
}

View File

@ -93,6 +93,7 @@ public class SimpleAutoCompleteDropdownAdapter extends ArrayAdapter {
protected void publishResults(CharSequence constraint,
FilterResults results) {
// NOTE: this function is *always* called from the UI thread.
if(constraint != null && constraint.length() > 2) {
ArrayList<T> filtered = (ArrayList<T>) results.values;
notifyDataSetChanged();
clear();
@ -101,6 +102,7 @@ public class SimpleAutoCompleteDropdownAdapter extends ArrayAdapter {
notifyDataSetInvalidated();
}
}
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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'