Refactoring ordini acquisto
This commit is contained in:
parent
4ed8c825dd
commit
0a2d47110d
@ -51,6 +51,8 @@ import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamento
|
||||
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule;
|
||||
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_ordine_acquisto_edit.dialog.DialogEditArticoloComponent;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloModule;
|
||||
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent;
|
||||
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule;
|
||||
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComponent;
|
||||
@ -122,7 +124,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
|
||||
DialogSelectDocInfoModule.class,
|
||||
DocInterniEditFormModule.class,
|
||||
DialogSelectDocRowsModule.class,
|
||||
DialogAskClienteModule.class
|
||||
DialogAskClienteModule.class,
|
||||
DialogEditArticoloModule.class
|
||||
})
|
||||
public interface MainApplicationComponent {
|
||||
|
||||
@ -206,6 +209,8 @@ public interface MainApplicationComponent {
|
||||
|
||||
InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent();
|
||||
|
||||
DialogEditArticoloComponent.Factory dialogEditArticoloComponent();
|
||||
|
||||
void inject(MainApplication mainApplication);
|
||||
|
||||
void inject(AppContext mainApplication);
|
||||
|
||||
@ -23,7 +23,7 @@ public class BarcodeCallbackDTO {
|
||||
return onScanSuccessfull;
|
||||
}
|
||||
|
||||
public BarcodeCallbackDTO setOnScanSuccessfull(RunnableArgs<BarcodeScanDTO> onScanSuccessfull) {
|
||||
public BarcodeCallbackDTO setOnScanSuccessful(RunnableArgs<BarcodeScanDTO> onScanSuccessfull) {
|
||||
this.onScanSuccessfull = onScanSuccessfull;
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -24,8 +24,6 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
|
||||
})
|
||||
public abstract class AppDatabase extends RoomDatabase {
|
||||
|
||||
// private AppDatabase mRoomInstance;
|
||||
|
||||
public abstract ArticoloGrigliaDao articoloGrigliaDao();
|
||||
|
||||
public abstract GrigliaDao grigliaDao();
|
||||
|
||||
@ -39,15 +39,15 @@ public interface ArticoloGrigliaDao {
|
||||
@Query("SELECT * FROM articoli_griglia WHERE cod_mart = :codMart AND id_griglia = :idGriglia LIMIT 1")
|
||||
ArticoloGriglia findArticoloByCodMartAndGriglia(String codMart, int idGriglia);
|
||||
|
||||
@Query("SELECT * FROM articoli_griglia WHERE (cod_mart = :scan OR bar_code =:scan )AND id_griglia = :idGriglia LIMIT 1")
|
||||
@Query("SELECT * FROM articoli_griglia WHERE (cod_mart = :scan OR bar_code =:scan) AND id_griglia = :idGriglia LIMIT 1")
|
||||
ArticoloGriglia findArticoloByScanAndGriglia(String scan, int idGriglia);
|
||||
|
||||
@Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode )AND id_griglia = :idGriglia LIMIT 1")
|
||||
@Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode) AND id_griglia = :idGriglia LIMIT 1")
|
||||
Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart);
|
||||
|
||||
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId")
|
||||
List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId);
|
||||
|
||||
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId and new_no_promo = 1")
|
||||
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId AND new_no_promo = 1")
|
||||
List<ArticoloGriglia> getNewArticoliInGriglia(int grigliaId);
|
||||
}
|
||||
|
||||
@ -79,17 +79,17 @@ public class BaseActivity extends AppCompatActivity {
|
||||
|
||||
|
||||
public void onLoadingStarted() {
|
||||
new Thread(() -> {
|
||||
// new Thread(() -> {
|
||||
BarcodeManager.disable();
|
||||
this.openProgress();
|
||||
}).start();
|
||||
// }).start();
|
||||
}
|
||||
|
||||
public void onLoadingEnded() {
|
||||
new Thread(() -> {
|
||||
// new Thread(() -> {
|
||||
this.closeProgress();
|
||||
BarcodeManager.enable();
|
||||
}).start();
|
||||
// }).start();
|
||||
}
|
||||
|
||||
public void onError(Exception ex) {
|
||||
|
||||
@ -8,6 +8,8 @@ import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
|
||||
@ -27,10 +29,15 @@ import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
|
||||
@Singleton
|
||||
public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
|
||||
|
||||
|
||||
public static void getArticoliListino(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
|
||||
public void getArticoliListino(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
|
||||
getArticoliListinoStatic(codAlis, onSuccess, onFailed);
|
||||
}
|
||||
|
||||
public static void getArticoliListinoStatic(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
|
||||
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class);
|
||||
ordiniARestService
|
||||
.getArticoliListino(codAlis)
|
||||
@ -46,7 +53,9 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.forEach(art -> {
|
||||
List<ArticoloDTO> inList = Stream.of(griglia.getGrigliaAcquistiChild()).filter(x -> x.getCodMart().equalsIgnoreCase(art)).toList();
|
||||
List<ArticoloDTO> inList = Stream.of(griglia.getGrigliaAcquistiChild())
|
||||
.filter(x -> x.getCodMart().equalsIgnoreCase(art))
|
||||
.toList();
|
||||
if (inList.size() > 1) {
|
||||
for (ArticoloDTO articolo : inList) {
|
||||
if (!articolo.getBarCode().endsWith(articolo.getCodMart())) {
|
||||
@ -72,7 +81,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
|
||||
});
|
||||
}
|
||||
|
||||
public static void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) {
|
||||
public void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) {
|
||||
SaveDTO saveDTO = new SaveDTO();
|
||||
OrdineDTO ordineDTO = new OrdineDTO();
|
||||
List<ArtDTO> artRows = new ArrayList<>();
|
||||
@ -126,7 +135,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
|
||||
|
||||
}
|
||||
|
||||
private static ArtDTO convertArtToDTO(ArticoloOrdine art, int rigaOrd) {
|
||||
private ArtDTO convertArtToDTO(ArticoloOrdine art, int rigaOrd) {
|
||||
ArtDTO dto = new ArtDTO();
|
||||
dto.setRigaOrd(rigaOrd);
|
||||
dto.setCodMart(art.getCodMart());
|
||||
|
||||
@ -355,7 +355,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
|
||||
}
|
||||
|
||||
|
||||
@ -190,7 +190,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
|
||||
}
|
||||
|
||||
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(this.viewModel::processBarcode)
|
||||
.setOnScanSuccessful(this.viewModel::processBarcode)
|
||||
.setOnScanFailed(this::onError));
|
||||
this.viewModel.fetchDocumentRows();
|
||||
}
|
||||
|
||||
@ -237,7 +237,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
|
||||
|
||||
BarcodeManager.enable();
|
||||
|
||||
@ -156,7 +156,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
|
||||
|
||||
BarcodeManager.enable();
|
||||
|
||||
@ -167,7 +167,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
|
||||
}
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(this::onError));
|
||||
|
||||
BarcodeManager.enable();
|
||||
|
||||
@ -10,11 +10,12 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.databinding.ObservableArrayList;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -26,46 +27,34 @@ 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.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
|
||||
import it.integry.integrywmsnative.core.expansion.BaseActivity;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
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.databinding.ActivityPvOrdineAcquistoEditBinding;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListAdapter;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListModel;
|
||||
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
|
||||
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
|
||||
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
|
||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
|
||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
||||
|
||||
public class PVOrdineAcquistoEditActivity extends BaseActivity {
|
||||
public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdineAcquistoEditViewModel.Listener {
|
||||
|
||||
private static String DATA_KEY_ORDER = "keyOrdine";
|
||||
|
||||
private Ordine mOrdine;
|
||||
private Griglia mGriglia;
|
||||
private List<ArticoloOrdine> mArticoli = new ArrayList<>();
|
||||
private PVEditOrderHelper mhelper;
|
||||
private ActivityPvOrdineAcquistoEditBinding mBinding;
|
||||
private int mBarcodeScannerIstanceID;
|
||||
private OrdineAcquistoArtListAdapter mAdapter;
|
||||
|
||||
private int barcodeScannerIstanceID;
|
||||
|
||||
@Inject
|
||||
OrdineRepository mOrdineRepository;
|
||||
@Inject
|
||||
GrigliaRepository mGrigliaRepository;
|
||||
@Inject
|
||||
ArticoliOrdineRepository mArticoliOrdineRepository;
|
||||
@Inject
|
||||
ArticoloGrigliaRepository mArticoloGrigliaRepository;
|
||||
PVOrdineAcquistoEditViewModel mViewModel;
|
||||
|
||||
private final ObservableArrayList<OrdineAcquistoArtListModel> mArticoliMutableData = new ObservableArrayList<>();
|
||||
|
||||
|
||||
public static Intent newInstance(Context context, Ordine ordine) {
|
||||
@ -84,7 +73,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
|
||||
.create()
|
||||
.inject(this);
|
||||
|
||||
mhelper = new PVEditOrderHelper(mGrigliaRepository, mArticoliOrdineRepository, mArticoloGrigliaRepository);
|
||||
|
||||
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pv_ordine_acquisto_edit);
|
||||
mBinding.setViewModel(this);
|
||||
@ -95,23 +83,38 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
|
||||
|
||||
if (mOrdine == null) {
|
||||
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
|
||||
closeEdit();
|
||||
close();
|
||||
}
|
||||
if (mOrdine.isTransmitted()) {
|
||||
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
|
||||
closeEdit();
|
||||
close();
|
||||
}
|
||||
String testataOrdString = String.format(this.getString(R.string.ord_acq_testata), String.valueOf(mOrdine.getOrdineId()), UtilityDate.formatDate(mOrdine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
||||
mBinding.orderIdentifier.setText(Html.fromHtml(testataOrdString));
|
||||
FabMenuCustomAnimations.changeIconOnFocus(mBinding.closeActivityFab, R.drawable.ic_check_white_24dp, R.drawable.ic_close_24dp);
|
||||
|
||||
|
||||
initBarcodeReader();
|
||||
initRecyclerView();
|
||||
fetchDetails();
|
||||
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(this::onScanSuccessful)
|
||||
.setOnScanFailed(this::handleException));
|
||||
|
||||
this.mViewModel.setListener(this);
|
||||
|
||||
this.mViewModel.getCurrentGriglia().observe(this, griglia -> {
|
||||
mBinding.codAlis.setText(griglia.getCodAlis());
|
||||
});
|
||||
|
||||
this.mViewModel.getArticoli().observe(this, articoli -> {
|
||||
mBinding.countArtOrd.setText(String.valueOf(articoli.size()));
|
||||
mBinding.pvOrdineExport.setVisibility(articoli.size() > 0 ? View.INVISIBLE : View.GONE);
|
||||
mBinding.closeActivityFab.close(false);
|
||||
mBinding.scanArtSpinner.setVisibility(articoli.size() > 0 ? View.GONE : View.VISIBLE);
|
||||
|
||||
if (articoli.isEmpty() && isOrderNewProdsForced()) {
|
||||
this.mViewModel.orderNewProducts();
|
||||
}
|
||||
});
|
||||
|
||||
this.mViewModel.init(mOrdine);
|
||||
}
|
||||
|
||||
|
||||
@ -121,186 +124,133 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void initRecyclerView() {
|
||||
mBinding.articoliOrdineList.setHasFixedSize(true);
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(this::onError));
|
||||
|
||||
BarcodeManager.enable();
|
||||
}
|
||||
|
||||
private void initRecyclerView() {
|
||||
this.mViewModel.getArticoli().observe(this, updatedData -> {
|
||||
this.mArticoliMutableData.clear();
|
||||
this.mArticoliMutableData.addAll(convertDataModelToListModel(updatedData));
|
||||
// this.noItemsToPick.set(!isThereAnyItemToPick(updatedData));
|
||||
});
|
||||
|
||||
var mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoliMutableData)
|
||||
.setOnItemClicked(this::selectAction);
|
||||
|
||||
mBinding.articoliOrdineList.setAdapter(mAdapter);
|
||||
mBinding.articoliOrdineList.setHasFixedSize(true);
|
||||
mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this));
|
||||
|
||||
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(this, SimpleDividerItemDecoration.VERTICAL);
|
||||
itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
|
||||
mBinding.articoliOrdineList.addItemDecoration(itemDecorator);
|
||||
mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::selectAction);
|
||||
mBinding.articoliOrdineList.setAdapter(mAdapter);
|
||||
}
|
||||
|
||||
private List<OrdineAcquistoArtListModel> convertDataModelToListModel
|
||||
(List<ArticoloOrdine> dataList) {
|
||||
return Stream.of(dataList)
|
||||
.distinctBy(ArticoloOrdine::getArticoloOrdineId)
|
||||
.sortBy(x -> x.getDataIns().getTime())
|
||||
.map(x -> new OrdineAcquistoArtListModel()
|
||||
.setBadge1(x.getCodMart())
|
||||
.setDescription(x.getDescrizione())
|
||||
.setQuantity(BigDecimal.valueOf(x.getQtaOrd()))
|
||||
.setUntMis(x.getUntMis())
|
||||
.setOriginalModel(x))
|
||||
.toList();
|
||||
}
|
||||
|
||||
|
||||
private void selectAction(ArticoloOrdine articoloOrdine) {
|
||||
mBinding.closeActivityFab.close(false);
|
||||
BarcodeManager.disable();
|
||||
runOnUiThread(() -> DialogAskAction.make(this,
|
||||
runOnUiThread(() -> {
|
||||
DialogAskAction.make(this,
|
||||
articoloOrdine.getDescrizione(),
|
||||
articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(),
|
||||
() -> this.addArticolo(articoloOrdine),
|
||||
() -> this.deleteArticolo(articoloOrdine)).show());
|
||||
() -> {
|
||||
this.onItemDispatched(articoloOrdine);
|
||||
BarcodeManager.enable();
|
||||
},
|
||||
() -> {
|
||||
this.deleteArticolo(articoloOrdine);
|
||||
BarcodeManager.enable();
|
||||
}).show();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void deleteArticolo(ArticoloOrdine articoloOrdine) {
|
||||
String text = "Stai per eliminare l'articolo <b> " + articoloOrdine.getDescrizione() + "</b> dall'ordine, <br> sei sicuro?";
|
||||
|
||||
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> {
|
||||
this.openProgress();
|
||||
mhelper.removeArticoloFromOrdine(articoloOrdine, () -> {
|
||||
this.closeProgress();
|
||||
BarcodeManager.enable();
|
||||
runOnUiThread(this::fetchArticoli);
|
||||
}, e -> {
|
||||
this.closeProgress();
|
||||
runOnUiThread(() -> UtilityExceptions.defaultException(this, e));
|
||||
});
|
||||
}), () -> {
|
||||
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> {
|
||||
this.mViewModel.deleteArticolo(articoloOrdine);
|
||||
}, () -> {
|
||||
|
||||
}).show(getSupportFragmentManager(), "tag");
|
||||
}
|
||||
|
||||
private void handleException(Exception ex) {
|
||||
runOnUiThread(() -> {
|
||||
this.closeProgress();
|
||||
BarcodeManager.enable();
|
||||
UtilityExceptions.defaultException(this, ex, false);
|
||||
});
|
||||
}
|
||||
|
||||
private void onScanSuccessful(BarcodeScanDTO dto) {
|
||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||
mBinding.closeActivityFab.close(false);
|
||||
BarcodeManager.disable();
|
||||
this.openProgress();
|
||||
mhelper.checkArticolo(
|
||||
mOrdine,
|
||||
dto.getStringValue(),
|
||||
articoloOrdine -> {
|
||||
this.closeProgress();
|
||||
addArticolo(articoloOrdine);
|
||||
},
|
||||
e -> {
|
||||
this.closeProgress();
|
||||
handleException(e);
|
||||
}
|
||||
);
|
||||
}
|
||||
this.onLoadingStarted();
|
||||
|
||||
private void addArticolo(ArticoloOrdine articoloOrdine) {
|
||||
this.mViewModel.processBarcodeDTO(data, () -> {
|
||||
this.onLoadingEnded();
|
||||
});
|
||||
|
||||
runOnUiThread(() -> EditArticoloDialog.newInstance(this, mhelper, articoloOrdine, articolo -> {
|
||||
BarcodeManager.enable();
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onItemDispatched(ArticoloOrdine articoloOrdine) {
|
||||
|
||||
DialogEditArticoloView
|
||||
.newInstance(articoloOrdine, articolo -> {
|
||||
runOnUiThread(() -> {
|
||||
if (articolo != null) {
|
||||
Toast.makeText(this, "Articolo aggiunto all'ordine!", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
fetchArticoli();
|
||||
}).show(this.getSupportFragmentManager(), "tag"));
|
||||
}
|
||||
|
||||
private void fetchDetails() {
|
||||
fetchGriglia();
|
||||
fetchArticoli();
|
||||
}
|
||||
|
||||
private void orderNewProducts() {
|
||||
this.openProgress();
|
||||
mhelper.getNewArticoli(mOrdine.getIdGriglia(), articoli -> {
|
||||
if (articoli != null && !articoli.isEmpty()) {
|
||||
List<ArticoloOrdine> articoliToSave = new ArrayList<>();
|
||||
Stream.of(articoli).forEach(articolo -> {
|
||||
if (
|
||||
Stream.of(mArticoli).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirst().isEmpty()
|
||||
&& Stream.of(articoliToSave).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirst().isEmpty()
|
||||
) {
|
||||
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mOrdine);
|
||||
dto.setQtaOrd(dto.getQtaCnf());
|
||||
articoliToSave.add(dto);
|
||||
}
|
||||
this.mViewModel.saveArticolo(articolo);
|
||||
});
|
||||
if (!articoliToSave.isEmpty()) {
|
||||
mhelper.saveArticoliToOrdine(articoliToSave, this::fetchArticoli, this::handleException);
|
||||
} else {
|
||||
this.closeProgress();
|
||||
}
|
||||
} else {
|
||||
this.closeProgress();
|
||||
}
|
||||
}, this::handleException);
|
||||
}, () -> {
|
||||
|
||||
}).show(this.getSupportFragmentManager(), "tag");
|
||||
}
|
||||
|
||||
private void fetchGriglia() {
|
||||
mhelper.loadGriglia(mOrdine.getIdGriglia(), griglia -> {
|
||||
runOnUiThread(() -> {
|
||||
mGriglia = griglia;
|
||||
mBinding.codAlis.setText(mGriglia.getCodAlis());
|
||||
});
|
||||
}, this::handleException);
|
||||
}
|
||||
|
||||
private void fetchArticoli() {
|
||||
this.openProgress();
|
||||
mhelper.loadArticoli(mOrdine, articoli -> {
|
||||
this.closeProgress();
|
||||
mArticoli = articoli;
|
||||
runOnUiThread(() -> {
|
||||
mAdapter.updateItems(mArticoli);
|
||||
mBinding.countArtOrd.setText(String.valueOf(mArticoli.size()));
|
||||
mBinding.pvOrdineExport.setVisibility(mArticoli.size() > 0 ? View.INVISIBLE : View.GONE);
|
||||
mBinding.closeActivityFab.close(false);
|
||||
mBinding.scanArtSpinner.setVisibility(mArticoli.size() > 0 ? View.GONE : View.VISIBLE);
|
||||
if (mArticoli.isEmpty() && isOrderNewProdsForced()) {
|
||||
orderNewProducts();
|
||||
}
|
||||
});
|
||||
}, this::handleException);
|
||||
}
|
||||
|
||||
public void closeEdit() {
|
||||
onBackPressed();
|
||||
}
|
||||
|
||||
public void exportOrdine() {
|
||||
this.openProgress();
|
||||
PVOrdiniAcquistoRESTConsumer.saveOrdine(mOrdine, mArticoli, mGriglia, (ordine) -> {
|
||||
|
||||
mOrdineRepository.updateOrder(ordine, ord -> {
|
||||
this.closeProgress();
|
||||
this.mViewModel.exportOrdine(() -> {
|
||||
runOnUiThread(() -> {
|
||||
Toast.makeText(this, "Ordine salvato con successo", Toast.LENGTH_SHORT).show();
|
||||
onBackPressed();
|
||||
close();
|
||||
});
|
||||
}, e -> runOnUiThread(() -> {
|
||||
this.closeProgress();
|
||||
UtilityExceptions.defaultException(this, e);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
}, e -> runOnUiThread(() -> {
|
||||
this.closeProgress();
|
||||
UtilityExceptions.defaultException(this, e);
|
||||
}));
|
||||
|
||||
public void close() {
|
||||
onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
|
||||
BarcodeManager.removeCallback(barcodeScannerIstanceID);
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
public void manualSearch() {
|
||||
BarcodeManager.disable();
|
||||
DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", codice -> {
|
||||
this.openProgress();
|
||||
mhelper.checkArticolo(
|
||||
mOrdine,
|
||||
codice,
|
||||
articoloOrdine -> {
|
||||
this.closeProgress();
|
||||
addArticolo(articoloOrdine);
|
||||
},
|
||||
e -> {
|
||||
this.closeProgress();
|
||||
handleException(e);
|
||||
this.onLoadingStarted();
|
||||
this.mViewModel.loadArticolo(codice,
|
||||
() -> {
|
||||
this.onLoadingEnded();
|
||||
BarcodeManager.enable();
|
||||
}
|
||||
);
|
||||
}, BarcodeManager::enable).show();
|
||||
@ -309,4 +259,5 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
|
||||
private boolean isOrderNewProdsForced() {
|
||||
return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,34 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
|
||||
|
||||
@Module(subcomponents = PVOrdineAcquistoEditComponent.class)
|
||||
public class PVOrdineAcquistoEditModule {
|
||||
|
||||
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
PVOrdiniAcquistoRESTConsumer providesPVOrdiniAcquistoRESTConsumer() {
|
||||
return new PVOrdiniAcquistoRESTConsumer();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
PVOrdineAcquistoEditViewModel providesPvOrdineAcquistoEditViewModel(OrdineRepository ordineRepository,
|
||||
GrigliaRepository grigliaRepository,
|
||||
ArticoliOrdineRepository articoliOrdineRepository,
|
||||
ArticoloGrigliaRepository articoloGrigliaRepository,
|
||||
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer) {
|
||||
return new PVOrdineAcquistoEditViewModel(ordineRepository, grigliaRepository, articoliOrdineRepository, articoloGrigliaRepository, pvOrdiniAcquistoRESTConsumer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,262 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit;
|
||||
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
|
||||
|
||||
public class PVOrdineAcquistoEditViewModel {
|
||||
|
||||
@Inject
|
||||
OrdineRepository mOrdineRepository;
|
||||
|
||||
@Inject
|
||||
GrigliaRepository mGrigliaRepository;
|
||||
|
||||
@Inject
|
||||
ArticoliOrdineRepository mArticoliOrdineRepository;
|
||||
|
||||
@Inject
|
||||
ArticoloGrigliaRepository mArticoloGrigliaRepository;
|
||||
|
||||
@Inject
|
||||
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer;
|
||||
|
||||
private Ordine mCurrentOrdine;
|
||||
|
||||
|
||||
private Listener mListener;
|
||||
|
||||
|
||||
private final MutableLiveData<Griglia> mCurrentGriglia = new MutableLiveData<>();
|
||||
private final MutableLiveData<List<ArticoloOrdine>> mArticoli = new MutableLiveData<>();
|
||||
|
||||
|
||||
public PVOrdineAcquistoEditViewModel(OrdineRepository ordineRepository,
|
||||
GrigliaRepository grigliaRepository,
|
||||
ArticoliOrdineRepository articoliOrdineRepository,
|
||||
ArticoloGrigliaRepository articoloGrigliaRepository,
|
||||
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer) {
|
||||
this.mOrdineRepository = ordineRepository;
|
||||
this.mGrigliaRepository = grigliaRepository;
|
||||
this.mArticoliOrdineRepository = articoliOrdineRepository;
|
||||
this.mArticoloGrigliaRepository = articoloGrigliaRepository;
|
||||
this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer;
|
||||
}
|
||||
|
||||
public void init(Ordine ordine) {
|
||||
this.mCurrentOrdine = ordine;
|
||||
|
||||
this.sendOnLoadingStarted();
|
||||
|
||||
this.loadGriglia(ordine.getIdGriglia(), griglia -> {
|
||||
mCurrentGriglia.postValue(griglia);
|
||||
|
||||
this.loadArticoli(mCurrentOrdine, articoli -> {
|
||||
this.mArticoli.postValue(articoli);
|
||||
this.sendOnLoadingEnded();
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public MutableLiveData<Griglia> getCurrentGriglia() {
|
||||
return mCurrentGriglia;
|
||||
}
|
||||
|
||||
public MutableLiveData<List<ArticoloOrdine>> getArticoli() {
|
||||
return mArticoli;
|
||||
}
|
||||
|
||||
public void saveArticolo(ArticoloOrdine articolo) {
|
||||
var newList = this.mArticoli.getValue();
|
||||
|
||||
var alreadySavedItem = Stream.of(newList)
|
||||
.filter(x -> Objects.equals(x.getArticoloOrdineId(), articolo.getArticoloOrdineId()))
|
||||
.findFirst();
|
||||
|
||||
if(alreadySavedItem.isPresent()) newList.remove(alreadySavedItem.get());
|
||||
|
||||
newList.add(articolo);
|
||||
this.mArticoli.postValue(newList);
|
||||
}
|
||||
|
||||
|
||||
public void loadArticolo(String barcode, Runnable onSuccess) {
|
||||
try {
|
||||
mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, barcode, (articolo) -> {
|
||||
if (articolo != null) {
|
||||
onSuccess.run();
|
||||
this.sendOnItemDispatched(articolo);
|
||||
} else {
|
||||
mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, mCurrentOrdine.getIdGriglia(), artGrid -> {
|
||||
if (artGrid != null) {
|
||||
onSuccess.run();
|
||||
this.sendOnItemDispatched(artGrid.convertToArticoloOrdine(mCurrentOrdine));
|
||||
} else {
|
||||
this.sendError(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
|
||||
}
|
||||
}, this::sendError);
|
||||
}
|
||||
}, this::sendError);
|
||||
|
||||
} catch (Exception e) {
|
||||
this.sendError(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
|
||||
this.checkArticolo(
|
||||
mCurrentOrdine,
|
||||
barcodeScanDTO.getStringValue(),
|
||||
articoloOrdine -> {
|
||||
this.sendOnItemDispatched(articoloOrdine);
|
||||
onComplete.run();
|
||||
},
|
||||
this::sendError
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private void loadGriglia(int idGriglia, RunnableArgs<Griglia> onLoad) {
|
||||
try {
|
||||
mGrigliaRepository.findGrigliaById(idGriglia, onLoad, this::sendError);
|
||||
} catch (Exception e) {
|
||||
this.sendError(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadArticoli(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad) {
|
||||
try {
|
||||
mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError);
|
||||
} catch (Exception e) {
|
||||
this.sendError(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkArticolo(Ordine ordine, String barcode, RunnableArgs<ArticoloOrdine> onSuccess, RunnableArgs<Exception> onFail) {
|
||||
try {
|
||||
mArticoliOrdineRepository.findArticoloByScanAndOrdine(ordine, barcode, (articolo) -> {
|
||||
if (articolo != null) {
|
||||
onSuccess.run(articolo);
|
||||
} else {
|
||||
mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, ordine.getIdGriglia(), artGrid -> {
|
||||
if (artGrid != null) {
|
||||
onSuccess.run(artGrid.convertToArticoloOrdine(ordine));
|
||||
} else {
|
||||
onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
|
||||
}
|
||||
}, onFail);
|
||||
}
|
||||
}, onFail);
|
||||
|
||||
} catch (Exception e) {
|
||||
onFail.run(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) {
|
||||
mArticoloGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError);
|
||||
}
|
||||
|
||||
public void orderNewProducts() {
|
||||
this.sendOnLoadingStarted();
|
||||
|
||||
this.getNewArticoli(mCurrentOrdine.getIdGriglia(), articoli -> {
|
||||
if (articoli != null && !articoli.isEmpty()) {
|
||||
List<ArticoloOrdine> articoliToSave = new ArrayList<>();
|
||||
|
||||
Stream.of(articoli).forEach(articolo -> {
|
||||
if (
|
||||
Stream.of(mArticoli.getValue())
|
||||
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
|
||||
.findFirst()
|
||||
.isEmpty()
|
||||
|
||||
&& Stream.of(articoliToSave)
|
||||
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
|
||||
.findFirst()
|
||||
.isEmpty()
|
||||
) {
|
||||
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine);
|
||||
dto.setQtaOrd(dto.getQtaCnf());
|
||||
articoliToSave.add(dto);
|
||||
}
|
||||
});
|
||||
if (!articoliToSave.isEmpty()) {
|
||||
mArticoliOrdineRepository.saveArticoliToOrdine(articoliToSave, () -> {
|
||||
Stream.of(articoliToSave).forEach(this::saveArticolo);
|
||||
|
||||
this.sendOnLoadingEnded();
|
||||
|
||||
}, this::sendError);
|
||||
|
||||
} else this.sendOnLoadingEnded();
|
||||
} else this.sendOnLoadingEnded();
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
public void deleteArticolo(ArticoloOrdine articoloOrdine) {
|
||||
mArticoliOrdineRepository.deleteArticolo(articoloOrdine, () -> {
|
||||
this.mArticoli.getValue().remove(articoloOrdine);
|
||||
this.mArticoli.postValue(this.mArticoli.getValue());
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
public void exportOrdine(Runnable onComplete) {
|
||||
this.sendOnLoadingStarted();
|
||||
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), mCurrentGriglia.getValue(), (ordine) -> {
|
||||
|
||||
mOrdineRepository.updateOrder(ordine, ord -> {
|
||||
this.sendOnLoadingEnded();
|
||||
onComplete.run();
|
||||
}, this::sendError);
|
||||
|
||||
}, this::sendError);
|
||||
}
|
||||
|
||||
private void sendOnItemDispatched(ArticoloOrdine articoloOrdine) {
|
||||
if (this.mListener != null) mListener.onItemDispatched(articoloOrdine);
|
||||
}
|
||||
|
||||
private void sendOnLoadingStarted() {
|
||||
if (this.mListener != null) mListener.onLoadingStarted();
|
||||
}
|
||||
|
||||
private void sendOnLoadingEnded() {
|
||||
if (this.mListener != null) mListener.onLoadingEnded();
|
||||
}
|
||||
|
||||
private void sendError(Exception ex) {
|
||||
if (this.mListener != null) mListener.onError(ex);
|
||||
}
|
||||
|
||||
public interface Listener extends ILoadingListener {
|
||||
void onItemDispatched(ArticoloOrdine articoloOrdine);
|
||||
|
||||
void onError(Exception ex);
|
||||
}
|
||||
|
||||
public PVOrdineAcquistoEditViewModel setListener(Listener listener) {
|
||||
this.mListener = listener;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
|
||||
|
||||
import dagger.Subcomponent;
|
||||
|
||||
@Subcomponent
|
||||
public interface DialogEditArticoloComponent {
|
||||
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
DialogEditArticoloComponent create();
|
||||
}
|
||||
|
||||
void inject(DialogEditArticoloView dialogEditArticoloView);
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
|
||||
|
||||
@Module(subcomponents = DialogEditArticoloComponent.class)
|
||||
public class DialogEditArticoloModule {
|
||||
|
||||
|
||||
@Provides
|
||||
DialogEditArticoloViewModel providesDialogEditArticoloViewModel(ArticoliOrdineRepository articoliOrdineRepository) {
|
||||
return new DialogEditArticoloViewModel(articoliOrdineRepository);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,180 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.InputType;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.databinding.ObservableField;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import it.integry.integrywmsnative.MainApplication;
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityObservable;
|
||||
import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding;
|
||||
|
||||
public class DialogEditArticoloView extends BaseDialogFragment implements DialogEditArticoloViewModel.Listener {
|
||||
|
||||
@Inject
|
||||
DialogEditArticoloViewModel mViewModel;
|
||||
|
||||
private final ArticoloOrdine mArticolo;
|
||||
private final RunnableArgs<ArticoloOrdine> mOnComplete;
|
||||
private final Runnable mOnAbort;
|
||||
|
||||
public ObservableField<BigDecimal> currentNumCnf = new ObservableField<>();
|
||||
public ObservableField<BigDecimal> currentQtaCnf = new ObservableField<>();
|
||||
public ObservableField<BigDecimal> currentQtaTot = new ObservableField<>();
|
||||
|
||||
private DialogPvEditArticoloBinding mBindings;
|
||||
private boolean mEnableDataCallback = true;
|
||||
|
||||
public static DialogEditArticoloView newInstance(ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onComplete, Runnable onAbort) {
|
||||
return new DialogEditArticoloView(articolo, onComplete, onAbort);
|
||||
}
|
||||
|
||||
private DialogEditArticoloView(ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onComplete, Runnable onAbort) {
|
||||
super();
|
||||
|
||||
this.mArticolo = articolo;
|
||||
this.mOnComplete = onComplete;
|
||||
this.mOnAbort = onAbort;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_pv_edit_articolo, container, false);
|
||||
mBindings.setLifecycleOwner(this);
|
||||
|
||||
MainApplication.appComponent
|
||||
.dialogEditArticoloComponent()
|
||||
.create()
|
||||
.inject(this);
|
||||
|
||||
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
|
||||
mBindings.toolbar.setTitle("Inserimento articolo");
|
||||
mBindings.inputQtaOrd.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
|
||||
|
||||
|
||||
this.mViewModel
|
||||
.setListener(this)
|
||||
.setCurrentArticolo(this.mArticolo)
|
||||
.setInitialQtaCnf(BigDecimal.valueOf(mArticolo.getQtaCnf()))
|
||||
.setInitialNumCnf(UtilityBigDecimal.divide(BigDecimal.valueOf(mArticolo.getQtaOrd()), BigDecimal.valueOf(mArticolo.getQtaCnf())).setScale(0, RoundingMode.CEILING))
|
||||
.setInitialQtaTot(BigDecimal.valueOf(mArticolo.getQtaOrd()));
|
||||
|
||||
mBindings.setView(this);
|
||||
|
||||
this.onDataChanged();
|
||||
|
||||
this.initBindings();
|
||||
|
||||
return mBindings.getRoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
this.mViewModel.setListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismiss(@NonNull DialogInterface dialog) {
|
||||
this.mOnAbort.run();
|
||||
super.onDismiss(dialog);
|
||||
}
|
||||
|
||||
private void initBindings() {
|
||||
|
||||
UtilityObservable.addPropertyChanged(this.currentNumCnf, (value) -> {
|
||||
if (this.mEnableDataCallback) {
|
||||
this.mViewModel.setNumCnf(value);
|
||||
}
|
||||
});
|
||||
|
||||
UtilityObservable.addPropertyChanged(this.currentQtaCnf, (value) -> {
|
||||
if (this.mEnableDataCallback) {
|
||||
this.mViewModel.setQtaCnf(value);
|
||||
}
|
||||
});
|
||||
|
||||
UtilityObservable.addPropertyChanged(this.currentQtaTot, (value) -> {
|
||||
if (this.mEnableDataCallback) {
|
||||
this.mViewModel.setQtaTot(value);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
mBindings.inputQtaOrd.setOnEditorActionListener((v, actionId, event) -> {
|
||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
||||
mBindings.inputNumCnfText.requestFocus();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
mBindings.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> {
|
||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
||||
saveAndExit();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
public ArticoloOrdine getArticolo() {
|
||||
return mArticolo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDataChanged() {
|
||||
this.mEnableDataCallback = false;
|
||||
|
||||
this.currentNumCnf.set(this.mViewModel.getNumCnf());
|
||||
this.currentQtaCnf.set(this.mViewModel.getQtaCnf());
|
||||
this.currentQtaTot.set(this.mViewModel.getQtaTot());
|
||||
|
||||
this.mBindings.executePendingBindings();
|
||||
|
||||
this.mEnableDataCallback = true;
|
||||
}
|
||||
|
||||
|
||||
public void saveAndExit() {
|
||||
this.onLoadingStarted();
|
||||
|
||||
this.mViewModel.save(newArticolo -> {
|
||||
this.mOnComplete.run(newArticolo);
|
||||
this.onLoadingEnded();
|
||||
dismiss();
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,122 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
|
||||
public class DialogEditArticoloViewModel {
|
||||
|
||||
ArticoliOrdineRepository mArticoliOrdineRepository;
|
||||
|
||||
private Listener mListener;
|
||||
|
||||
private ArticoloOrdine mCurrentArticolo;
|
||||
|
||||
private BigDecimal internalNumCnf;
|
||||
private BigDecimal internalQtaCnf;
|
||||
private BigDecimal internalQtaTot;
|
||||
|
||||
@Inject
|
||||
public DialogEditArticoloViewModel(ArticoliOrdineRepository articoliOrdineRepository) {
|
||||
this.mArticoliOrdineRepository = articoliOrdineRepository;
|
||||
}
|
||||
|
||||
public DialogEditArticoloViewModel setCurrentArticolo(ArticoloOrdine currentArticolo) {
|
||||
this.mCurrentArticolo = currentArticolo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DialogEditArticoloViewModel setInitialNumCnf(BigDecimal numCnf) {
|
||||
this.internalNumCnf = numCnf;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DialogEditArticoloViewModel setInitialQtaCnf(BigDecimal qtaCnf) {
|
||||
this.internalQtaCnf = qtaCnf;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DialogEditArticoloViewModel setInitialQtaTot(BigDecimal qtaTot) {
|
||||
this.internalQtaTot = qtaTot;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setNumCnf(BigDecimal newValue) {
|
||||
this.internalNumCnf = newValue;
|
||||
if (newValue == null) return;
|
||||
|
||||
this.internalQtaTot = UtilityBigDecimal.multiply(newValue, internalQtaCnf)
|
||||
.setScale(2, RoundingMode.CEILING);
|
||||
|
||||
this.mListener.onDataChanged();
|
||||
}
|
||||
|
||||
public void setQtaCnf(BigDecimal newValue) {
|
||||
this.internalQtaCnf = newValue;
|
||||
if (newValue == null) return;
|
||||
|
||||
this.mListener.onDataChanged();
|
||||
}
|
||||
|
||||
public void setQtaTot(BigDecimal newValue) {
|
||||
this.internalQtaTot = newValue;
|
||||
|
||||
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf)
|
||||
.setScale(0, RoundingMode.CEILING);
|
||||
|
||||
this.mListener.onDataChanged();
|
||||
}
|
||||
|
||||
public BigDecimal getNumCnf() {
|
||||
return this.internalNumCnf;
|
||||
}
|
||||
|
||||
public BigDecimal getQtaCnf() {
|
||||
return this.internalQtaCnf;
|
||||
}
|
||||
|
||||
public BigDecimal getQtaTot() {
|
||||
return this.internalQtaTot;
|
||||
}
|
||||
|
||||
|
||||
public interface Listener {
|
||||
void onDataChanged();
|
||||
|
||||
void onError(Exception ex);
|
||||
}
|
||||
|
||||
|
||||
public Listener getListener() {
|
||||
return mListener;
|
||||
}
|
||||
|
||||
public DialogEditArticoloViewModel setListener(Listener listener) {
|
||||
this.mListener = listener;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public void save(RunnableArgs<ArticoloOrdine> onComplete) {
|
||||
if(UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO)) {
|
||||
this.mListener.onError(new Exception("La quantità ordinata deve essere maggiore di 0"));
|
||||
return;
|
||||
}
|
||||
|
||||
this.mCurrentArticolo.setQtaOrd(this.internalQtaTot.floatValue());
|
||||
|
||||
try {
|
||||
mArticoliOrdineRepository.saveArticoloToOrdine(this.mCurrentArticolo, () -> {
|
||||
onComplete.run(this.mCurrentArticolo);
|
||||
}, this.mListener::onError);
|
||||
} catch (Exception ex) {
|
||||
this.mListener.onError(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,188 +0,0 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.InputType;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.di.BindableBigDecimal;
|
||||
import it.integry.integrywmsnative.core.di.BindableInteger;
|
||||
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||
import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding;
|
||||
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
|
||||
|
||||
public class EditArticoloDialog extends BaseDialogFragment {
|
||||
|
||||
private final Activity mContext;
|
||||
private DialogPvEditArticoloBinding mBinding;
|
||||
private final PVEditOrderHelper mHelper;
|
||||
private final MutableLiveData<ArticoloOrdine> mArticolo = new MutableLiveData<>();
|
||||
private final RunnableArgs<ArticoloOrdine> onDialogDismiss;
|
||||
private boolean mLockedInput = false;
|
||||
|
||||
public final BindableBigDecimal qtaOrd = new BindableBigDecimal(BigDecimal.ZERO);
|
||||
public final BindableInteger numCnf = new BindableInteger(0);
|
||||
public final BindableBigDecimal qtaCnf = new BindableBigDecimal(BigDecimal.ZERO);
|
||||
|
||||
public static EditArticoloDialog newInstance(Activity context, PVEditOrderHelper helper, ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onDialogDismiss) {
|
||||
return new EditArticoloDialog(context, helper, articolo, onDialogDismiss);
|
||||
}
|
||||
|
||||
private EditArticoloDialog(Activity context, PVEditOrderHelper helper, ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onDialogDismiss) {
|
||||
mContext = context;
|
||||
mArticolo.setValue(articolo);
|
||||
mHelper = helper;
|
||||
qtaOrd.set(BigDecimal.valueOf(articolo.getQtaOrd()));
|
||||
numCnf.set(BigDecimal.valueOf(articolo.getQtaOrd()).divide(BigDecimal.valueOf(articolo.getQtaCnf()), 0, RoundingMode.CEILING).intValue());
|
||||
qtaCnf.set(BigDecimal.valueOf(articolo.getQtaCnf()));
|
||||
|
||||
this.onDialogDismiss = onDialogDismiss;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismiss(@NonNull DialogInterface dialog) {
|
||||
super.onDismiss(dialog);
|
||||
/*ArticoloOrdine articolo = mArticolo.getValue();
|
||||
if (articolo != null && articolo.getQtaOrd() <= 0f) {
|
||||
articolo = null;
|
||||
}
|
||||
onDialogDismiss.run(articolo);*/
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_pv_edit_articolo, null, false);
|
||||
mBinding.setView(this);
|
||||
mBinding.toolbar.setTitle("Inserimento articolo");
|
||||
mBinding.inputQtaOrd.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
|
||||
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
initBindings();
|
||||
return mBinding.getRoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
private void initBindings() {
|
||||
|
||||
BindableBigDecimal.registerListener(qtaOrd, qta -> {
|
||||
if (!mLockedInput) {
|
||||
mLockedInput = true;
|
||||
|
||||
ArticoloOrdine articoloOrdine = mArticolo.getValue();
|
||||
BigDecimal qtaCnf = BigDecimal.valueOf(articoloOrdine.getQtaCnf());
|
||||
int cnf = 0;
|
||||
if (qtaOrd.get() != null && qtaOrd.get().compareTo(BigDecimal.ZERO) > 0) {
|
||||
cnf = qtaOrd.get().divide(qtaCnf, 0, RoundingMode.CEILING).intValue();
|
||||
}
|
||||
this.numCnf.set(cnf);
|
||||
this.mBinding.executePendingBindings();
|
||||
|
||||
mLockedInput = false;
|
||||
}
|
||||
});
|
||||
BindableInteger.registerListener(numCnf, qta -> {
|
||||
if (!mLockedInput) {
|
||||
mLockedInput = true;
|
||||
|
||||
ArticoloOrdine articoloOrdine = mArticolo.getValue();
|
||||
BigDecimal qtaCnf = BigDecimal.valueOf(articoloOrdine.getQtaCnf());
|
||||
this.qtaOrd.set(BigDecimal.valueOf(numCnf.get() * qtaCnf.floatValue()).setScale(2, RoundingMode.CEILING));
|
||||
this.mBinding.executePendingBindings();
|
||||
|
||||
mLockedInput = false;
|
||||
}
|
||||
});
|
||||
mBinding.inputQtaOrd.setOnEditorActionListener((v, actionId, event) -> {
|
||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
||||
// saveAndExit();
|
||||
mBinding.inputNumCnfText.requestFocus();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
mBinding.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> {
|
||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
||||
saveAndExit();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
public void saveAndExit() {
|
||||
this.onLoadingStarted();
|
||||
try {
|
||||
ArticoloOrdine articolo = mArticolo.getValue();
|
||||
if (articolo == null) {
|
||||
throw new Exception("Articolo non valido");
|
||||
}
|
||||
if (qtaOrd.get().compareTo(BigDecimal.ZERO) <= 0) {
|
||||
throw new Exception("La quantità ordinata deve essere maggiore di 0");
|
||||
}
|
||||
|
||||
articolo.setQtaOrd(qtaOrd.get().floatValue());
|
||||
mArticolo.setValue(articolo);
|
||||
mHelper.saveArticoloToOrdine(mArticolo.getValue(), () -> {
|
||||
this.onLoadingEnded();
|
||||
requireActivity().runOnUiThread(() -> {
|
||||
onDialogDismiss.run(articolo);
|
||||
});
|
||||
this.dismiss();
|
||||
}, e -> {
|
||||
mContext.runOnUiThread(() -> UtilityExceptions.defaultException(mContext, e));
|
||||
this.onLoadingEnded();
|
||||
});
|
||||
} catch (Exception e) {
|
||||
mContext.runOnUiThread(() -> UtilityExceptions.defaultException(mContext, e));
|
||||
this.onLoadingEnded();
|
||||
return;
|
||||
}
|
||||
;
|
||||
}
|
||||
|
||||
public ArticoloOrdine getArticolo() {
|
||||
return mArticolo.getValue();
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
mArticolo.postValue(null);
|
||||
requireActivity().runOnUiThread(() -> {
|
||||
onDialogDismiss.run(null);
|
||||
});
|
||||
this.dismiss();
|
||||
}
|
||||
}
|
||||
@ -4,7 +4,6 @@ import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
|
||||
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
|
||||
@ -43,26 +42,6 @@ public class PVEditOrderHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public void loadGriglia(int idGriglia, RunnableArgs<Griglia> onLoad, RunnableArgs<Exception> onError) {
|
||||
try {
|
||||
mGrigliaRepository.findGrigliaById(idGriglia, onLoad, onError);
|
||||
} catch (Exception e) {
|
||||
onError.run(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadArticoli(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad, RunnableArgs<Exception> onError) {
|
||||
try {
|
||||
mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, onError);
|
||||
} catch (Exception e) {
|
||||
onError.run(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs<Exception> onFail) {
|
||||
mArticoliOrdineRepository.saveArticoloToOrdine(articolo, onSave, onFail);
|
||||
}
|
||||
|
||||
public void saveArticoliToOrdine(List<ArticoloOrdine> articoli, Runnable onSave, RunnableArgs<Exception> onFail) {
|
||||
mArticoliOrdineRepository.saveArticoliToOrdine(articoli, onSave, onFail);
|
||||
|
||||
@ -5,17 +5,19 @@ import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
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.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding;
|
||||
import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoListHeaderBinding;
|
||||
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
|
||||
@ -23,9 +25,10 @@ import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
|
||||
public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<OrdineAcquistoArtListAdapter.SubheaderHolder, OrdineAcquistoArtListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
|
||||
|
||||
|
||||
private Context mContext;
|
||||
private final Context mContext;
|
||||
|
||||
private final List<OrdineAcquistoArtListModel> mDataset = new ArrayList<>();
|
||||
|
||||
private List<ArticoloOrdine> mDataset;
|
||||
RunnableArgs<ArticoloOrdine> mOnItemSelect;
|
||||
|
||||
|
||||
@ -51,28 +54,26 @@ public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<O
|
||||
}
|
||||
|
||||
|
||||
public OrdineAcquistoArtListAdapter(Context context, List<ArticoloOrdine> myDataset, RunnableArgs<ArticoloOrdine> onItemSelect) {
|
||||
public OrdineAcquistoArtListAdapter(Context context, ObservableArrayList<OrdineAcquistoArtListModel> myDataset) {
|
||||
mContext = context;
|
||||
mDataset = orderItems(myDataset);
|
||||
mOnItemSelect = onItemSelect;
|
||||
}
|
||||
|
||||
public void updateItems(List<ArticoloOrdine> updatedDataset) {
|
||||
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() {
|
||||
@Override
|
||||
public void onChanged(ObservableList sender) {
|
||||
mDataset.clear();
|
||||
mDataset.addAll(orderItems(updatedDataset));
|
||||
mDataset.addAll(sender);
|
||||
notifyDataSetChanged();
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
|
||||
private List<ArticoloOrdine> orderItems(List<ArticoloOrdine> dataset) {
|
||||
return Stream.of(dataset)
|
||||
.distinctBy(ArticoloOrdine::getArticoloOrdineId)
|
||||
.sortBy(x -> UtilityDate.formatDate(x.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH))
|
||||
.toList();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public OrdineAcquistoArtListAdapter setOnItemClicked(RunnableArgs<ArticoloOrdine> onItemSelect) {
|
||||
this.mOnItemSelect = onItemSelect;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
||||
@ -94,7 +95,7 @@ public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<O
|
||||
|
||||
@Override
|
||||
public void onBindItemViewHolder(OrdineAcquistoArtListAdapter.SingleItemViewHolder h, int itemPosition) {
|
||||
final ArticoloOrdine articoloOrdine = mDataset.get(itemPosition);
|
||||
final ArticoloOrdine articoloOrdine = mDataset.get(itemPosition).getOriginalModel();
|
||||
final OrdineAcquistoArtListAdapter.SingleItemViewHolder holder = h;
|
||||
|
||||
holder.binding.setArticolo(articoloOrdine);
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
|
||||
|
||||
public class OrdineAcquistoArtListModel {
|
||||
|
||||
private String badge1;
|
||||
private String description;
|
||||
private BigDecimal quantity;
|
||||
private String untMis;
|
||||
|
||||
private ArticoloOrdine originalModel;
|
||||
|
||||
public String getBadge1() {
|
||||
return badge1;
|
||||
}
|
||||
|
||||
public OrdineAcquistoArtListModel setBadge1(String badge1) {
|
||||
this.badge1 = badge1;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public OrdineAcquistoArtListModel setDescription(String description) {
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
|
||||
public OrdineAcquistoArtListModel setQuantity(BigDecimal quantity) {
|
||||
this.quantity = quantity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getUntMis() {
|
||||
return untMis;
|
||||
}
|
||||
|
||||
public OrdineAcquistoArtListModel setUntMis(String untMis) {
|
||||
this.untMis = untMis;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArticoloOrdine getOriginalModel() {
|
||||
return originalModel;
|
||||
}
|
||||
|
||||
public OrdineAcquistoArtListModel setOriginalModel(ArticoloOrdine originalModel) {
|
||||
this.originalModel = originalModel;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@ -66,7 +66,7 @@ public class DialogScanLisA {
|
||||
private void initBarcode() {
|
||||
|
||||
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessfull)
|
||||
.setOnScanSuccessful(onScanSuccessfull)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
|
||||
|
||||
mDialog.setBarcodeListener(true);
|
||||
|
||||
@ -41,7 +41,7 @@ public class OrdineAcquistoPvHelper {
|
||||
}
|
||||
|
||||
public void updateGriglia(Griglia griglia, RunnableArgs<Griglia> onSave, RunnableArgs<Exception> onFail) {
|
||||
PVOrdiniAcquistoRESTConsumer.getArticoliListino(griglia.getCodAlis(), dto -> {
|
||||
PVOrdiniAcquistoRESTConsumer.getArticoliListinoStatic(griglia.getCodAlis(), dto -> {
|
||||
mContext.runOnUiThread(() -> {
|
||||
if (dto.getGrigliaAcquistiChild().size() <= 0) {
|
||||
onFail.run(new Exception("La griglia selezionata (" + griglia.getCodAlis() + ") non esiste o non presenta articoli"));
|
||||
|
||||
@ -144,7 +144,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
|
||||
}
|
||||
|
||||
|
||||
@ -249,7 +249,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(this::onError));
|
||||
|
||||
BarcodeManager.enable();
|
||||
|
||||
@ -138,7 +138,7 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
|
||||
|
||||
BarcodeManager.enable();
|
||||
|
||||
@ -143,7 +143,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
|
||||
|
||||
BarcodeManager.enable();
|
||||
|
||||
@ -123,7 +123,7 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
|
||||
|
||||
private void initBarcodeReader() {
|
||||
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
|
||||
|
||||
BarcodeManager.enable();
|
||||
|
||||
@ -61,7 +61,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
|
||||
public void onShow() {
|
||||
|
||||
mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
|
||||
BarcodeManager.enable();
|
||||
|
||||
|
||||
@ -130,7 +130,7 @@ public class DialogAskPositionOfLU {
|
||||
private void setupBarcode() {
|
||||
|
||||
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessfull)
|
||||
.setOnScanSuccessful(onScanSuccessfull)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
|
||||
|
||||
mDialog.setOnDismissListener(dialog -> {
|
||||
|
||||
@ -242,7 +242,7 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
|
||||
BarcodeManager.enable();
|
||||
|
||||
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessfull)
|
||||
.setOnScanSuccessful(onScanSuccessfull)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false)));
|
||||
|
||||
|
||||
|
||||
@ -170,7 +170,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
|
||||
|
||||
private void initBarcode() {
|
||||
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessful)
|
||||
.setOnScanSuccessful(onScanSuccessful)
|
||||
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this.context, ex, false)));
|
||||
}
|
||||
|
||||
|
||||
@ -95,7 +95,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
|
||||
|
||||
private void initBarcode() {
|
||||
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessfull)
|
||||
.setOnScanSuccessful(onScanSuccessfull)
|
||||
.setOnScanFailed(this::onError));
|
||||
|
||||
setBarcodeListener(true);
|
||||
|
||||
@ -126,7 +126,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
|
||||
|
||||
private void initBarcode() {
|
||||
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||
.setOnScanSuccessfull(onScanSuccessfull)
|
||||
.setOnScanSuccessful(onScanSuccessfull)
|
||||
.setOnScanFailed(this::onError));
|
||||
|
||||
setBarcodeListener(true);
|
||||
|
||||
@ -198,10 +198,12 @@
|
||||
|
||||
<com.github.clans.fab.FloatingActionMenu
|
||||
android:id="@+id/close_activity_fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
app:layout_anchorGravity="center"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:menu_icon="@drawable/ic_check_white_24dp"
|
||||
@ -255,7 +257,7 @@
|
||||
app:fab_colorNormal="@color/white"
|
||||
app:fab_colorPressed="@color/white_pressed"
|
||||
app:fab_colorRipple="#66FFFFFF"
|
||||
app:onClick="@{() -> viewModel.closeEdit()}"
|
||||
app:onClick="@{() -> viewModel.close()}"
|
||||
fab:fab_label="@string/close_and_exit" />
|
||||
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
<variable
|
||||
name="view"
|
||||
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog" />
|
||||
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView" />
|
||||
</data>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
@ -552,7 +552,7 @@
|
||||
android:imeOptions="actionDone"
|
||||
android:selectAllOnFocus="true"
|
||||
android:inputType="number"
|
||||
app:binding="@{view.numCnf}" />
|
||||
app:binding="@{view.currentNumCnf}" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@ -575,7 +575,7 @@
|
||||
android:hint="@string/qty_x_pck"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="numberDecimal"
|
||||
app:binding="@{view.qtaCnf}" />
|
||||
app:binding="@{view.currentQtaCnf}" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@ -597,7 +597,7 @@
|
||||
android:hint="@string/tot_qty"
|
||||
android:inputType="number"
|
||||
android:selectAllOnFocus="true"
|
||||
app:binding="@{view.qtaOrd}" />
|
||||
app:binding="@{view.currentQtaTot}" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@ -621,7 +621,7 @@
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:layout_weight="1"
|
||||
android:onClick="@{() -> view.cancel()}"
|
||||
android:onClick="@{() -> view.dismiss()}"
|
||||
app:icon="@drawable/ic_close_24dp"
|
||||
app:iconGravity="textStart"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user