Merge branch 'feature/RefactoringGestioneColli' into master-beta
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good

This commit is contained in:
2025-08-06 10:43:34 +02:00
41 changed files with 566 additions and 140 deletions

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 518
def appVersionName = '1.47.05'
def appVersionCode = 519
def appVersionName = '1.47.06'
signingConfigs {
release {

View File

@@ -106,6 +106,8 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbiso
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.trasferimento_pedane.TrasferimentoPedaneComponent;
import it.integry.integrywmsnative.gest.trasferimento_pedane.TrasferimentoPedaneModule;
import it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export.DialogTrasferimentoPedaneConfirmExportComponent;
import it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export.DialogTrasferimentoPedaneConfirmExportModule;
import it.integry.integrywmsnative.gest.trasferimento_pedane.edit.TrasferimentoPedaneEditComponent;
import it.integry.integrywmsnative.gest.trasferimento_pedane.edit.TrasferimentoPedaneEditModule;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent;
@@ -270,7 +272,8 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva
DialogSelectPositionOfLuModule.class,
TrasferimentoPedaneModule.class,
DialogAskInfoTrasferimentoModule.class,
TrasferimentoPedaneEditModule.class
TrasferimentoPedaneEditModule.class,
DialogTrasferimentoPedaneConfirmExportModule.class
})
public interface MainApplicationComponent {
@@ -455,6 +458,8 @@ public interface MainApplicationComponent {
TrasferimentoPedaneEditComponent.Factory traferimentoPedaneEditComponent();
DialogTrasferimentoPedaneConfirmExportComponent.Factory dialogTrasferimentoPedaneConfirmExportComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@@ -26,10 +26,11 @@ public class TrasferimentoPedaneRESTConsumer extends _BaseRESTConsumer {
this.executorService = executorService;
}
public MtbColt makeSynchronousSaveRequest(String codMdepDest, List<String> barcodeUlList) throws Exception {
public MtbColt makeSynchronousSaveRequest(String codMdepDest, String annotazioni, List<String> barcodeUlList) throws Exception {
var service = restBuilder.getService(TrasferimentoPedaneRESTConsumerService.class);
Response<ServiceRESTResponse<MtbColt>> response = service.save(new SaveTrasferimentoPedaneRequestDTO() {{
setCodMdepDest(codMdepDest);
setAnnotazioni(annotazioni);
setBarcodeUlList(barcodeUlList);
}})
.execute();

View File

@@ -8,6 +8,9 @@ public class SaveTrasferimentoPedaneRequestDTO {
@SerializedName("codMdepDest")
private String codMdepDest;
@SerializedName("annotazioni")
private String annotazioni;
@SerializedName("barcodeUlList")
private List<String> barcodeUlList;
@@ -21,6 +24,14 @@ public class SaveTrasferimentoPedaneRequestDTO {
return this;
}
public String getAnnotazioni() {
return annotazioni;
}
public void setAnnotazioni(String annotazioni) {
this.annotazioni = annotazioni;
}
public List<String> getBarcodeUlList() {
return barcodeUlList;
}

View File

@@ -82,7 +82,7 @@ public class ProdRientroMerceFragment extends BaseFragment implements
getChildFragmentManager()
.beginTransaction()
.show(mProdRientroMerceOrderDetailFragment)
.addToBackStack(ProdRientroMerceOrderDetailFragment.class.getName())
.addToBackStack(null)
.commit();
}

View File

@@ -9,6 +9,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
import androidx.core.content.ContextCompat;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
@@ -28,6 +29,7 @@ import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
@@ -84,6 +86,9 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
public ObservableField<Integer> progress = new ObservableField<>(0);
public ObservableField<Boolean> isOrderColli = new ObservableField<>(false);
private boolean isLargeLayout = false;
private final CompositeDisposable mDisposables = new CompositeDisposable();
public ProdRientroMerceOrderDetailFragment() {
// Required empty public constructor
}
@@ -92,15 +97,21 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
return new ProdRientroMerceOrderDetailFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
// @Override
// public void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setRetainInstance(true);
// }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
isLargeLayout = getResources().getBoolean(R.bool.large_layout);
if (!isLargeLayout) {
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), backPressedCallback);
}
// Inflate the layout for this fragment
mBindings = FragmentProdRientroMerceOrderDetailBinding.inflate(LayoutInflater.from(getActivity()), container, false);
mBindings.setLifecycleOwner(getViewLifecycleOwner());
@@ -171,6 +182,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onConnected, x -> this.onError(new BluetoothConnectionException(btName, btMacAddress, x)));
mDisposables.add(disposableBluetooth);
}
public MutableLiveData<OrdineLavorazioneDTO> getCurrentOrder() {
@@ -182,15 +194,25 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
mConnectedBluetoothDevice = connectedDevice;
}
@Override
public void onDetach() {
mLatestCodTcol = null;
if (mConnectedBluetoothDevice != null)
bluetoothManager.close();
private final OnBackPressedCallback backPressedCallback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
// Rimuove il fragment corrente dal back stack
getParentFragmentManager().popBackStack();
}
};
super.onDetach();
@Override
public void onDestroyView() {
mLatestCodTcol = null;
// if (mConnectedBluetoothDevice != null)
// bluetoothManager.close();
mDisposables.clear();
super.onDestroyView();
}
public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.setValue(order);

View File

@@ -72,13 +72,14 @@ public class ProdRientroMerceOrderListFilterViewModel {
List<String> codJcom = initialOrderList.stream()
.map(OrdineLavorazioneDTO::getCodJcom)
.distinct()
.collect(Collectors.toUnmodifiableList());
.filter(Objects::nonNull)
.collect(Collectors.toList());
return Objects.requireNonNull(commesseFullList).stream()
.filter(x -> x != null && codJcom.contains(x.getCodJcom()))
.distinct()
.sorted(Comparator.comparing(JtbComt::getCodJcom))
.collect(Collectors.toUnmodifiableList());
.collect(Collectors.toList());
}
public List<JtbComt> getAvailableCommesse(List<JtbComt> commesseFullList) {

View File

@@ -62,7 +62,7 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
private OnRefreshListener onRefreshListener;
private final ProdRientroMerceOrderListFilterViewModel mAppliedFilterViewModel = new ProdRientroMerceOrderListFilterViewModel();
private List<OrdineLavorazioneDTO> internalOrderList = new ArrayList<>();
private List<OrdineLavorazioneDTO> internalOrderList;
private List<JtbComt> jtbComtCache;
@@ -187,6 +187,9 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) {
if(internalOrderList == null)
return;
filterChipDTO
.getFilterLayoutView()
.setFilterName(filterChipDTO.getFilterChipText())

View File

@@ -19,6 +19,8 @@ import androidx.preference.PreferenceFragmentCompat;
import androidx.sqlite.db.SimpleSQLiteQuery;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.crashlytics.CustomKeysAndValues;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.harrysoft.androidbluetoothserial.BluetoothManager;
import java.io.BufferedReader;
@@ -387,6 +389,9 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
this.closeProgress();
} catch (Exception ex) {
handler.post(() -> {
FirebaseCrashlytics.getInstance().recordException(ex, new CustomKeysAndValues.Builder() {{
putString("ExportLog", "Error while exporting log");
}}.build());
this.closeProgress();
UtilityExceptions.defaultException(requireContext(), ex);
});

View File

@@ -149,7 +149,7 @@ public class TrasferimentoPedaneFragment extends BaseFragment implements ITitled
CountDownLatch countDownLatch = new CountDownLatch(1);
handler.post(() -> {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
String text = getResources().getString(R.string.alert_delete_trasf);
DialogSimpleMessageView.makeWarningDialog(requireContext(),
new SpannableString(text),
null,

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export;
import dagger.Subcomponent;
@Subcomponent
public interface DialogTrasferimentoPedaneConfirmExportComponent {
@Subcomponent.Factory
interface Factory {
DialogTrasferimentoPedaneConfirmExportComponent create();
}
void inject(DialogTrasferimentoPedaneConfirmExportView dialogTrasferimentoPedaneConfirmExportView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogTrasferimentoPedaneConfirmExportComponent.class)
public class DialogTrasferimentoPedaneConfirmExportModule {
@Provides
DialogTrasferimentoPedaneConfirmExportViewModel providesDialogTrasferimentoPedaneConfirmExportViewModel() {
return new DialogTrasferimentoPedaneConfirmExportViewModel();
}
}

View File

@@ -0,0 +1,126 @@
package it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.LifecycleOwner;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseMaterialAlertDialogBuilder;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.databinding.DialogTrasferimentoPedaneConfirmExportBinding;
public class DialogTrasferimentoPedaneConfirmExportView extends BaseMaterialAlertDialogBuilder implements DialogInterface.OnShowListener, DialogInterface.OnDismissListener {
@Inject
DialogTrasferimentoPedaneConfirmExportViewModel mViewModel;
private DialogTrasferimentoPedaneConfirmExportBinding mBindings;
private Context mContext;
private final RunnableArgs<Result> onComplete;
//Pass here all external parameters
public static DialogTrasferimentoPedaneConfirmExportView newInstance(@NonNull Context context, long numeroUl, RunnableArgs<Result> onComplete) {
return new DialogTrasferimentoPedaneConfirmExportView(context, numeroUl, onComplete);
}
private DialogTrasferimentoPedaneConfirmExportView(@NonNull Context context, long numeroUl, RunnableArgs<Result> onComplete) {
super(context);
this.mContext = context;
this.onComplete = onComplete;
MainApplication.appComponent
.dialogTrasferimentoPedaneConfirmExportComponent()
.create()
.inject(this);
mBindings = DialogTrasferimentoPedaneConfirmExportBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setViewModel(mViewModel);
if (context instanceof LifecycleOwner) {
mBindings.setLifecycleOwner((LifecycleOwner) context);
}
mViewModel.setNumeroUl((int) numeroUl);
mBindings.annotationsInput.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mViewModel.onSaveKeyboardAction();
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true;
}
return false;
});
setCancelable(true);
setView(mBindings.getRoot());
setPositiveButton(R.string.confirm, (dialog, which) -> {
mViewModel.onSaveAnnotationsClicked();
onComplete.run(Result.completed(mViewModel.annotazioni.getValue()));
});
setNegativeButton(R.string.abort, (dialog, which) -> {
onComplete.run(Result.aborted());
});
}
@NonNull
@Override
public AlertDialog create() {
AlertDialog alertDialog = super.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setOnShowListener(this);
alertDialog.setOnDismissListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
}
@Override
public void onDismiss(DialogInterface dialog) {
}
public static class Result {
private final String annotazioni;
private final boolean isAborted;
private Result(String annotazioni, boolean isAborted) {
this.annotazioni = annotazioni;
this.isAborted = isAborted;
}
public static Result completed(String annotazioni) {
return new Result(annotazioni, false);
}
public static Result aborted() {
return new Result(null, true);
}
public boolean isAborted() {
return isAborted;
}
public String getAnnotazioni() {
return annotazioni;
}
}
}

View File

@@ -0,0 +1,52 @@
package it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
public class DialogTrasferimentoPedaneConfirmExportViewModel {
public MutableLiveData<Integer> numeroUl = new MutableLiveData<>();
public MutableLiveData<String> annotazioni = new MutableLiveData<>();
public MutableLiveData<Boolean> isEditingAnnotations = new MutableLiveData<>(false);
public MutableLiveData<Boolean> hasAnnotations = new MutableLiveData<>(false);
public void setNumeroUl(Integer numeroUl) {
this.numeroUl.setValue(numeroUl);
}
public void setAnnotazioni(String annotazioni) {
this.annotazioni.setValue(annotazioni);
updateAnnotationsState();
}
public LiveData<Integer> getNumeroUlProperty() {
return numeroUl;
}
public LiveData<String> getAnnotazioniProperty() {
return annotazioni;
}
public void onAddAnnotationsClicked() {
isEditingAnnotations.setValue(true);
}
public void onEditAnnotationsClicked() {
isEditingAnnotations.setValue(true);
}
public void onSaveKeyboardAction() {
onSaveAnnotationsClicked();
}
public void onSaveAnnotationsClicked() {
isEditingAnnotations.setValue(false);
updateAnnotationsState();
}
private void updateAnnotationsState() {
String currentAnnotations = annotazioni.getValue();
hasAnnotations.setValue(currentAnnotations != null && !currentAnnotations.trim().isEmpty());
}
}

View File

@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.View;
import android.widget.PopupMenu;
@@ -19,7 +18,6 @@ import com.ravikoradiya.liveadapter.BR;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
@@ -43,6 +41,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.ActivityTraferimentoPedaneEditBinding;
import it.integry.integrywmsnative.databinding.ActivityTrasferimentoPedaneRowListItemBinding;
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export.DialogTrasferimentoPedaneConfirmExportView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import kotlin.Unit;
@@ -179,18 +178,20 @@ public class TrasferimentoPedaneEditActivity extends BaseActivity implements Tra
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
if (mViewModel.canBeModifiedLiveData().getValue()) {
this.onLoadingStarted();
executorService.execute(() -> {
try {
this.mViewModel.processBarcodeDTO(data);
soundAlertService.success();
this.onLoadingEnded();
} catch (Exception e) {
soundAlertService.warning();
this.onError(e);
}
});
executorService.execute(() -> {
try {
this.mViewModel.processBarcodeDTO(data);
soundAlertService.success();
this.onLoadingEnded();
} catch (Exception e) {
soundAlertService.warning();
this.onError(e);
}
});
}
};
@@ -209,29 +210,24 @@ public class TrasferimentoPedaneEditActivity extends BaseActivity implements Tra
return;
}
DialogSimpleMessageView.makeInfoDialog(this,
"Conferma",
Html.fromHtml("Stai confermando il trasferimento delle pedane. Una volta confermato, <b>non sarà più possibile modificarne il contenuto</b>. Vuoi procedere?"),
new HashMap<>() {{
put("Numero pedane", String.valueOf(ulCount));
}},
() -> {
this.onLoadingStarted();
executorService.execute(() -> {
try {
if (documentsPrinterName == null) {
requestDocumentsPrinter();
}
DialogTrasferimentoPedaneConfirmExportView.newInstance(this, ulCount, result -> {
if (result == null || result.isAborted())
return;
this.mViewModel.closeAndExport(documentsPrinterName);
this.onLoadingEnded();
} catch (Exception e) {
this.onError(e);
}
});
}, () -> {
this.onLoadingStarted();
executorService.execute(() -> {
try {
if (documentsPrinterName == null) {
requestDocumentsPrinter();
}
})
this.mViewModel.closeAndExport(result.getAnnotazioni(), documentsPrinterName);
this.onLoadingEnded();
} catch (Exception e) {
this.onError(e);
}
});
})
.show();

View File

@@ -241,12 +241,14 @@ public class TrasferimentoPedaneEditViewModel {
trasferimentoPedaneRepository.deleteSynchronized(currentTrasferimentoPedane.getValue());
}
public void closeAndExport(String printerName) throws Exception {
public void closeAndExport(String annotazioni, String printerName) throws Exception {
var barcodes = rowsLiveData.getValue().stream()
.map(TrasferimentoPedaneRowEntity::getBarcodeUl)
.collect(Collectors.toUnmodifiableList());
var generatedMovement = trasferimentoPedaneRESTConsumer.makeSynchronousSaveRequest(currentTrasferimentoPedane.getValue().getCodMdepDest(), barcodes);
var generatedMovement = trasferimentoPedaneRESTConsumer.makeSynchronousSaveRequest(currentTrasferimentoPedane.getValue().getCodMdepDest(),
annotazioni,
barcodes);
var documentKey = generatedMovement.getDocumentKey();

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/colorPrimary" />
<solid android:color="?colorPrimary" />
<padding
android:left="6dp"

View File

@@ -4,7 +4,7 @@
<item android:id="@android:id/background">
<shape>
<corners android:radius="16dp" />
<solid android:color="@color/colorPrimaryDark" />
<solid android:color="?colorPrimaryDark" />
</shape>
</item>

View File

@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/colorPrimary"
android:fillColor="?colorPrimary"
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
</vector>

View File

@@ -1,5 +1,5 @@
<vector
android:height="24dp" android:viewportHeight="512.0"
android:viewportWidth="512.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/colorPrimary" android:pathData="M509.5,184.6L458.9,32.8C452.4,13.2 434.1,0 413.4,0H272v192h238.7c-0.4,-2.5 -0.4,-5 -1.2,-7.4zM240,0H98.6c-20.7,0 -39,13.2 -45.5,32.8L2.5,184.6c-0.8,2.4 -0.8,4.9 -1.2,7.4H240V0zM0,224v240c0,26.5 21.5,48 48,48h416c26.5,0 48,-21.5 48,-48V224H0z"/>
<path android:fillColor="?colorPrimary" android:pathData="M509.5,184.6L458.9,32.8C452.4,13.2 434.1,0 413.4,0H272v192h238.7c-0.4,-2.5 -0.4,-5 -1.2,-7.4zM240,0H98.6c-20.7,0 -39,13.2 -45.5,32.8L2.5,184.6c-0.8,2.4 -0.8,4.9 -1.2,7.4H240V0zM0,224v240c0,26.5 21.5,48 48,48h416c26.5,0 48,-21.5 48,-48V224H0z"/>
</vector>

View File

@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/colorPrimary"
android:fillColor="?colorPrimary"
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
</vector>

View File

@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/colorPrimary"
android:fillColor="?colorPrimary"
android:pathData="M19,8L5,8c-1.66,0 -3,1.34 -3,3v6h4v4h12v-4h4v-6c0,-1.66 -1.34,-3 -3,-3zM16,19L8,19v-5h8v5zM19,12c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1zM18,3L6,3v4h12L18,3z"/>
</vector>

View File

@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/colorPrimary"
android:fillColor="?colorPrimary"
android:pathData="M7,8L7,5l-7,7 7,7v-3l-4,-4 4,-4zM13,9L13,5l-7,7 7,7v-4.1c5,0 8.5,1.6 11,5.1 -1,-5 -4,-10 -11,-11z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z"/>
</vector>

View File

@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/colorPrimary"
android:fillColor="?colorPrimary"
android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@android:color/white"
android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z"/>
</vector>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorPrimary"/>
<item android:drawable="?colorPrimary"/>
</layer-list>

View File

@@ -365,7 +365,7 @@
android:onClick="@{() -> view.save()}"
android:paddingEnd="3dp"
android:text="@string/confirm"
app:icon="@drawable/ic_save_24"
app:icon="@drawable/ic_save_24dp"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -996,7 +996,7 @@
android:layout_marginEnd="0dp"
android:layout_weight="1"
android:onClick="@{() -> view.save()}"
app:icon="@drawable/ic_save_24"
app:icon="@drawable/ic_save_24dp"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -347,7 +347,7 @@
android:layout_weight="0.5"
android:onClick="@{() -> view.save()}"
android:text="@string/confirm"
app:icon="@drawable/ic_save_24"
app:icon="@drawable/ic_save_24dp"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -726,7 +726,7 @@
android:layout_marginEnd="0dp"
android:layout_weight="1"
android:onClick="@{() -> view.saveAndExit()}"
app:icon="@drawable/ic_save_24"
app:icon="@drawable/ic_save_24dp"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.text.Html" />
<import type="android.view.View" />
<variable
name="viewModel"
type="it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export.DialogTrasferimentoPedaneConfirmExportViewModel" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_baseline_warning_24"
app:tint="?colorWarning" />
<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:layout_marginBottom="16dp"
android:gravity="center_horizontal"
android:text="@string/alert_export_trasferimento_pedane_dialog_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_text"
style="@style/TextAppearance.Material3.BodyMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@{Html.fromHtml(@string/alert_export_trasferimento_pedane_dialog_text)}"
tools:text="@string/alert_export_trasferimento_pedane_dialog_text" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:orientation="horizontal">
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_pallet" />
<TextView
style="@style/TextAppearance.Material3.BodyMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="6dp"
android:text="Numero UL:"
android:textStyle="bold" />
<TextView
style="@style/TextAppearance.Material3.BodyLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="2dp"
android:text="@{String.valueOf(viewModel.numeroUlProperty)}"
android:textStyle="bold"
tools:text="3" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="vertical">
<com.google.android.material.button.MaterialButton
android:id="@+id/add_annotations_button"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="@{() -> viewModel.onAddAnnotationsClicked()}"
android:text="Aggiungi annotazioni"
android:visibility="@{(!viewModel.isEditingAnnotations &amp;&amp; !viewModel.hasAnnotations) ? View.VISIBLE : View.GONE}" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="@{viewModel.isEditingAnnotations ? View.VISIBLE : View.GONE}">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/annotations_input_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Annotazioni">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/annotations_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:inputType="text"
android:maxLength="255"
android:text="@={viewModel.annotazioni}" />
</com.google.android.material.textfield.TextInputLayout>
<!-- <com.google.android.material.button.MaterialButton-->
<!-- android:id="@+id/save_annotations_button"-->
<!-- style="@style/Widget.Material3.Button.IconButton"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:onClick="@{() -> viewModel.onSaveAnnotationsClicked()}"-->
<!-- app:icon="@drawable/ic_round_check_24" />-->
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="@{(!viewModel.isEditingAnnotations &amp;&amp; viewModel.hasAnnotations) ? View.VISIBLE : View.GONE}">
<ScrollView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1">
<TextView
style="@style/TextAppearance.Material3.BodyMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewModel.annotazioni}"
tools:text="Queste sono le mie annotazioni di prova." />
</ScrollView>
<com.google.android.material.button.MaterialButton
android:id="@+id/edit_annotations_button"
style="@style/Widget.Material3.Button.IconButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:onClick="@{() -> viewModel.onEditAnnotationsClicked()}"
app:icon="@drawable/ic_edit_24dp" />
</LinearLayout>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layout>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
@@ -103,7 +103,8 @@
android:indeterminate="false"
android:layout_marginTop="4dp"
android:max="100"
android:progress="0" />
android:progress="0"
app:trackStopIndicatorSize="0dp" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -5,7 +5,9 @@
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="android.view.View" />
<variable
@@ -13,14 +15,15 @@
type="it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView.ListModel" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingHorizontal="8dp"
android:background="?attr/selectableItemBackground"
android:clickable="@{item.enabled}"
android:onClick="@{() -> item.selected.toggle()}">
android:onClick="@{() -> item.selected.toggle()}"
android:orientation="horizontal"
android:paddingHorizontal="8dp"
android:paddingVertical="4dp">
<androidx.appcompat.widget.AppCompatCheckBox
@@ -28,51 +31,42 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:clickable="false"
android:enabled="@{item.enabled}"
app:checked="@{item.selected}"
android:clickable="false"/>
android:minHeight="0dp"
android:minWidth="0dp"
android:paddingEnd="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_jcom"
style="@style/TextAppearance.Material3.LabelLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical"
android:clickable="false"
android:enabled="@{item.enabled}"
android:clickable="false">
android:text="@{item.originalModel.codJcom}"
app:layout_constraintStart_toEndOf="@id/checkbox"
app:layout_constraintTop_toTopOf="parent"
tools:text="01" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.Material3.BodyMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:enabled="@{item.enabled}"
android:text="@{item.originalModel.descrizione}"
android:visibility="@{UtilityString.isNullOrEmpty(item.originalModel.descrizione) ? View.GONE : View.VISIBLE}"
app:layout_constraintStart_toEndOf="@id/checkbox"
app:layout_constraintTop_toBottomOf="@id/cod_jcom"
tools:text="Descrizione deposito" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="@{item.enabled}"
android:text="@{item.originalModel.codJcom}"
tools:text="01"
android:clickable="false" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" - "
android:enabled="@{item.enabled}"
android:visibility="@{UtilityString.isNullOrEmpty(item.originalModel.descrizione) ? View.GONE : View.VISIBLE}"
tools:text=" - "
android:clickable="false" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="@{item.enabled}"
android:text="@{item.originalModel.descrizione}"
android:visibility="@{UtilityString.isNullOrEmpty(item.originalModel.descrizione) ? View.GONE : View.VISIBLE}"
tools:text="Descrizione deposito"
android:clickable="false" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -227,6 +227,7 @@
<string name="alert_delete_UL">Stai per eliminare una UL. Confermi?</string>
<string name="alert_delete_mtb_colr">Stai per eliminare una riga. Confermi?</string>
<string name="alert_delete_trasf">Stai per eliminare un trasferimento. Confermi?</string>
<string name="activity_lista_bancali_title">Lista UL</string>
<string name="activity_contenuto_bancale_title">Contenuto UL</string>
@@ -525,4 +526,7 @@
<string name="occupied_label">%d occupati</string>
<string name="occupied_of_label">%d / %d occupati</string>
<string name="last_posizionamento_label">Ultimo pos: %s</string>
<string name="alert_export_trasferimento_pedane_dialog_title">Conferma esportazione</string>
<string name="alert_export_trasferimento_pedane_dialog_text"><![CDATA[Stai confermando il trasferimento delle pedane. Una volta confermato, <b>non sarà più possibile modificarne il contenuto</b>. Vuoi procedere?]]></string>
</resources>

View File

@@ -21,6 +21,10 @@
<item name="colorSuccessContainer">@color/md_theme_light_successContainer</item>
<item name="colorOnSuccess">@color/md_theme_light_onSuccess</item>
<item name="colorOnSuccessContainer">@color/md_theme_light_onSuccessContainer</item>
<item name="colorWarning">@color/md_theme_light_warning</item>
<item name="colorWarningContainer">@color/md_theme_light_warningContainer</item>
<item name="colorOnWarning">@color/md_theme_light_onWarning</item>
<item name="colorOnWarningContainer">@color/md_theme_light_onWarningContainer</item>
<item name="android:colorBackground">@color/md_theme_dark_background</item>
<item name="colorOnBackground">@color/md_theme_dark_onBackground</item>
<item name="colorSurface">@color/md_theme_dark_surface</item>

View File

@@ -32,4 +32,9 @@
<attr name="colorSuccessContainer" format="color" />
<attr name="colorOnSuccess" format="color" />
<attr name="colorOnSuccessContainer" format="color" />
<attr name="colorWarning" format="color" />
<attr name="colorWarningContainer" format="color" />
<attr name="colorOnWarning" format="color" />
<attr name="colorOnWarningContainer" format="color" />
</resources>

View File

@@ -21,6 +21,10 @@
<color name="md_theme_light_successContainer">#D1FADF</color>
<color name="md_theme_light_onSuccess">#FFFFFF</color>
<color name="md_theme_light_onSuccessContainer">#00210A</color>
<color name="md_theme_light_warning">#FFB300</color> <!-- Amber 700 -->
<color name="md_theme_light_warningContainer">#FFF8E1</color> <!-- Amber 50 -->
<color name="md_theme_light_onWarning">#212121</color> <!-- Grey 900 -->
<color name="md_theme_light_onWarningContainer">#664400</color> <!-- Deep amber -->
<color name="md_theme_light_background">#F6FEFF</color>
<color name="md_theme_light_onBackground">#001F24</color>
<color name="md_theme_light_surface">#F6FEFF</color>
@@ -54,6 +58,10 @@
<color name="md_theme_dark_successContainer">#00531A</color>
<color name="md_theme_dark_onSuccess">#003915</color>
<color name="md_theme_dark_onSuccessContainer">#85FFB8</color>
<color name="md_theme_dark_warning">#FFD54F</color> <!-- Amber 300, più visibile su sfondo scuro -->
<color name="md_theme_dark_warningContainer">#534300</color> <!-- Amber 900 -->
<color name="md_theme_dark_onWarning">#332200</color> <!-- Molto scuro per testo su warning -->
<color name="md_theme_dark_onWarningContainer">#FFF8E1</color> <!-- Amber 50 -->
<color name="md_theme_dark_background">#001F24</color>
<color name="md_theme_dark_onBackground">#97F0FF</color>
<color name="md_theme_dark_surface">#001F24</color>

View File

@@ -226,6 +226,7 @@
<string name="alert_delete_UL">Are you sure you want to delete this UL? Please confirm</string>
<string name="alert_delete_mtb_colr">Are you sure to delete? Please confirm</string>
<string name="alert_delete_trasf">Are you sure to delete? Please confirm</string>
<string name="warehouse">Warehouse</string>
@@ -532,4 +533,7 @@
<string name="occupied_label">Occupied %s</string>
<string name="occupied_of_label">Occupied %d / $d</string>
<string name="last_posizionamento_label">Last pos: %s</string>
<string name="alert_export_trasferimento_pedane_dialog_title">Confirm export</string>
<string name="alert_export_trasferimento_pedane_dialog_text"><![CDATA[You are confirming the transfer of the pallets. Once confirmed, <b>it will no longer be possible to modify their contents</b>. Do you want to proceed?]]></string>
</resources>

View File

@@ -21,6 +21,10 @@
<item name="colorSuccessContainer">@color/md_theme_light_successContainer</item>
<item name="colorOnSuccess">@color/md_theme_light_onSuccess</item>
<item name="colorOnSuccessContainer">@color/md_theme_light_onSuccessContainer</item>
<item name="colorWarning">@color/md_theme_light_warning</item>
<item name="colorWarningContainer">@color/md_theme_light_warningContainer</item>
<item name="colorOnWarning">@color/md_theme_light_onWarning</item>
<item name="colorOnWarningContainer">@color/md_theme_light_onWarningContainer</item>
<item name="android:colorBackground">@color/md_theme_light_background</item>
<item name="colorOnBackground">@color/md_theme_light_onBackground</item>
<item name="colorSurface">@color/md_theme_light_surface</item>