[CARELLI - Ordini Acquisto]

Gestita selezione articolo se il barcode letto restituisce molteplici articoli
This commit is contained in:
Valerio Castellana 2023-03-28 19:17:08 +02:00
parent 79c4bdad48
commit 28501c5509
19 changed files with 568 additions and 66 deletions

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="21088B8EFD" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-03-28T12:31:53.895715100Z" />
</component>
</project>

View File

@ -67,8 +67,10 @@ 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_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoComponent;
@ -175,7 +177,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
DialogChooseArtsFromMtbAartListModule.class,
MainSettingsModule.class,
DialogInfoSituazioneArticoloModule.class,
DialogSelectDocRowsModule.class
DialogSelectArtToOrderModule.class
})
public interface MainApplicationComponent {
@ -295,6 +297,8 @@ public interface MainApplicationComponent {
DialogSelectDocRowsComponent.Factory dialogSelectDocRowsNewComponent();
DialogSelectArtToOrderComponent.Factory dialogSelectArtToOrderNewComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@ -12,7 +12,6 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.view_model.OrdiniAcquistoGrigliaDTO;
import it.integry.integrywmsnative.core.exception.InvalidProductOrderedException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
@ -91,10 +90,6 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
int i = 0;
for (ArticoloOrdine art : articoli) {
i++;
if (art.isInvalid()) {
onFailed.run(new InvalidProductOrderedException(art.getCodMart()));
return;
}
artRows.add(convertArtToDTO(art, i));
}

View File

@ -13,9 +13,11 @@ import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.math.BigDecimal;
import java.util.List;
import javax.inject.Inject;
@ -36,7 +38,9 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding;
import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloView;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderItemListModel;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderView;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogAskActionView;
@ -246,4 +250,34 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia();
}
@Override
public void confirmExportInvalidProducts(Runnable onConfirm) {
DialogSimpleMessageView.makeInfoDialog(getText(R.string.warning).toString(),
Html.fromHtml(getResources().getString(R.string.confirm_export_invalid_product)),
null,
onConfirm
,
this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExportInvalidProducts");
}
@Override
public void chooseArtFromList(List<ArticoloOrdinabileDTO> listArticoli, RunnableArgs<ArticoloOrdinabileDTO> onArtChosen) {
List<DialogSelectArtToOrderItemListModel<Object>> dataset =
Stream.of(listArticoli)
.map(x -> new DialogSelectArtToOrderItemListModel<>()
.setCodMart(x.getCodMart())
.setBarcode(x.getSelectedBarcode())
.setOriginalModel(x)
.setNew(mViewModel.isArtInOrder(x))
.setDescrizione(x.getDescrizione())
.setQtaOrd(BigDecimal.valueOf(x.getQtaOrd()))
.setCodAlis(x.getCodAlis())
.setUntMisOrd(x.getUntMis()))
.toList();
DialogSelectArtToOrderView.newInstance(dataset,
data -> onArtChosen.run((ArticoloOrdinabileDTO) data.getOriginalModel()),
this::onLoadingEnded)
.show(this.getSupportFragmentManager(), "dialogSelectDocRowsNew");
}
}

View File

@ -161,8 +161,8 @@ public class PVOrdineAcquistoEditViewModel {
try {
this.sendOnLoadingStarted();
ArticoloOrdinabileDTO articoloDTO = getArticoloFromBarcode(barcode);
if (articoloDTO == null) {
List<ArticoloOrdinabileDTO> listArticoli = matchArticoliForBarcode(barcode);
if (listArticoli == null || listArticoli.isEmpty()) {
if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) {
this.mListener.confirmCheckForUnlistedProduct(barcode);
return;
@ -170,11 +170,20 @@ public class PVOrdineAcquistoEditViewModel {
throw new NoResultFromBarcodeException(barcode);
}
}
this.addArticoloToOrdine(
articoloDTO,
this::sendOnLoadingEnded,
this::sendError
);
if (listArticoli.size() == 1) {
this.addArticoloToOrdine(
listArticoli.get(0),
this::sendOnLoadingEnded,
this::sendError
);
} else {
this.mListener.chooseArtFromList(listArticoli, (art) -> {
this.addArticoloToOrdine(
art,
this::sendOnLoadingEnded,
this::sendError);
});
}
} catch (Exception e) {
this.sendError(e);
BarcodeManager.enable();
@ -248,22 +257,20 @@ public class PVOrdineAcquistoEditViewModel {
return articolo;
}
public ArticoloOrdinabileDTO getArticoloFromBarcode(String barcode) throws NoArtsInGridException {
public List<ArticoloOrdinabileDTO> matchArticoliForBarcode(String barcode) throws NoArtsInGridException, MultipleResultFromBarcodeException, NoResultFromBarcodeException {
if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) {
throw new NoArtsInGridException();
}
ArticoloOrdinabileDTO art = Stream.of(mArticoliGriglia).filter(articolo ->
List<ArticoloOrdinabileDTO> articoli = Stream.of(mArticoliGriglia).filter(articolo ->
articolo.getCodMart().equalsIgnoreCase(barcode) ||
articolo.getBarcode().contains(barcode) ||
articolo.getBarcode().contains(StringUtils.leftPad(barcode, 13, "0"))
)
).map((art) -> art.setSelectedBarcode(barcode))
// .sortBy(x -> x.getSortByBarcodeCondition(barcode))
.findFirst().orElse(null);
if (art != null) {
art.setSelectedBarcode(barcode);
}
return art;
.toList();
return articoli;
}
@ -318,19 +325,30 @@ public class PVOrdineAcquistoEditViewModel {
this.sendError(new ExpiredProductListException());
return;
}
if (mArticoli.getValue() == null) {
if (mArticoli.getValue() == null || mArticoli.getValue().isEmpty()) {
this.sendError(new EmptyOrderException());
return;
}
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), codMdep, (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> {
this.sendOnLoadingEnded();
onComplete.run();
Runnable saveOrdine = () -> {
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), codMdep, (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> {
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
}, this::sendError);
};
if (Stream.of(mArticoli.getValue()).anyMatch(ArticoloOrdine::isInvalid)) {
this.mListener.confirmExportInvalidProducts(saveOrdine);
return;
}
saveOrdine.run();
}, this::sendError);
}
private void sendOnItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess) {
@ -353,12 +371,26 @@ public class PVOrdineAcquistoEditViewModel {
this.sendOnLoadingStarted();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.retrieveArticolo(null, codMdep, barcode, (grigliaDTO) -> {
RunnableArgs<ArticoloOrdinabileDTO> addArtToOrder = (articolo) -> {
ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirstOrElse(null);
if (existingArt != null) {
List<String> barcodes = existingArt.getBarcode();
barcodes.addAll(articolo.getBarcode());
barcodes = Stream.of(barcodes).distinct().toList();
existingArt.setBarcode(barcodes);
} else {
mArticoliGriglia.add(articolo);
}
this.processBarcode(barcode);
};
if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) {
this.sendError(new ArtNotFoundInGridException());
return;
}
if (grigliaDTO.getArticoli().size() > 1) {
this.sendError(new MultipleResultFromBarcodeException());
this.mListener.chooseArtFromList(grigliaDTO.getArticoli(), addArtToOrder);
return;
}
ArticoloOrdinabileDTO newArt = Stream.of(grigliaDTO.getArticoli()).findFirstOrElse(null);
@ -367,22 +399,19 @@ public class PVOrdineAcquistoEditViewModel {
return;
}
ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia).filter(x -> x.getCodMart().equalsIgnoreCase(newArt.getCodMart())).findFirstOrElse(null);
if (existingArt != null) {
List<String> barcodes = existingArt.getBarcode();
barcodes.addAll(newArt.getBarcode());
barcodes = Stream.of(barcodes).distinct().toList();
existingArt.setBarcode(barcodes);
} else {
mArticoliGriglia.add(newArt);
}
this.processBarcode(barcode);
addArtToOrder.run(newArt);
}, this::sendError);
}
public boolean isArtInOrder(ArticoloOrdinabileDTO articolo) {
if (mArticoli.getValue() == null || mArticoli.getValue().isEmpty()) {
return false;
}
return Stream.of(mArticoli.getValue()).noneMatch(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()));
}
public interface Listener extends ILoadingListener {
void onItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess);
@ -393,6 +422,10 @@ public class PVOrdineAcquistoEditViewModel {
void onError(Exception ex);
void confirmCheckForUnlistedProduct(String barcode);
void confirmExportInvalidProducts(Runnable onConfirm);
void chooseArtFromList(List<ArticoloOrdinabileDTO> listArticoli, RunnableArgs<ArticoloOrdinabileDTO> onArtChosen);
}
public PVOrdineAcquistoEditViewModel setListener(Listener listener) {

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import dagger.Subcomponent;

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import dagger.Module;
import dagger.Provides;

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import android.content.DialogInterface;
import android.graphics.Color;

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import java.math.BigDecimal;
import java.math.RoundingMode;

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
import dagger.Subcomponent;
@Subcomponent
public interface DialogSelectArtToOrderComponent {
@Subcomponent.Factory
interface Factory {
DialogSelectArtToOrderComponent create();
}
void inject(DialogSelectArtToOrderView DialogSelectArtView);
}

View File

@ -0,0 +1,101 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class DialogSelectArtToOrderItemListModel<T> {
private String codMart;
private String descrizione;
private BigDecimal qtaOrd;
private String untMisOrd;
private String barcode;
private String codAlis;
private boolean isNew;
private T originalModel;
private BindableBoolean checked = new BindableBoolean(false);
public String getCodMart() {
return codMart;
}
public DialogSelectArtToOrderItemListModel<T> setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizione() {
return descrizione;
}
public DialogSelectArtToOrderItemListModel<T> setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public DialogSelectArtToOrderItemListModel<T> setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public String getUntMisOrd() {
return untMisOrd;
}
public DialogSelectArtToOrderItemListModel<T> setUntMisOrd(String untMisOrd) {
this.untMisOrd = untMisOrd;
return this;
}
public String getBarcode() {
return barcode;
}
public DialogSelectArtToOrderItemListModel<T> setBarcode(String barcode) {
this.barcode = barcode;
return this;
}
public boolean isNew() {
return isNew;
}
public DialogSelectArtToOrderItemListModel<T> setNew(boolean aNew) {
isNew = aNew;
return this;
}
public T getOriginalModel() {
return originalModel;
}
public DialogSelectArtToOrderItemListModel<T> setOriginalModel(T originalModel) {
this.originalModel = originalModel;
return this;
}
public BindableBoolean getChecked() {
return checked;
}
public DialogSelectArtToOrderItemListModel<T> setChecked(BindableBoolean checked) {
this.checked = checked;
return this;
}
public String getCodAlis() {
return codAlis;
}
public DialogSelectArtToOrderItemListModel<T> setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogSelectArtToOrderComponent.class)
public class DialogSelectArtToOrderModule {
@Provides
DialogSelectArtToOrderViewModel providesDialogSelectArtNewViewModel() {
return new DialogSelectArtToOrderViewModel();
}
}

View File

@ -0,0 +1,130 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.databinding.DialogSelectArtToOrderBinding;
import it.integry.integrywmsnative.databinding.DialogSelectArtToOrderItemModelBinding;
/**
* @noinspection rawtypes
*/
public class DialogSelectArtToOrderView extends BaseDialogFragment {
@Inject
DialogSelectArtToOrderViewModel mViewModel;
private DialogSelectArtToOrderBinding mBindings;
private Context mContext;
private final List<DialogSelectArtToOrderItemListModel<Object>> listArts;
private final RunnableArgs<DialogSelectArtToOrderItemListModel> onConfirm;
private final Runnable onAbort;
//Pass here all external parameters
public static DialogSelectArtToOrderView newInstance(List<DialogSelectArtToOrderItemListModel<Object>> listArts,
RunnableArgs<DialogSelectArtToOrderItemListModel> onConfirm,
Runnable onAbort) {
return new DialogSelectArtToOrderView(listArts, onConfirm, onAbort);
}
private DialogSelectArtToOrderView(List<DialogSelectArtToOrderItemListModel<Object>> listArts,
RunnableArgs<DialogSelectArtToOrderItemListModel> onConfirm,
Runnable onAbort) {
super();
this.listArts = listArts;
this.onConfirm = onConfirm;
this.onAbort = onAbort;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogSelectArtToOrderBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogSelectArtToOrderNewComponent()
.create()
.inject(this);
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialog, which) -> {
final DialogSelectArtToOrderItemListModel<Object> selectedItem = Stream.of(listArts)
.filter(x -> x.getChecked().get())
.findFirstOrElse(null);
if (selectedItem != null)
this.onConfirm.run(selectedItem);
})
.setNegativeButton(R.string.abort, (dialog, which) -> {
if (this.onAbort != null) this.onAbort.run();
})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
this.listArts.get(0).getChecked().set(true);
this.initRecyclerView();
}
private void initRecyclerView() {
var itemType = new Type<DialogSelectArtToOrderItemListModel, DialogSelectArtToOrderItemModelBinding>(R.layout.dialog_select_art_to_order__item_model, BR.row);
// itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId()));
itemType.areContentsTheSame(DialogSelectArtToOrderItemListModel::equals);
itemType.onClick(x -> {
resetChecks();
x.getBinding().getRow().getChecked().set(true);
return null;
});
new LiveAdapter(listArts)
.map(DialogSelectArtToOrderItemListModel.class, itemType)
.into(this.mBindings.itemList);
}
private void resetChecks() {
for (var item : listArts) {
item.getChecked().set(false);
}
}
}

View File

@ -0,0 +1,5 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
public class DialogSelectArtToOrderViewModel {
}

View File

@ -16,7 +16,7 @@
<variable
name="view"
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView" />
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloView" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:layout_marginHorizontal="16dp"
android:singleLine="false"
android:maxLines="2"
android:text="@string/dialog_choose_art_from_lista_art" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/item_list"
android:layout_width="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:layout_height="wrap_content"
tools:listitem="@layout/dialog_select_art_to_order__item_model"
tools:itemCount="5" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.R" />
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<variable
name="row"
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderItemListModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:layout_marginVertical="2dp"
android:background="@drawable/bg_checked_layout"
android:onClick="@{() -> row.checked.toggle()}"
android:orientation="horizontal"
android:paddingStart="8dp"
android:paddingTop="8dp"
android:paddingEnd="8dp"
android:paddingBottom="8dp"
app:backgroundTintResID="@{row.checked.get() ? R.color.bg_checked_layout : android.R.color.transparent}">
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:minWidth="0dp"
android:minHeight="0dp"
android:clickable="false"
app:checked="@{row.checked}" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/qta_box"
android:layout_toEndOf="@id/checkbox"
android:layout_marginStart="4dp"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icon_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:src="@drawable/ic_baseline_new_24"
android:textSize="14sp"
android:tint="@color/orange_600"
android:visibility="@{row.isNew ? View.VISIBLE : View.GONE}" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_mart_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{row.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{row.barcode}"
android:textColor="@color/red_600"
android:textSize="14sp"
android:textStyle="bold"
android:layout_below="@id/cod_mart_label"
tools:text="0000000000000" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="@{row.descrizione}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo" />
</LinearLayout>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/qta_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginStart="8dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="6dp">
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorPrimary"
android:gravity="center"
android:text="@{row.codAlis}"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="APULD" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</layout>

View File

@ -214,7 +214,7 @@
<string name="already_used_anonymous_barcode"><![CDATA[L\'etichetta scansionata è stata già utilizzata]]></string>
<string name="no_result_from_barcode">Il barcode scansionato non ha fornito alcun risultato</string>
<string name="no_result_from_cod_mart">Il codice articolo non ha fornito alcun risultato</string>
<string name="multiple_results_from_barcode">Il barcode scansionato ha fornito multipli risultati</string>
<string name="multiple_results_from_barcode">Il barcode scansionato ha fornito molteplici risultati</string>
<string name="no_doc_type_selected">Nessun tipo documento selezionato</string>
<string name="filtered_arts_in_list">Filtro articoli applicato</string>
@ -447,6 +447,7 @@
<string name="max_qty_exceeded">Quantità massima superata</string>
<string name="confirm_orderable_qty_exceeded"><![CDATA[La quantità massima consentita per questo articolo è stata superata! <br/> Vuoi cotinuare comunque con il salvataggio?]]>\</string>
<string name="confirm_order_unlisted_item"><![CDATA[L\'articolo selezionato non è presente nel piano logistico!<br>Vuoi provare a cercarlo comunque nel sistema?]]></string>
<string name="invalid_product_ordered">L\'ordine presenta un articolo non valido per la lista selezionata!</string>
<string name="invalid_product_ordered">L\'ordine presenta uno o più articoli non validi per la lista selezionata!</string>
<string name="confirm_export_invalid_product"><![CDATA[Uno o più articoli ordinati non sono presenti nella lista selezionata! <br>Sei sicuro di voler continuare?]]></string>
<string name="expired_list_session"><![CDATA[La lista di prodotti è stata caricata troppo tempo fa!]]></string>
</resources>

View File

@ -455,5 +455,6 @@
<string name="confirm_orderable_qty_exceeded"><![CDATA[Max permitted quantity exceeded for the current product!<br/> Do you wish to continue?]]></string>
<string name="confirm_order_unlisted_item"><![CDATA[The selected product was not found in the current logistics plan! <br> Do you want to search for it regardless?]]></string>
<string name="invalid_product_ordered">One or more ordered products are not available in the selected list!</string>
<string name="confirm_export_invalid_product"><![CDATA[One or more ordered products are not available in the selected list! <br> Do you wish to continue?]]></string>
<string name="expired_list_session"><![CDATA[The product list was loaded too much time ago!]]></string>
</resources>