Finish v1.27.0(287)

This commit is contained in:
Valerio Castellana 2022-05-25 17:19:49 +02:00
commit c264cd38e3
42 changed files with 2179 additions and 192 deletions

View File

@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 286
def appVersionName = '1.26.3'
def appVersionCode = 287
def appVersionName = '1.27.0'
signingConfigs {
release {

View File

@ -45,6 +45,8 @@ import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisogn
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaModule;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneComponent;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneModule;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeComponent;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeModule;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
@ -61,6 +63,8 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComp
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListComponent;
import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListModule;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent;
@ -128,7 +132,9 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
DocInterniEditFormModule.class,
DialogSelectDocRowsModule.class,
DialogAskClienteModule.class,
DialogEditArticoloModule.class
DialogEditArticoloModule.class,
DialogPrintOrderSSCCListModule.class,
ProdLineeProduzioneModule.class
})
public interface MainApplicationComponent {
@ -216,6 +222,10 @@ public interface MainApplicationComponent {
DialogEditArticoloComponent.Factory dialogEditArticoloComponent();
DialogPrintOrderSSCCListComponent.Factory dialogPrintOrderSSCCListComponent();
ProdLineeProduzioneComponent.Factory prodLineeProduzioneComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@ -8,6 +8,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoF
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoFragment;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdFragment;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneFragment;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
@ -133,6 +134,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_prod_accettazione_produzione)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_external)
.setFragmentFactory(ProdRientroMerceFragment::newInstance))
.addItem(new MenuItem()
.setID(it.integry.integrywmsnative.R.id.nav_prod_linee)
.setCodMenu("MG061")
.setTitleText(it.integry.integrywmsnative.R.string.nav_prod_linee_title)
.setTitleIcon(R.drawable.ic_production_line)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_production_line)
.setFragmentFactory(ProdLineeProduzioneFragment::newInstance))
).addGroup(
new MenuGroup()
.setGroupText(R.string.internal_handling)

View File

@ -0,0 +1,12 @@
package it.integry.integrywmsnative.core.di.binders;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.databinding.BindingAdapter;
public class ImageViewBinders {
@BindingAdapter("tint")
public static void bindImageViewTint(final AppCompatImageView view, final int color) {
view.setColorFilter(color, android.graphics.PorterDuff.Mode.MULTIPLY);
}
}

View File

@ -11,7 +11,6 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.report.ReportType;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
@ -21,6 +20,7 @@ import it.integry.integrywmsnative.core.rest.model.ReportTypeDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@ -156,10 +156,10 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
printReportType(reportType, codMdep, null, params, onComplete, onFailed);
}
public void printClosedOrders(List<DtbOrdt> closedOrders, String codMdep, Runnable onComplete, RunnableArgs<Exception> onFailed) {
public void printClosedOrders(PrintOrderCloseDTO dto, String codMdep, Runnable onComplete, RunnableArgs<Exception> onFailed) {
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class, 240);
Call<ServiceRESTResponse<Object>> callable = printerService.printClosedOrders(codMdep, closedOrders);
Call<ServiceRESTResponse<Object>> callable = printerService.printClosedOrders(codMdep, dto);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {

View File

@ -2,11 +2,11 @@ package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.JasperDTO;
import it.integry.integrywmsnative.core.rest.model.ReportTypeDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
@ -41,7 +41,7 @@ public interface PrinterRESTConsumerService {
@POST("wms/printClosedOrders")
Call<ServiceRESTResponse<Object>> printClosedOrders(
@Query("codMdep") String codMdep,
@Body List<DtbOrdt> closedOrders
@Body PrintOrderCloseDTO printOrderCloseDTO
);
}

View File

@ -0,0 +1,91 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.google.gson.JsonObject;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class ProductionLinesRESTConsumer extends _BaseRESTConsumer {
public void avviaLineaDiProduzione(String codJfas, Integer hrNum, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<JsonObject>> callable = restService.avviaLineaDiProduzione(codJfas, hrNum);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "avviaLineaDiProduzione", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void arrestaLineaDiProduzione(String codJfas, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<JsonObject>> callable = restService.arrestaLineaDiProduzione(codJfas);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "arrestaLineaDiProduzione", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void avviaProduzioneArticoloSuLinea(String codJfas, String codMart, String partitaMag, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class, 300);
Call<ServiceRESTResponse<JsonObject>> callable = restService.avviaProduzioneArticoloSuLinea(codJfas, codMart, partitaMag);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "avviaProduzioneArticoloSuLinea", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getStatoLinee(String codMdep, RunnableArgs<List<ProdLineStatusDTO>> onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> callable = restService.getStatoLinee(codMdep);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Response<ServiceRESTResponse<List<ProdLineStatusDTO>>> response) {
analyzeAnswer(response, "getStatoLinee", onComplete::run, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@ -0,0 +1,27 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.google.gson.JsonObject;
import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface ProductionLinesRESTConsumerService {
@POST("mes_v2/avviaLineaDiProduzione")
Call<ServiceRESTResponse<JsonObject>> avviaLineaDiProduzione(@Query("codJfas") String codJfas, @Query("hrNum") Integer hrNum);
@POST("mes_v2/arrestaLineaDiProduzione")
Call<ServiceRESTResponse<JsonObject>> arrestaLineaDiProduzione(@Query("codJfas") String codJfas);
@POST("mes_v2/avviaProduzioneArticoloSuLinea")
Call<ServiceRESTResponse<JsonObject>> avviaProduzioneArticoloSuLinea(@Query("codJfas") String codJfas, @Query("codMart") String codMart, @Query("partitaMag") String partitaMag);
@GET("mes_v2/statoLineeProd")
Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> getStatoLinee(@Query("codMdep") String codMdep);
}

View File

@ -270,14 +270,6 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_CAN_SELECT_MULTIPLE_ORDERS"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_PACKING_LIST_ON_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_ETICHETTE_ON_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
@ -331,8 +323,6 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class));
// dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", Boolean.class));
// dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
dbSettingsModelIstance.setFlagOrdinaNuoviArticoliInGriglia(getValueFromList(list, "ORDINI_A", "ORDINA_NUOVI_ARTICOLI", Boolean.class));
dbSettingsModelIstance.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class));

View File

@ -32,6 +32,10 @@ public class UtilityBarcode {
return barcodeScanDTO != null && (barcodeScanDTO.getType() == BarcodeType.CODE128 || barcodeScanDTO.getType() == BarcodeType.EAN128);
}
public static boolean isEan128(BarcodeScanDTO barcodeScanDTO) {
return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN128;
}
public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) {
return isEtichettaPosizione(barcodeScanDTO, true);
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import dagger.Subcomponent;
@Subcomponent
public interface ProdLineeProduzioneComponent {
@Subcomponent.Factory
interface Factory {
ProdLineeProduzioneComponent create();
}
void inject(ProdLineeProduzioneFragment prodLineeProduzioneFragment);
}

View File

@ -0,0 +1,187 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.text.InputType;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentLineeProdBinding;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.BottomSheetLineAction;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.DialogStartProduction;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ui.LinesListAdapter;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ProdLineeProduzioneFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ProdLineeProduzioneViewModel.Listener {
@Inject
ProdLineeProduzioneViewModel mViewModel;
private final ObservableArrayList<ProdLineStatusDTO> mLinesObservableList = new ObservableArrayList<>();
private FragmentLineeProdBinding mBinding;
private ElevatedToolbar mToolbar;
private int barcodeScannerIstanceID = -1;
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data);
};
public static ProdLineeProduzioneFragment newInstance() {
return new ProdLineeProduzioneFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_linee_prod, container, false);
MainApplication.appComponent
.prodLineeProduzioneComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBinding.setLifecycleOwner(this);
this.initRecyclerView();
this.initBarcodeReader();
mViewModel.init();
return mBinding.getRoot();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError));
}
@Override
public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar;
}
public void refreshLineeProd(List<ProdLineStatusDTO> linesList) {
this.mLinesObservableList.clear();
if (linesList != null) {
this.mLinesObservableList.addAll(linesList);
}
}
private void initRecyclerView() {
this.mViewModel.getProdLinesList().observe(getViewLifecycleOwner(), this::refreshLineeProd);
LinesListAdapter prodLinesListAdapter = new LinesListAdapter(this.requireActivity(), this.mLinesObservableList);
prodLinesListAdapter.setEmptyView(this.mBinding.linesListEmptyView);
this.mBinding.linesMainList.setAdapter(prodLinesListAdapter);
this.mBinding.linesMainList.setLayoutManager(new LinearLayoutManager(this.requireActivity()));
prodLinesListAdapter.setOnItemClicked(this.mViewModel::onLineSelected);
if (mToolbar != null)
mToolbar.setRecyclerView(this.mBinding.linesMainList);
}
public void requestResources(ProdLineStatusDTO prodLine) {
this.onLoadingEnded();
BarcodeManager.disable();
requireActivity().runOnUiThread(() -> {
DialogSimpleInputHelper.makeInputDialog(requireContext(), "Inserisci il numero di risorse da allocare", qta -> {
this.onLoadingStarted();
try {
Integer hrNum = Integer.parseInt(qta);
this.mViewModel.startProductionLine(prodLine, hrNum);
} catch (NumberFormatException ex) {
this.onError(new Exception("Inserire un numero di risorse valido"));
}
}, BarcodeManager::enable, InputType.TYPE_CLASS_NUMBER).show();
});
}
public void requestOrderChange(ProdLineStatusDTO prodLine) {
this.onLoadingEnded();
requireActivity().runOnUiThread(() -> {
DialogStartProduction.newInstance((dto) -> {
this.mViewModel.checkBarcodeAndStartOrdine(prodLine, dto);
}).show(getChildFragmentManager(), "DialogStartProduction");
});
}
public void requestProductionStop(ProdLineStatusDTO prodLine) {
this.onLoadingEnded();
BarcodeManager.disable();
if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) {
mViewModel.stopProduction(prodLine);
} else {
this.confirmOrderClose(() -> {
mViewModel.stopProduction(prodLine);
});
}
}
@Override
public void successDialog(String message, Runnable onComplete) {
BarcodeManager.disable();
requireActivity().runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(getResources().getString(R.string.success),
new SpannableString(message), null, onComplete).show(getChildFragmentManager(), "successDialog"));
}
@Override
public void selectLine(ProdLineStatusDTO dto) {
this.onLoadingEnded();
BarcodeManager.disable();
if (!dto.isStarted()) {
this.requestResources(dto);
} else {
BottomSheetLineAction.newInstance(dto, this::requestResources, this::requestOrderChange, this::requestProductionStop, BarcodeManager::enable).show(getChildFragmentManager(), "BottomSheetLineAction");
}
}
@Override
public void confirmOrderClose(Runnable onConfirm) {
this.onLoadingEnded();
requireActivity().runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(
Html.fromHtml("Per completare l'operazione è necessario chiudere gli ordini attualmente aperti sulla linea."
+ "<br /> <br/>" +
"Continuare?"),
null,
onConfirm,
BarcodeManager::enable
).show(getChildFragmentManager(), "confirmOrderClose");
});
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.nav_prod_linee_title).toString());
}
}

View File

@ -0,0 +1,25 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
@Module(subcomponents = ProdRientroMerceComponent.class)
public class ProdLineeProduzioneModule {
@Provides
ProdLineeProduzioneViewModel providesProdRientroMerceViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) {
return new ProdLineeProduzioneViewModel(productionLinesRESTConsumer, barcodeRESTConsumer);
}
@Provides
@Singleton
ProductionLinesRESTConsumer providesProductionLinesRESTConsumer() {
return new ProductionLinesRESTConsumer();
}
}

View File

@ -0,0 +1,142 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
public class ProdLineeProduzioneViewModel {
private final ProductionLinesRESTConsumer productionLinesRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final MutableLiveData<List<ProdLineStatusDTO>> prodLines = new MutableLiveData<>();
private Listener mListener;
@Inject
public ProdLineeProduzioneViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) {
this.productionLinesRESTConsumer = productionLinesRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
}
public void init() {
this.sendOnLoadingStarted();
reloadLines();
}
private void reloadLines() {
BarcodeManager.disable();
sendOnLoadingStarted();
this.productionLinesRESTConsumer.getStatoLinee(SettingsManager.i().getUserSession().getDepo().getCodMdep(), lineeProdList -> {
this.sendOnLoadingEnded();
BarcodeManager.enable();
prodLines.postValue(lineeProdList);
}, this::sendError);
}
public MutableLiveData<List<ProdLineStatusDTO>> getProdLinesList() {
return prodLines;
}
public void setListener(Listener listener) {
this.mListener = listener;
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) {
String codJfas = barcodeScanDTO.getStringValue();
ProdLineStatusDTO prodLine = prodLines.getValue() != null ? Stream.of(prodLines.getValue()).filter(x -> x.getCodJfas().equalsIgnoreCase(codJfas)).findFirstOrElse(null) : null;
if (prodLine != null) {
this.onLineSelected(prodLine);
} else {
this.sendError(new Exception("Linea di produzione " + codJfas + " non trovata"));
}
}
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 void startProductionLine(ProdLineStatusDTO prodLine, Integer hrNum) {
this.sendOnLoadingStarted();
this.productionLinesRESTConsumer.avviaLineaDiProduzione(prodLine.getCodJfas(),
hrNum,
() -> this.mListener.successDialog("Operazione completata", this::reloadLines),
this::sendError);
}
public void onLineSelected(ProdLineStatusDTO lineSelected) {
mListener.selectLine(lineSelected);
}
public void checkBarcodeAndStartOrdine(ProdLineStatusDTO prodLine, BarcodeScanDTO dto) {
this.sendOnLoadingStarted();
mBarcodeRESTConsumer.decodeEan128(dto, (ean128) -> {
String codMart = ean128.Content;
String partitaMag = ean128.BatchLot;
if (!prodLine.isStarted()) {
this.sendError(new Exception("Impossibile avviare una produzione su una linea ferma!"));
} else if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) {
this.startProduction(prodLine, codMart, partitaMag);
} else {
this.mListener.confirmOrderClose(() -> {
this.startProduction(prodLine, codMart, partitaMag);
});
}
}, this::sendError);
}
private void startProduction(ProdLineStatusDTO prodLine, String codMart, String partitaMag) {
this.sendOnLoadingStarted();
this.productionLinesRESTConsumer.avviaProduzioneArticoloSuLinea(prodLine.getCodJfas(), codMart, partitaMag,
() -> this.mListener.successDialog("Operazione completata", this::reloadLines),
this::sendError);
}
public void stopProduction(ProdLineStatusDTO prodLine) {
this.sendOnLoadingStarted();
this.productionLinesRESTConsumer.arrestaLineaDiProduzione(prodLine.getCodJfas(),
() -> this.mListener.successDialog("Operazione completata", this::reloadLines),
this::sendError);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void successDialog(String message, Runnable onComplete);
void selectLine(ProdLineStatusDTO prodLineStatusDTO);
void confirmOrderClose(Runnable onConfirm);
}
}

View File

@ -0,0 +1,111 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.databinding.BottomSheetLineActionsBinding;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
public class BottomSheetLineAction extends BottomSheetDialogFragment {
private BottomSheetLineActionsBinding mBinding;
private ProdLineStatusDTO prodLine;
private RunnableArgs<ProdLineStatusDTO> onChangeResourcesRequest;
private RunnableArgs<ProdLineStatusDTO> onChangeOrdersRequest;
private RunnableArgs<ProdLineStatusDTO> onLineCloseRequest;
private Runnable onCancelAction;
public static BottomSheetLineAction newInstance(ProdLineStatusDTO dto, RunnableArgs<ProdLineStatusDTO> onChangeResourcesRequest, RunnableArgs<ProdLineStatusDTO> onChangeOrdersRequest, RunnableArgs<ProdLineStatusDTO> onLineCloseRequest, Runnable onCancel) {
BottomSheetLineAction fragment = new BottomSheetLineAction();
fragment
.setProdLine(dto)
.setOnChangeResourcesRequest(onChangeResourcesRequest)
.setOnChangeOrdersRequest(onChangeOrdersRequest)
.setOnLineCloseRequest(onLineCloseRequest)
.setOnCancelAction(onCancel);
return fragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = BottomSheetLineActionsBinding.inflate(inflater, container, false);
mBinding.setLifecycleOwner(this);
mBinding.setView(this);
mBinding.setListModel(this.prodLine);
return mBinding.getRoot();
}
public BottomSheetLineAction setOnCancelAction(Runnable onCancelAction) {
this.onCancelAction = onCancelAction;
return this;
}
public BottomSheetLineAction setOnChangeResourcesRequest(RunnableArgs<ProdLineStatusDTO> onChangeResourcesRequest) {
this.onChangeResourcesRequest = onChangeResourcesRequest;
return this;
}
public BottomSheetLineAction setOnChangeOrdersRequest(RunnableArgs<ProdLineStatusDTO> onChangeOrdersRequest) {
this.onChangeOrdersRequest = onChangeOrdersRequest;
return this;
}
public BottomSheetLineAction setOnLineCloseRequest(RunnableArgs<ProdLineStatusDTO> onLineCloseRequest) {
this.onLineCloseRequest = onLineCloseRequest;
return this;
}
public ProdLineStatusDTO getProdLine() {
return prodLine;
}
public BottomSheetLineAction setProdLine(ProdLineStatusDTO prodLine) {
this.prodLine = prodLine;
return this;
}
public void onResourcesClicked() {
if (this.onChangeResourcesRequest != null) {
this.onChangeResourcesRequest.run(prodLine);
}
this.dismiss();
}
public void onPlayClicked() {
if (this.onChangeOrdersRequest != null) {
this.onChangeOrdersRequest.run(prodLine);
}
this.dismiss();
}
public void onStopClicked() {
if (this.onLineCloseRequest != null) {
this.onLineCloseRequest.run(prodLine);
}
this.dismiss();
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
if (this.onCancelAction != null) {
onCancelAction.run();
}
super.onCancel(dialog);
}
}

View File

@ -0,0 +1,77 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.databinding.DialogStartProductionBinding;
public class DialogStartProduction extends BaseDialogFragment {
private int barcodeScannerIstanceID = -1;
private RunnableArgs<BarcodeScanDTO> onScanSuccessful;
private DialogStartProductionBinding mBinding;
public static DialogStartProduction newInstance(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
Bundle args = new Bundle();
DialogStartProduction fragment = new DialogStartProduction();
fragment.setArguments(args);
fragment.setOnScanSuccessful(onScanSuccessful);
return fragment;
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onDismiss(dialog);
}
public DialogStartProduction setOnScanSuccessful(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
this.onScanSuccessful = onScanSuccessful;
return this;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DialogStartProductionBinding.inflate(inflater, container, false);
mBinding.setLifecycleOwner(this);
this.initBarcodeReader();
setCancelable(true);
getDialog().setCanceledOnTouchOutside(true);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBinding.getRoot();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(this::processBarcode)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
private void processBarcode(BarcodeScanDTO barcodeScanDTO) {
if (UtilityBarcode.isEan128(barcodeScanDTO)) {
this.onScanSuccessful.run(barcodeScanDTO);
this.dismiss();
} else {
this.onError(new Exception("Il barcode scansionato non è valido!"));
}
}
}

View File

@ -0,0 +1,129 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.dto;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
public class ProdLineStatusDTO {
private String codJfas;
private String descrizione;
private String codMdepLav;
private Date datetimeStart;
private Date datetimeEnd;
private BigDecimal maxAllocazione;
private Integer qtaAllocate;
private String listaOrd;
public String getCodJfas() {
return codJfas;
}
public ProdLineStatusDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getDescrizione() {
return descrizione;
}
public ProdLineStatusDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public String getCodMdepLav() {
return codMdepLav;
}
public ProdLineStatusDTO setCodMdepLav(String codMdepLav) {
this.codMdepLav = codMdepLav;
return this;
}
public Date getDatetimeStart() {
return datetimeStart;
}
public ProdLineStatusDTO setDatetimeStart(Date datetimeStart) {
this.datetimeStart = datetimeStart;
return this;
}
public Date getDatetimeEnd() {
return datetimeEnd;
}
public ProdLineStatusDTO setDatetimeEnd(Date datetimeEnd) {
this.datetimeEnd = datetimeEnd;
return this;
}
public BigDecimal getMaxAllocazione() {
return maxAllocazione;
}
public ProdLineStatusDTO setMaxAllocazione(BigDecimal maxAllocazione) {
this.maxAllocazione = maxAllocazione;
return this;
}
public Integer getQtaAllocate() {
return qtaAllocate;
}
public ProdLineStatusDTO setQtaAllocate(Integer qtaAllocate) {
this.qtaAllocate = qtaAllocate;
return this;
}
public String getListaOrd() {
return listaOrd;
}
public ProdLineStatusDTO setListaOrd(String listaOrd) {
this.listaOrd = listaOrd;
return this;
}
public boolean isStarted() {
return datetimeStart != null && datetimeEnd == null;
}
public boolean isPaused() {
if (datetimeEnd == null) {
return false;
}
Calendar today = Calendar.getInstance();
today.set(Calendar.MILLISECOND, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.HOUR_OF_DAY, 0);
Calendar lastCloseTime = Calendar.getInstance();
lastCloseTime.setTime(datetimeEnd);
lastCloseTime.set(Calendar.MILLISECOND, 0);
lastCloseTime.set(Calendar.SECOND, 0);
lastCloseTime.set(Calendar.MINUTE, 0);
lastCloseTime.set(Calendar.HOUR_OF_DAY, 0);
return datetimeStart != null && datetimeEnd != null && today.equals(lastCloseTime);
}
public String getLabel() {
return codJfas + " - " + descrizione;
}
public String getRisorseLabel() {
return qtaAllocate + (maxAllocazione != null && maxAllocazione.compareTo(BigDecimal.ZERO) > 0 ? "/" + maxAllocazione : "");
}
}

View File

@ -0,0 +1,62 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.ui;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView;
import it.integry.integrywmsnative.databinding.FragmentLineeProdMainListModelBinding;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
public class LinesListAdapter extends ExtendedRecyclerView<ProdLineStatusDTO, LinesListAdapter.SingleItemViewHolder> {
private Context mContext;
private RunnableArgs<ProdLineStatusDTO> mOnItemClicked;
public LinesListAdapter(Context context, ObservableArrayList<ProdLineStatusDTO> myDataset) {
super(myDataset);
this.mContext = context;
}
@NonNull
@Override
public LinesListAdapter.SingleItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
FragmentLineeProdMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.fragment_linee_prod_main_list_model, parent, false);
return new LinesListAdapter.SingleItemViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull LinesListAdapter.SingleItemViewHolder holder, int position) {
final ProdLineStatusDTO line = mDataset.get(position);
holder.binding.setListModel(line);
holder.binding.executePendingBindings();
holder.binding.getRoot().setOnClickListener(v -> {
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(line);
});
}
public void setOnItemClicked(RunnableArgs<ProdLineStatusDTO> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
FragmentLineeProdMainListModelBinding binding;
SingleItemViewHolder(FragmentLineeProdMainListModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
}

View File

@ -56,10 +56,12 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListView;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
@ -849,12 +851,58 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}).show();
}
public void askShouldPrintPackingList(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs<PrintOrderCloseDTO> onComplete) {
DialogSimpleMessageView.makeInfoDialog(
getResources().getString(R.string.action_close_order),
new SpannableString(getResources().getString(R.string.message_print_packing_list_on_close_order)),
null,
() -> {
printOrderCloseDTO.setFlagPrintPackingList(true);
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} else {
onComplete.run(printOrderCloseDTO);
}
},
() -> {
printOrderCloseDTO.setFlagPrintPackingList(false);
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} else {
onComplete.run(printOrderCloseDTO);
}
}
)
.show(getSupportFragmentManager(), "tag");
}
public void askShouldPrintSSCC(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs<PrintOrderCloseDTO> onComplete) {
DialogPrintOrderSSCCListView.newInstance(printOrderCloseDTO, onComplete).show(this.getSupportFragmentManager(), "dialogPrintOrderSSCCListView");
}
@Override
public void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete) {
PrintOrderCloseDTO printOrderCloseDTO = new PrintOrderCloseDTO();
if (SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
this.askShouldPrintPackingList(printOrderCloseDTO, onComplete);
} else if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
}
}
@Override
public void onOrderClosed() {
this.onLoadingEnded();
this.onBackPressed();
}
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);

View File

@ -68,6 +68,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUEx
import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
public class SpedizioneViewModel {
@ -304,6 +305,14 @@ public class SpedizioneViewModel {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete) {
if (this.mListener != null) mListener.onCloseOrderPrintRequest(onComplete);
}
private void sendOnOrderClosed() {
if (this.mListener != null) mListener.onOrderClosed();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
@ -1853,13 +1862,16 @@ public class SpedizioneViewModel {
public void closeOrder() {
this.sendOnLoadingStarted();
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
printClosedOrders(this.mTestateOrdini, this::sendOnLoadingEnded, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded));
this.sendOnCloseOrderPrintRequest(this::onCloseOrderPrintRequest);
}
}
private void printClosedOrders(List<OrdineUscitaInevasoDTO> listOrdiniInevasi, Runnable onSuccess, RunnableArgs<Exception> onAbort) {
HashMap<String, Object> params = new HashMap<>();
List<DtbOrdt> closedOrders = Stream.of(listOrdiniInevasi).map(ord -> {
private void onCloseOrderPrintRequest(PrintOrderCloseDTO dto) {
if (!dto.isFlagPrintPackingList() && !dto.isFlagPrintSSCC()) {
this.sendOnOrderClosed();
return;
}
List<DtbOrdt> closedOrders = Stream.of(this.mTestateOrdini).map(ord -> {
DtbOrdt ordV = new DtbOrdt();
ordV.setDataOrd(ord.getDataOrdS())
.setNumOrd(ord.getNumOrd())
@ -1867,9 +1879,15 @@ public class SpedizioneViewModel {
.setCodAnag(ord.getCodAnagOrd());
return ordV;
}).toList();
dto.setPrintList(closedOrders);
printClosedOrders(dto, this::sendOnOrderClosed, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded));
}
private void printClosedOrders(PrintOrderCloseDTO dto, Runnable onSuccess, RunnableArgs<Exception> onAbort) {
this.mPrinterRESTConsumer.printClosedOrders(
closedOrders,
dto,
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
onSuccess,
onAbort);
@ -1974,6 +1992,10 @@ public class SpedizioneViewModel {
void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete);
void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete);
void onCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete);
void onOrderClosed();
}
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
import dagger.Subcomponent;
@Subcomponent
public interface DialogPrintOrderSSCCListComponent {
@Subcomponent.Factory
interface Factory {
DialogPrintOrderSSCCListComponent create();
}
void inject(DialogPrintOrderSSCCListView dialogPrintOrderSSCCListView);
}

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogPrintOrderSSCCListComponent.class)
public class DialogPrintOrderSSCCListModule {
@Provides
DialogPrintOrderSSCCListViewModel providesDialogPrintOrderSSCCListViewModel() {
return new DialogPrintOrderSSCCListViewModel();
}
}

View File

@ -0,0 +1,115 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.inject.Inject;
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.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.DialogPrintOrderSsccListBinding;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
@Inject
DialogPrintOrderSSCCListViewModel mViewModel;
private Context mContext;
private DialogPrintOrderSsccListBinding mBindings;
private final PrintOrderCloseDTO printOrderCloseDTO;
private final RunnableArgs<PrintOrderCloseDTO> onDialogClose;
public static DialogPrintOrderSSCCListView newInstance(
PrintOrderCloseDTO printOrderCloseDTO,
RunnableArgs<PrintOrderCloseDTO> onDismiss
) {
return new DialogPrintOrderSSCCListView(printOrderCloseDTO, onDismiss);
}
public DialogPrintOrderSSCCListView(@NotNull PrintOrderCloseDTO printOrderCloseDTO, @NotNull RunnableArgs<PrintOrderCloseDTO> onDismiss) {
this.printOrderCloseDTO = printOrderCloseDTO;
this.onDialogClose = onDismiss;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.mContext = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_print_order_sscc_list, container, false);
MainApplication.appComponent
.dialogPrintOrderSSCCListComponent()
.create()
.inject(this);
mBindings.setView(this);
setCancelable(true);
getDialog().setCanceledOnTouchOutside(true);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBindings.getRoot();
}
public void onCheckChange(RadioGroup radioGroup, int id) {
this.printOrderCloseDTO.setFlagSkipPrintedSSCC(id == mBindings.printOnlyNew.getId());
}
public void onPositiveClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(true);
this.dismiss();
}
public void onNegativeClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(false);
this.dismiss();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
this.onDialogClose.run(this.printOrderCloseDTO);
super.onDismiss(dialog);
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
this.onNegativeClick();
super.onCancel(dialog);
}
@Override
public void onStart() {
if (this.printOrderCloseDTO.isFlagSkipPrintedSSCC()) {
mBindings.printOnlyNew.setChecked(true);
} else {
mBindings.printAll.setChecked(true);
}
super.onStart();
}
@Override
public void onError(Exception ex) {
UtilityExceptions.defaultException(this.mContext, ex);
dismiss();
}
}

View File

@ -0,0 +1,6 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
public class DialogPrintOrderSSCCListViewModel {
}

View File

@ -0,0 +1,48 @@
package it.integry.integrywmsnative.gest.spedizione.model;
import java.util.List;
import it.integry.integrywmsnative.core.model.DtbOrdt;
public class PrintOrderCloseDTO {
private boolean flagPrintPackingList = false;
private boolean flagPrintSSCC = false;
private boolean flagSkipPrintedSSCC = true;
private List<DtbOrdt> printList;
public boolean isFlagPrintPackingList() {
return flagPrintPackingList;
}
public PrintOrderCloseDTO setFlagPrintPackingList(boolean flagPrintPackingList) {
this.flagPrintPackingList = flagPrintPackingList;
return this;
}
public boolean isFlagPrintSSCC() {
return flagPrintSSCC;
}
public PrintOrderCloseDTO setFlagPrintSSCC(boolean flagPrintSSCC) {
this.flagPrintSSCC = flagPrintSSCC;
return this;
}
public boolean isFlagSkipPrintedSSCC() {
return flagSkipPrintedSSCC;
}
public PrintOrderCloseDTO setFlagSkipPrintedSSCC(boolean flagSkipPrintedSSCC) {
this.flagSkipPrintedSSCC = flagSkipPrintedSSCC;
return this;
}
public List<DtbOrdt> getPrintList() {
return printList;
}
public PrintOrderCloseDTO setPrintList(List<DtbOrdt> printList) {
this.printList = printList;
return this;
}
}

View File

@ -4,6 +4,7 @@ import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.text.InputType;
import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil;
@ -21,12 +22,11 @@ import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding;
public class DialogSimpleInputHelper {
private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick){
private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick, Integer inputType) {
Dialog dialog = new Dialog(mContext);
DialogSimpleInputViewModel viewModel = new DialogSimpleInputViewModel(dialog);
DialogInputGeneralBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.dialog_input_general, null, false);
viewModel
.setOnPositive(() -> {
@ -38,6 +38,7 @@ public class DialogSimpleInputHelper {
mBinding.setViewmodel(viewModel);
//Title VIEW
mBinding.titleText.setText(titleText);
if (!UtilityString.isNullOrEmpty(hintText)) {
@ -47,7 +48,9 @@ public class DialogSimpleInputHelper {
if (!UtilityString.isNullOrEmpty(defaultTextValue)) {
mBinding.generalInput.setText(defaultTextValue);
}
if (inputType != null) {
mBinding.generalInput.setInputType(InputType.TYPE_CLASS_NUMBER);
}
//Content View
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(false);
@ -66,7 +69,8 @@ public class DialogSimpleInputHelper {
null,
null,
onPositiveClick,
onNegativeClick);
onNegativeClick,
null);
}
@ -78,10 +82,35 @@ public class DialogSimpleInputHelper {
defaultTextValue,
hintText,
onPositiveClick,
onNegativeClick);
onNegativeClick,
null);
}
public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick, Integer inputType) {
return makeBase(mContext,
title,
null,
null,
onPositiveClick,
onNegativeClick,
inputType);
}
public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick, Integer inputType) {
return makeBase(mContext,
title,
defaultTextValue,
hintText,
onPositiveClick,
onNegativeClick,
inputType);
}
}

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M8,5v14l11,-7z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M6,6h12v12H6z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

View File

@ -0,0 +1,6 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white"
android:fillType="evenOdd" android:pathData="M8,16h8V8H8V16zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2L12,2z"/>
</vector>

View File

@ -0,0 +1,211 @@
<?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="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="android.view.View" />
<import type="androidx.core.content.ContextCompat" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<variable
type="it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.BottomSheetLineAction"
name="view" />
<variable
type="it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO"
name="listModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/descriptionLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/mtb_grp_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{listModel.getLabel()}"
android:textColor="@{ContextCompat.getColor(context,listModel.isStarted() ? R.color.green_600 : listModel.isPaused() ? R.color.orange_600 : R.color.red_600)}"
android:textSize="16sp"
android:textStyle="bold"
tools:text="L2 - Linea 2"
tools:textColor="@color/green_600" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@{ContextCompat.getColor(context, listModel.isStarted() ? R.color.green_600 : listModel.isPaused() ? R.color.orange_600 : R.color.red_600)}"
android:orientation="horizontal"
android:weightSum="2"
tools:backgroundTint="@color/green_600">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="18dp"
android:layout_height="19dp"
android:layout_gravity="center_horizontal"
android:src="@{ContextCompat.getDrawable(context, listModel.isStarted() ? R.drawable.ic_baseline_play_arrow_24 : listModel.isPaused() ? R.drawable.ic_baseline_pause_24 : R.drawable.ic_baseline_stop_24)}"
app:tint="@color/white"
tools:src="@drawable/ic_baseline_play_arrow_24" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/peso_lordo_collo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{listModel.isStarted() ? R.string.in_progress : listModel.isPaused() ? R.string.stand_by : R.string.stopped}"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="In lavorazione" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/lista_ords_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
android:orientation="horizontal"
android:visibility="@{listModel.isStarted() &amp;&amp; !UtilityString.isNullOrEmpty(listModel.listaOrd) ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/orders_in_progress"
android:textColor="@android:color/black"
android:textSize="14sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/lista_ords"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{listModel.listaOrd}"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold"
tools:text="125|255" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:onClick="@{()->view.onResourcesClicked()}"
android:orientation="horizontal"
android:padding="16dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_person_add_24" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.Material3.BodyLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="@string/ridistribuisci_risorse" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:onClick="@{()->view.onPlayClicked()}"
android:orientation="horizontal"
android:padding="16dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_play_arrow_24" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.Material3.BodyLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="@string/avvia_nuova_produzione" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:onClick="@{()->view.onStopClicked()}"
android:orientation="horizontal"
android:padding="16dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_stop_24" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.Material3.BodyLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="@string/arresta_produzione" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -0,0 +1,121 @@
<?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">
<data>
<import type="android.view.View" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListView" />
</data>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardBackgroundColor="@android:color/transparent"
app:cardCornerRadius="24dp"
app:cardElevation="0dp">
<androidx.cardview.widget.CardView
android:id="@+id/base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardBackgroundColor="@color/light_blue_300"
app:cardCornerRadius="24dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:background="@drawable/dialog_card_child_bg"
android:padding="24dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="@string/action_close_order" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_text"
style="@style/TextViewMaterial"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:gravity="left"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_text"
android:text="@string/message_print_SSCC_list_on_close_order" />
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onCheckedChanged="@{view::onCheckChange}"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@id/description_text">
<RadioButton
android:id="@+id/print_only_new"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/action_print_SSCC_only_remaining" />
<RadioButton
android:id="@+id/print_all"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/action_print_SSCC_all" />
</RadioGroup>
<com.google.android.material.button.MaterialButton
android:id="@+id/buttonPositive"
style="?attr/materialButtonOutlinedStyle"
android:layout_marginTop="12dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:onClick="@{() -> view.onPositiveClick()}"
android:text="@string/confirm"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/radioGroup" />
<com.google.android.material.button.MaterialButton
android:id="@+id/buttonNegative"
style="@style/Button.DangerOutline"
android:layout_marginTop="12dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:onClick="@{() -> view.onNegativeClick()}"
android:text="@string/abort"
android:layout_marginEnd="12dp"
android:layout_marginStart="12dp"
app:layout_constraintTop_toBottomOf="@id/radioGroup"
app:layout_constraintEnd_toStartOf="@id/buttonPositive"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,81 @@
<?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">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardBackgroundColor="@android:color/transparent"
app:cardCornerRadius="24dp"
app:cardElevation="0dp">
<androidx.cardview.widget.CardView
android:id="@+id/base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardBackgroundColor="@color/light_blue_300"
app:cardCornerRadius="24dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:background="@drawable/dialog_card_child_bg"
android:padding="24dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="@string/avvia_nuova_produzione" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_text"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_marginEnd="12dp"
android:gravity="center_horizontal"
android:text="@string/scan_item"
android:textSize="16sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<layout>
<data>
<import type="it.integry.integrywmsnative.R" />
</data>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@ -0,0 +1,86 @@
<?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">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/full_white">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/lines_main_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/lines_list_empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.1" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="72dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/ic_playlist_add_check_24dp" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/nessuna_linea_disponibile"
android:textColor="@android:color/black"
android:textSize="18sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>
</LinearLayout>
</layout>

View File

@ -0,0 +1,228 @@
<?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.UtilityDate" />
<import type="android.text.Html" />
<import type="androidx.core.content.ContextCompat" />
<variable
name="listModel"
type="it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
app:layout_constraintEnd_toEndOf="parent"
android:background="?attr/selectableItemBackground"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
android:weightSum="2">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/mtb_grp_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{listModel.getLabel()}"
android:textColor="@{ContextCompat.getColor(context,listModel.isStarted() ? R.color.green_600 : listModel.isPaused() ? R.color.orange_600 : R.color.red_600)}"
android:textSize="16sp"
android:textStyle="bold"
tools:text="L2 - Linea 2"
tools:textColor="@color/green_600" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@{ContextCompat.getColor(context, listModel.isStarted() ? R.color.green_600 : listModel.isPaused() ? R.color.orange_600 : R.color.red_600)}"
android:orientation="horizontal"
android:weightSum="2"
tools:backgroundTint="@color/green_600">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="18dp"
android:layout_height="19dp"
android:layout_gravity="center_horizontal"
android:src="@{ContextCompat.getDrawable(context, listModel.isStarted() ? R.drawable.ic_baseline_play_arrow_24 : listModel.isPaused() ? R.drawable.ic_baseline_pause_24 : R.drawable.ic_baseline_stop_24)}"
app:tint="@color/white"
tools:src="@drawable/ic_baseline_play_arrow_24" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/peso_lordo_collo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{listModel.isStarted() ? R.string.in_progress : listModel.isPaused() ? R.string.stand_by : R.string.stopped}"
android:textAppearance="@style/AppTheme.NewMaterial.Text.Medium"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="In lavorazione" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/resources_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="@{listModel.isStarted() ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/risorse_impostate"
android:textColor="@android:color/black"
android:textSize="14sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/resources"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{listModel.getRisorseLabel()}"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold"
tools:text="5/25" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/lista_ords_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="@{listModel.isStarted() &amp;&amp; !UtilityString.isNullOrEmpty(listModel.listaOrd) ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/orders_in_progress"
android:textColor="@android:color/black"
android:textSize="14sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/lista_ords"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{listModel.listaOrd}"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold"
tools:text="125|255" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/production_start_cotnainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="@{listModel.isStarted() ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/inizio_produzione"
android:textColor="@android:color/black"
android:textSize="14sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/production_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityDate.formatDate(listModel.datetimeStart, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)}"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold"
tools:text="05/07/2022 14:00:00" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/production_stop_cotnainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="@{listModel.isStarted() ? View.GONE : View.VISIBLE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/ultima_produzione"
android:textColor="@android:color/black"
android:textSize="14sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/production_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityDate.formatDate(listModel.datetimeEnd, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)}"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold"
tools:text="05/07/2022 23:59:59" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -8,6 +8,7 @@
<string name="waiting">Attendere</string>
<string name="loading">Caricamento</string>
<string name="completed">Completato</string>
<string name="success">Successo</string>
<string name="ord_acq_testata"><![CDATA[N° <b>%s</b> del <b>%s</b>]]></string>
<string name="ord_ven_testata"><![CDATA[N° <b>%s</b> del <b>%s</b>]]></string>
<string name="ord_testata"><![CDATA[N° <b>%s</b> del <b>%s</b>]]></string>
@ -267,6 +268,9 @@
<string name="recovering_data">Recupero dati</string>
<string name="wait_a_moment">Attendi qualche istante</string>
<string name="title_dynamic_vgalimenti">VGAlimenti personalizzazione</string>
<string name="title_dynamic__base">Base personalizzazione</string>
<string name="title_dynamic_ime">IME personalizzazione</string>
<string name="check_in_printer">Stampante Accettazione</string>
@ -277,6 +281,10 @@
<string name="placement">Posizionamento</string>
<string name="message_print_packing_list">Vuoi procedere con la stampa di una %s</string>
<string name="message_print_packing_list_on_close_order">Vuoi stampare le packing list degli ordini chiusi?</string>
<string name="message_print_SSCC_list_on_close_order">Vuoi stampare le etichette SSCC degli ordini chiusi?</string>
<string name="action_print_SSCC_only_remaining">Stampa solo le nuove etichette</string>
<string name="action_print_SSCC_all">Stampa tutte le etichette</string>
<string name="button_create_new_ul">Crea nuova UL</string>
<string name="button_view_basket_ul">Visualizza basket</string>
<string name="title_open_lu">Apri UL</string>
@ -383,4 +391,17 @@
<string name="newly_inserted_prod">Nuovo articolo in griglia</string>
<string name="doc_interni_select_row_to_edit">Seleziona la riga da modificare</string>
<string name="incoming_cnf">Colli in arrivo</string>
<string name="nav_prod_linee_title">Linee di produzione</string>
<string name="no_line_available">Nessuna linea disponibile</string>
<string name="in_progress">In lavorazione</string>
<string name="stand_by">In pausa</string>
<string name="stopped">Ferma</string>
<string name="risorse_impostate">Risorse allocate</string>
<string name="orders_in_progress">Ordini in lavorazione</string>
<string name="ridistribuisci_risorse">Ridistribuisci risorse</string>
<string name="avvia_nuova_produzione">Avvia nuova produzione</string>
<string name="arresta_produzione">Arresta produzione</string>
<string name="inizio_produzione">Inizio produzione</string>
<string name="ultima_produzione">Ultima produzione</string>
<string name="nessuna_linea_disponibile">Nessuna linea disponibile</string>
</resources>

View File

@ -22,9 +22,6 @@
</style>
<style name="Button.DangerOutline" parent="Widget.MaterialComponents.Button.OutlinedButton">
<!-- <item name="fontFamily">@font/product_sans_regular</item> &lt;!&ndash; target android sdk versions < 26 and > 14 if theme other than AppCompat &ndash;&gt;-->
<!-- <item name="android:textStyle">bold</item>-->
@ -45,4 +42,14 @@
<item name="backgroundTint">@color/red_400</item>
<item name="iconTint">@android:color/white</item>
</style>
<style name="Button.DangerText" parent="Widget.MaterialComponents.Button.TextButton">
<!-- <item name="fontFamily">@font/product_sans_regular</item> &lt;!&ndash; target android sdk versions < 26 and > 14 if theme other than AppCompat &ndash;&gt;-->
<!-- <item name="android:textStyle">bold</item>-->
<!-- <item name="android:textAllCaps">false</item>-->
<!-- <item name="android:paddingTop">8dp</item>-->
<!-- <item name="android:paddingBottom">8dp</item>-->
<item name="android:textColor">@color/red_400</item>
<item name="iconTint">@color/red_400</item>
</style>
</resources>

View File

@ -28,6 +28,7 @@
<item name="nav_pv_ordini_acquisto" type="id" />
<item name="nav_pv_ordini_acquisto_trasmessi" type="id" />
<item name="nav_prod_rientro_merce" type="id" />
<item name="nav_prod_linee" type="id" />
<item name="nav_settings" type="id" />
<item name="nav_logout" type="id" />
<item name="nav_pv_doc_interni" type="id" />

View File

@ -45,6 +45,7 @@
<string name="waiting">Waiting</string>
<string name="loading">Loading</string>
<string name="completed">Completed</string>
<string name="success">Success</string>
<string name="search">Search&#8230;</string>
<string name="login">Login</string>
<string name="permission_request_message">Permissions are required for app to work properly</string>
@ -283,6 +284,10 @@
<string name="placement">Placement</string>
<string name="message_print_packing_list">Do you want print a %s?</string>
<string name="message_print_packing_list_on_close_order">Do you want print the packing lists of the closed orders?</string>
<string name="message_print_SSCC_list_on_close_order">Do you want print the SSCC labels for the closed orders?</string>
<string name="action_print_SSCC_only_remaining">Print only new labels</string>
<string name="action_print_SSCC_all">Print all labels</string>
<string name="button_create_new_ul">Create new LU</string>
<string name="button_view_basket_ul">View basket</string>
<string name="title_open_lu">Open LU</string>
@ -392,4 +397,17 @@
<string name="newly_inserted_prod">Newly added product</string>
<string name="doc_interni_select_row_to_edit">Select document row to edit</string>
<string name="incoming_cnf">Incoming packages</string>
<string name="nav_prod_linee_title">Production lines</string>
<string name="no_line_available">No line available</string>
<string name="in_progress">in progress</string>
<string name="stand_by">Stand by</string>
<string name="stopped">Stopped</string>
<string name="risorse_impostate">Resources set</string>
<string name="orders_in_progress">Orders in progress</string>
<string name="ridistribuisci_risorse">Redistribute resources</string>
<string name="avvia_nuova_produzione">Start production</string>
<string name="arresta_produzione">Stop production</string>
<string name="inizio_produzione">Production start</string>
<string name="ultima_produzione">Last production</string>
<string name="nessuna_linea_disponibile">No production line available</string>
</resources>