Implementata gestione del versamento materiale a magazzino buffer

This commit is contained in:
Giuseppe Scorrano 2023-09-26 17:45:22 +02:00
parent 35210db708
commit c115a6f9f1
25 changed files with 823 additions and 271 deletions

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="21088B8EFD" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-09-21T08:34:36.228340200Z" />
</component>
</project>

View File

@ -69,6 +69,8 @@ import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceCompo
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloComponent;
@ -117,6 +119,8 @@ import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdC
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdModule;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUComponent;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnComponent;
import it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
import it.integry.integrywmsnative.view.dialogs.printSsccUl.DialogPrintUlSSCCComponent;
@ -189,7 +193,9 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
MainAccettazioneBollaElencoModule.class,
AccettazioneBollaPickingModule.class,
DialogBindProductBarcodeWithPackageModule.class,
DialogAskUnknownBarcodeNotesModule.class
DialogAskUnknownBarcodeNotesModule.class,
ProdVersamentoMaterialeInBufferModule.class,
DialogInputQuantityToReturnModule.class
})
public interface MainApplicationComponent {
@ -316,8 +322,13 @@ public interface MainApplicationComponent {
AccettazioneBollaPickingComponent.Factory accettazioneBollaPickingComponent();
DialogBindProductBarcodeWithPackageComponent.Factory dialogBindProductBarcodeWithPackageComponent();
DialogAskUnknownBarcodeNotesComponent.Factory dialogAskUnknownBarcodeNotesComponent();
ProdVersamentoMaterialeInBufferComponent.Factory prodVersamentoMaterialeInBufferComponent();
DialogInputQuantityToReturnComponent.Factory dialogInputQuantityToReturnComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@ -32,6 +32,7 @@ import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
@ -281,4 +282,10 @@ public class MainApplicationModule {
return new MagazzinoAutomaticoRESTConsumer();
}
@Provides
@Singleton
MagazzinoBufferRESTConsumer provideMagazzinoBufferRESTConsumer() {
return new MagazzinoBufferRESTConsumer();
}
}

View File

@ -2,8 +2,8 @@ package it.integry.integrywmsnative.core.class_router.configs;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.MainAccettazioneOrdiniElencoFragment;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.MainAccettazioneBollaElencoFragment;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.MainAccettazioneOrdiniElencoFragment;
import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniFragment;
import it.integry.integrywmsnative.gest.inventario.ElencoInventariFragment;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoFragment;
@ -14,6 +14,7 @@ import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzion
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;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferFragment;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.DialogInfoSituazioneArticoloView;
@ -161,6 +162,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleIcon(R.drawable.ic_production_line)
.setDrawerIcon(R.drawable.ic_production_line)
.setFragmentFactory(ProdLineeProduzioneFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_prod_versamento_materiale_in_buffer)
.setCodMenu("MG066")
.setTitleText(R.string.prod_versamento_materiale_in_buffer_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdVersamentoMaterialeInBufferFragment::newInstance))
).addGroup(
new MenuGroup()
.setGroupText(R.string.internal_handling)

View File

@ -0,0 +1,66 @@
package it.integry.integrywmsnative.core.rest.consumers;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeCloseRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeRequestDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class MagazzinoBufferRESTConsumer extends _BaseRESTConsumer {
public void isVersamentoStarted(MtbDepoPosizione posizione, MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoBufferRESTConsumerService magazzinoBufferRESTConsumerService = RESTBuilder.getService(MagazzinoBufferRESTConsumerService.class);
magazzinoBufferRESTConsumerService.isVersamentoStarted(posizione.getPosizione(), magazzinoBufferVersamentoMaterialeRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Boolean>> call, Response<ServiceRESTResponse<Boolean>> response) {
analyzeAnswer(response, "magazzino-buffer/isVersamentoStarted", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Boolean>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void startVersamentoMateriale(MtbDepoPosizione posizione, MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoBufferRESTConsumerService magazzinoBufferRESTConsumerService = RESTBuilder.getService(MagazzinoBufferRESTConsumerService.class);
magazzinoBufferRESTConsumerService.startVersamentoMateriale(posizione.getPosizione(), magazzinoBufferVersamentoMaterialeRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Void>> call, Response<ServiceRESTResponse<Void>> response) {
analyzeAnswer(response, "magazzino-buffer/startVersamentoMateriale", data -> onComplete.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Void>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void endVersamentoMateriale(MtbDepoPosizione posizione, MagazzinoBufferVersamentoMaterialeCloseRequestDTO magazzinoBufferVersamentoMaterialeCloseRequestDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoBufferRESTConsumerService magazzinoBufferRESTConsumerService = RESTBuilder.getService(MagazzinoBufferRESTConsumerService.class);
magazzinoBufferRESTConsumerService.endVersamentoMateriale(posizione.getPosizione(), magazzinoBufferVersamentoMaterialeCloseRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Void>> call, Response<ServiceRESTResponse<Void>> response) {
analyzeAnswer(response, "magazzino-buffer/endVersamentoMateriale", data -> onComplete.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Void>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@ -0,0 +1,28 @@
package it.integry.integrywmsnative.core.rest.consumers;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeCloseRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
import retrofit2.http.Path;
public interface MagazzinoBufferRESTConsumerService {
@POST("wms/magazzino-buffer/{posizione}/isVersamentoStarted")
Call<ServiceRESTResponse<Boolean>> isVersamentoStarted(
@Path("posizione") String posizione,
@Body MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO);
@POST("wms/magazzino-buffer/{posizione}/startVersamentoMateriale")
Call<ServiceRESTResponse<Void>> startVersamentoMateriale(
@Path("posizione") String posizione,
@Body MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO);
@POST("wms/magazzino-buffer/{posizione}/endVersamentoMateriale")
Call<ServiceRESTResponse<Void>> endVersamentoMateriale(
@Path("posizione") String posizione,
@Body MagazzinoBufferVersamentoMaterialeCloseRequestDTO magazzinoBufferVersamentoMaterialeCloseRequestDTO);
}

View File

@ -0,0 +1,41 @@
package it.integry.integrywmsnative.core.rest.model.magazzino_buffer;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbColt;
public class MagazzinoBufferVersamentoMaterialeCloseRequestDTO {
private MtbColt inputMtbColt;
private BigDecimal qtaTotDaScaricare;
private BigDecimal numCnfDaScaricare;
public MtbColt getInputMtbColt() {
return inputMtbColt;
}
public MagazzinoBufferVersamentoMaterialeCloseRequestDTO setInputMtbColt(MtbColt inputMtbColt) {
this.inputMtbColt = inputMtbColt;
return this;
}
public BigDecimal getQtaTotDaScaricare() {
return qtaTotDaScaricare;
}
public MagazzinoBufferVersamentoMaterialeCloseRequestDTO setQtaTotDaScaricare(BigDecimal qtaTotDaScaricare) {
this.qtaTotDaScaricare = qtaTotDaScaricare;
return this;
}
public BigDecimal getNumCnfDaScaricare() {
return numCnfDaScaricare;
}
public MagazzinoBufferVersamentoMaterialeCloseRequestDTO setNumCnfDaScaricare(BigDecimal numCnfDaScaricare) {
this.numCnfDaScaricare = numCnfDaScaricare;
return this;
}
}

View File

@ -0,0 +1,18 @@
package it.integry.integrywmsnative.core.rest.model.magazzino_buffer;
import it.integry.integrywmsnative.core.model.MtbColt;
public class MagazzinoBufferVersamentoMaterialeRequestDTO {
private MtbColt inputMtbColt;
public MtbColt getInputMtbColt() {
return inputMtbColt;
}
public MagazzinoBufferVersamentoMaterialeRequestDTO setInputMtbColt(MtbColt inputMtbColt) {
this.inputMtbColt = inputMtbColt;
return this;
}
}

View File

@ -1,97 +0,0 @@
package it.integry.integrywmsnative.gest.prod_recupero_materiale.views;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil;
import java.math.BigDecimal;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding;
public class InputQuantityToReturnDialog {
private Context mContext;
private Dialog currentDialog;
public static Dialog make(final Context context, MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
return new InputQuantityToReturnDialog(context, mtbAart, minQuantity, maxQuantity, onDialogDismiss).currentDialog;
}
private InputQuantityToReturnDialog(Context context, MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
this.mContext = context;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DialogInputQuantityToReturnBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_to_return, null, false);
currentDialog = new Dialog(context);
currentDialog.setContentView(bindings.getRoot());
currentDialog.setCanceledOnTouchOutside(false);
currentDialog.setCancelable(false);
currentDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
InputQuantityToReturnViewModel viewModel = new InputQuantityToReturnViewModel();
viewModel.setMtbAart(mtbAart)
.setMinQuantity(minQuantity)
.setMaxQuantity(maxQuantity);
bindings.setMViewModel(viewModel);
bindings.buttonConfirm.setOnClickListener(v -> {
currentDialog.dismiss();
onDialogDismiss.run(BigDecimal.ZERO);
});
bindings.buttonAbort.setOnClickListener(v -> {
currentDialog.dismiss();
onDialogDismiss.run(BigDecimal.ZERO);
});
}
public class InputQuantityToReturnViewModel {
public MtbAart mtbAart;
public BigDecimal minQuantity;
public BigDecimal maxQuantity;
public MtbAart getMtbAart() {
return mtbAart;
}
public InputQuantityToReturnViewModel setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
public BigDecimal getMinQuantity() {
return minQuantity;
}
public InputQuantityToReturnViewModel setMinQuantity(BigDecimal minQuantity) {
this.minQuantity = minQuantity;
return this;
}
public BigDecimal getMaxQuantity() {
return maxQuantity;
}
public InputQuantityToReturnViewModel setMaxQuantity(BigDecimal maxQuantity) {
this.maxQuantity = maxQuantity;
return this;
}
}
}

View File

@ -10,7 +10,6 @@ import android.view.ViewGroup;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -76,7 +75,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setRetainInstance(true);
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_versamento_materiale, container, false);
mBinding = FragmentProdVersamentoMaterialeBinding.inflate(inflater, container, false);
MainApplication.appComponent
.prodVersamentoMaterialeComponent()
@ -182,8 +181,8 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) {
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
null, this::openLU)
new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
null, this::openLU)
.show((requireActivity()).getSupportFragmentManager(), "tag");
} else {
@ -198,20 +197,21 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
}
private void choosePosition() {
DialogAskPositionOfLUView.makeBase(true, (status, mtbDepoPosizione) -> {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
mViewModel.setPosizione(mtbDepoPosizione);
}
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
mViewModel.setPosizione(mtbDepoPosizione);
}
}, this::onError).show(requireActivity().getSupportFragmentManager(), "tag");
}, this::onError)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
private void recalcAllQuantities() {
if(this.mViewModel.getMtbColrMutableLiveData().getValue() == null) return;
if (this.mViewModel.getMtbColrMutableLiveData().getValue() == null) return;
BigDecimal residuoCol = this.mViewModel.getMtbColrMutableLiveData().getValue().getQtaCol();
BigDecimal residuoCnf = this.mViewModel.getMtbColrMutableLiveData().getValue().getNumCnf();
@ -228,14 +228,14 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
.mapToInt(x -> x.getOriginalOrdineLavorazione().getHrNum())
.sum();
if(selectedOrders.size() > 0 && totalHr <= 0) {
if (selectedOrders.size() > 0 && totalHr <= 0) {
this.onError(new Exception("Il totale delle <b>risorse umane</b> è pari a 0"));
return;
}
fabVisible.set(selectedOrders.size() > 0);
for(VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : this.mCurrentOrders) {
for (VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : this.mCurrentOrders) {
versamentoMerceOrdineLavListModel.setNumCnfBigDecimal(BigDecimal.ZERO);
versamentoMerceOrdineLavListModel.setQtaBigDecimal(BigDecimal.ZERO);
@ -243,23 +243,23 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
versamentoMerceOrdineLavListModel.getOriginalOrdineLavorazione().setNumCnfVersamento(0f);
}
for(VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : selectedOrders) {
for (VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : selectedOrders) {
int usagePerc = (versamentoMerceOrdineLavListModel.getOriginalOrdineLavorazione().getHrNum() * 100) / totalHr;
BigDecimal usedCol;
BigDecimal usedCnf;
if (SettingsManager.iDB().isFlagForceAllToColli() || (versamentoMerceOrdineLavListModel.getOriginalMtbAart() != null && !versamentoMerceOrdineLavListModel.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())){
if (SettingsManager.iDB().isFlagForceAllToColli() || (versamentoMerceOrdineLavListModel.getOriginalMtbAart() != null && !versamentoMerceOrdineLavListModel.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())) {
usedCnf = UtilityBigDecimal.divideAndRoundToInteger(residuoCnf.multiply(BigDecimal.valueOf(usagePerc)), BigDecimal.valueOf(100), RoundingMode.FLOOR);
if(UtilityBigDecimal.equalsOrLowerThan(usedCnf, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCnf, BigDecimal.ZERO)) {
if (UtilityBigDecimal.equalsOrLowerThan(usedCnf, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCnf, BigDecimal.ZERO)) {
usedCnf = BigDecimal.ONE;
}
usedCol = usedCnf.multiply(qtaCnf).setScale(0,BigDecimal.ROUND_FLOOR);
usedCol = usedCnf.multiply(qtaCnf).setScale(0, BigDecimal.ROUND_FLOOR);
} else {
usedCol = UtilityBigDecimal.divideAndRoundToInteger(residuoCol.multiply(BigDecimal.valueOf(usagePerc)), BigDecimal.valueOf(100), RoundingMode.FLOOR);
if (UtilityBigDecimal.equalsOrLowerThan(usedCol, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCol, BigDecimal.ZERO)){
if (UtilityBigDecimal.equalsOrLowerThan(usedCol, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCol, BigDecimal.ZERO)) {
usedCol = BigDecimal.ONE;
}
@ -282,8 +282,8 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
Stream.of(selectedOrders)
.max((o1, o2) -> Integer.compare(o1.getOriginalOrdineLavorazione().getHrNum(), o2.getOriginalOrdineLavorazione().getHrNum())).get();
if (offsetCnf.floatValue() != 0 || offsetCol.floatValue() != 0){
if ( SettingsManager.iDB().isFlagForceAllToColli() || (majorOrder.getOriginalMtbAart() != null && !majorOrder.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())) {
if (offsetCnf.floatValue() != 0 || offsetCol.floatValue() != 0) {
if (SettingsManager.iDB().isFlagForceAllToColli() || (majorOrder.getOriginalMtbAart() != null && !majorOrder.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())) {
majorOrder.setNumCnfBigDecimal(majorOrder.getNumCnfBigDecimal().add(offsetCnf));
majorOrder.getOriginalOrdineLavorazione().setNumCnfVersamento(majorOrder.getNumCnfBigDecimal().floatValue());
@ -307,7 +307,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
.map(VersamentoMerceOrdineLavListModel::getOriginalOrdineLavorazione)
.toList();
if(selectedOrders.size() > 0) {
if (selectedOrders.size() > 0) {
this.mViewModel.save(selectedOrders);
} else {
Toast.makeText(requireActivity(), "Nessun ordine selezionato!", Toast.LENGTH_SHORT).show();
@ -315,7 +315,6 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_versamento_materiale_title_fragment).toString());
@ -329,7 +328,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
@Override
public void onError(Exception ex, boolean requestClose) {
super.onError(ex);
if(requestClose) popMe();
if (requestClose) popMe();
}
@Override

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import dagger.Subcomponent;
@Subcomponent
public interface ProdVersamentoMaterialeInBufferComponent {
@Subcomponent.Factory
interface Factory {
ProdVersamentoMaterialeInBufferComponent create();
}
void inject(ProdVersamentoMaterialeInBufferFragment prodVersamentoMaterialeInBufferFragment);
}

View File

@ -0,0 +1,126 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.math.BigDecimal;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.databinding.FragmentProdVersamentoMaterialeInBufferBinding;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnView;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
public class ProdVersamentoMaterialeInBufferFragment extends BaseFragment implements ProdVersamentoMaterialeInBufferViewModel.Listener {
@Inject
ProdVersamentoMaterialeInBufferViewModel mViewModel;
private FragmentProdVersamentoMaterialeInBufferBinding mBindings;
public ProdVersamentoMaterialeInBufferFragment() {
// Required empty public constructor
}
public static ProdVersamentoMaterialeInBufferFragment newInstance() {
return new ProdVersamentoMaterialeInBufferFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setRetainInstance(true);
mBindings = FragmentProdVersamentoMaterialeInBufferBinding.inflate(inflater, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.prodVersamentoMaterialeInBufferComponent()
.create()
.inject(this);
mBindings.setViewmodel(mViewModel);
mViewModel.setListener(this);
return mBindings.getRoot();
}
@Override
public void onStart() {
super.onStart();
this.openLU();
}
private void openLU() {
DialogScanOrCreateLUView.newInstance(false, false, true, false, true, (mtbColt, created) -> {
if (mtbColt == null) {
popMe();
} else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO ||
mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ||
mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) &&
mtbColt.getSegno() == 1) {
if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) {
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
null, this::openLU)
.show((requireActivity()).getSupportFragmentManager(), "tag");
} else {
mViewModel.setMtbColt(mtbColt);
choosePosition();
}
} else {
this.onError(new Exception("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>"));
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
}
private void choosePosition() {
DialogAskPositionOfLUView.makeBase(true, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
mViewModel.setPosizione(mtbDepoPosizione, () -> {
popMe();
});
}
}, this::onError)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onRequestColliQuantityToConfirm(RunnableArgs<BigDecimal> onComplete) {
DialogInputQuantityToReturnView.newInstance(mViewModel.getMtbColr().getMtbAart(),
BigDecimal.ZERO,
mViewModel.getMtbColr().getNumCnf(),
onComplete)
.show(this.getParentFragmentManager(), DialogInputQuantityToReturnView.class.getName());
}
@Override
public void onError(Exception ex, boolean requestClose) {
super.onError(ex);
if (requestClose) popMe();
}
}

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumer;
@Module(subcomponents = ProdVersamentoMaterialeInBufferComponent.class)
public class ProdVersamentoMaterialeInBufferModule {
@Provides
ProdVersamentoMaterialeInBufferViewModel providesProdVersamentoMaterialeInBufferViewModel(MagazzinoBufferRESTConsumer magazzinoBufferRESTConsumer) {
return new ProdVersamentoMaterialeInBufferViewModel(magazzinoBufferRESTConsumer);
}
}

View File

@ -0,0 +1,110 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import androidx.lifecycle.MutableLiveData;
import java.math.BigDecimal;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeCloseRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeRequestDTO;
public class ProdVersamentoMaterialeInBufferViewModel {
private final MagazzinoBufferRESTConsumer magazzinoBufferRESTConsumer;
private ProdVersamentoMaterialeInBufferViewModel.Listener mListener;
private final MutableLiveData<MtbColt> mtbColtMutableLiveData = new MutableLiveData<>();
@Inject
public ProdVersamentoMaterialeInBufferViewModel(MagazzinoBufferRESTConsumer magazzinoBufferRESTConsumer) {
this.magazzinoBufferRESTConsumer = magazzinoBufferRESTConsumer;
}
public MutableLiveData<MtbColt> getMtbColtMutable() {
return mtbColtMutableLiveData;
}
public MtbColr getMtbColr() {
MtbColt mtbColt = mtbColtMutableLiveData.getValue();
if(mtbColt == null || mtbColt.getMtbColr() == null || mtbColt.getMtbColr().isEmpty()) return null;
return mtbColt.getMtbColr().get(0);
}
public void setMtbColt(MtbColt mtbColt) {
this.mtbColtMutableLiveData.setValue(mtbColt);
}
public void setPosizione(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) {
this.sendOnLoadingStarted();
var magazzinoRequest = new MagazzinoBufferVersamentoMaterialeRequestDTO()
.setInputMtbColt(mtbColtMutableLiveData.getValue());
magazzinoBufferRESTConsumer.isVersamentoStarted(mtbDepoPosizione, magazzinoRequest, versamentoStarted -> {
if (!versamentoStarted) {
magazzinoBufferRESTConsumer.startVersamentoMateriale(mtbDepoPosizione, magazzinoRequest, () -> {
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
} else {
this.sendOnRequestColliQuantityToConfirm(inputQuantity -> {
if(inputQuantity == null) {
this.sendOnLoadingEnded();
onComplete.run();
return;
}
var closeRequest = new MagazzinoBufferVersamentoMaterialeCloseRequestDTO()
.setInputMtbColt(mtbColtMutableLiveData.getValue())
.setNumCnfDaScaricare(inputQuantity);
magazzinoBufferRESTConsumer.endVersamentoMateriale(mtbDepoPosizione, closeRequest, () -> {
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
});
}
}, this::sendError);
}
public ProdVersamentoMaterialeInBufferViewModel setListener(ProdVersamentoMaterialeInBufferViewModel.Listener listener) {
this.mListener = listener;
return this;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendOnRequestColliQuantityToConfirm(RunnableArgs<BigDecimal> onComplete) {
if (this.mListener != null) mListener.onRequestColliQuantityToConfirm(onComplete);
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex, true);
}
public interface Listener extends ILoadingListener {
void onRequestColliQuantityToConfirm(RunnableArgs<BigDecimal> onComplete);
void onError(Exception ex, boolean requestClose);
}
}

View File

@ -8,6 +8,7 @@ import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -90,7 +91,7 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
public void onStart() {
super.onStart();
if(getDialog() != null) {
if (getDialog() != null) {
getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}
@ -180,8 +181,12 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
} else {
BarcodeManager.enable();
Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT)
.show();
BarcodeManager.enable();
}
};

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
import dagger.Subcomponent;
@Subcomponent
public interface DialogInputQuantityToReturnComponent {
@Subcomponent.Factory
interface Factory {
DialogInputQuantityToReturnComponent create();
}
void inject(DialogInputQuantityToReturnView dialogInputQuantityToReturnView);
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogInputQuantityToReturnComponent.class)
public class DialogInputQuantityToReturnModule {
@Provides
DialogInputQuantityToReturnViewModel providesDialogInputQuantityToReturnViewModel() {
return new DialogInputQuantityToReturnViewModel();
}
}

View File

@ -0,0 +1,96 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
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.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding;
public class DialogInputQuantityToReturnView extends BaseDialogFragment {
@Inject
DialogInputQuantityToReturnViewModel mViewModel;
private DialogInputQuantityToReturnBinding mBindings;
private Context mContext;
private final MtbAart mtbAart;
private final BigDecimal minQuantity;
private final BigDecimal maxQuantity;
private final RunnableArgs<BigDecimal> onDialogDismiss;
public static DialogInputQuantityToReturnView newInstance(@NotNull MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
return new DialogInputQuantityToReturnView(mtbAart, minQuantity, maxQuantity, onDialogDismiss);
}
private DialogInputQuantityToReturnView(@NotNull MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
super();
this.mtbAart = mtbAart;
this.minQuantity = minQuantity;
this.maxQuantity = maxQuantity;
this.onDialogDismiss = onDialogDismiss;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogInputQuantityToReturnBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogInputQuantityToReturnComponent()
.create()
.inject(this);
mViewModel.init(mtbAart, minQuantity, maxQuantity);
mBindings.setViewModel(mViewModel);
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialogInterface, i) -> {
onDialogDismiss.run(mViewModel.getInputQuanity());
})
.setNegativeButton(R.string.abort, (dialogInterface, i) -> {
onDialogDismiss.run(null);
})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
UtilityFocus.focusTextBox(requireContext(), mBindings.additionalNotesText);
}
}

View File

@ -0,0 +1,39 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
import androidx.databinding.ObservableField;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbAart;
public class DialogInputQuantityToReturnViewModel {
private MtbAart mtbAart;
private BigDecimal minQuantity;
private BigDecimal maxQuantity;
public ObservableField<BigDecimal> inputQuantity = new ObservableField<>(BigDecimal.ZERO);
public void init(MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity) {
this.minQuantity = minQuantity;
this.maxQuantity = maxQuantity;
this.mtbAart = mtbAart;
}
public MtbAart getMtbAart() {
return mtbAart;
}
public BigDecimal getMinQuantity() {
return minQuantity;
}
public BigDecimal getMaxQuantity() {
return maxQuantity;
}
public BigDecimal getInputQuanity() {
return inputQuantity.get();
}
}

View File

@ -24,7 +24,7 @@
android:layout_height="match_parent">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/full_white"
@ -51,7 +51,7 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
@ -60,7 +60,7 @@
tools:context=".gest.contenuto_bancale.ContenutoBancaleActivity">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
@ -69,7 +69,7 @@
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -91,9 +91,9 @@
android:textSize="16sp"
android:textStyle="bold"
tools:text="22 ottobre 2018" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -113,9 +113,9 @@
android:textColor="@android:color/black"
android:textStyle="italic"
tools:text="Vito Falagario" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
@ -136,9 +136,9 @@
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="A00F00C00L00" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -168,10 +168,10 @@
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="(Bari)" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.recyclerview.widget.RecyclerView
@ -186,11 +186,11 @@
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<com.github.clans.fab.FloatingActionMenu

View File

@ -12,64 +12,53 @@
type="android.content.Context" />
<variable
name="mViewModel"
type="it.integry.integrywmsnative.gest.prod_recupero_materiale.views.InputQuantityToReturnDialog.InputQuantityToReturnViewModel" />
name="viewModel"
type="it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnViewModel" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/light_blue_300"
android:gravity="center_horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_error_white_24dp"
android:layout_margin="24dp"/>
</RelativeLayout>
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="24dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<TextView
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_error_white_24dp"
app:tint="?colorPrimary" />
<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"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/action_insert_quantity"
android:gravity="center_horizontal"/>
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="@string/action_insert_quantity" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextViewMaterial"
tools:text="descrizione estesa articolo"
android:text="@{UtilityString.isNullOrEmpty(mViewModel.mtbAart.descrizioneEstesa) ? mViewModel.mtbAart.descrizione : mViewModel.mtbAart.descrizioneEstesa}"
android:gravity="center"
android:layout_marginTop="16dp" />
android:text="@{UtilityString.isNullOrEmpty(viewModel.mtbAart.descrizioneEstesa) ? viewModel.mtbAart.descrizione : viewModel.mtbAart.descrizioneEstesa}"
android:gravity="center" />
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
@ -89,96 +78,55 @@
android:layout_marginStart="4dp"
style="@style/TextViewMaterial"
tools:text="50.00"
android:text="@{UtilityNumber.decimalToString(mViewModel.maxQuantity)}"
android:text="@{UtilityNumber.decimalToString(viewModel.maxQuantity)}"
android:gravity="center" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
android:orientation="vertical"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_left"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.20"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_right"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.80"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_left"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.20"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_right"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.80"/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/level_number_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/guide_left"
app:layout_constraintEnd_toStartOf="@id/guide_right"
android:layout_marginBottom="16dp"
style="@style/TextInputLayout.OutlinePrimary">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/level_number_layout"
android:layout_width="0dp"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/additional_notes_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/guide_left"
app:layout_constraintEnd_toStartOf="@id/guide_right"
android:layout_marginBottom="16dp"
style="@style/TextInputLayout.OutlinePrimary">
android:hint="@string/quantity"
android:inputType="numberDecimal"
android:selectAllOnFocus="true"
app:binding="@{viewModel.inputQuantity}"
style="@style/TextInputEditText.OutlinePrimary"/>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/additional_notes_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/quantity"
android:inputType="numberDecimal"
style="@style/TextInputEditText.OutlinePrimary"/>
</com.google.android.material.textfield.TextInputLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.textfield.TextInputLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingTop="12dp"
android:paddingBottom="8dp"
android:gravity="bottom|center_horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/button_abort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.PrimaryOutline"
app:icon="@drawable/ic_clear_24dp"
app:strokeColor="@color/colorPrimary"
android:layout_marginEnd="8dp"
android:text="@string/abort"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.PrimaryFull"
app:icon="@drawable/ic_save_24dp"
android:text="@string/confirm"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,103 @@
<?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>
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@drawable/gray_detail_background_round8"
android:orientation="vertical"
android:padding="16dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data creazione: "
android:textColor="@android:color/black"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbColtMutable.getDataColloHumanLong()}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="22 ottobre 2018" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Posizione "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbColtMutable.posizione != null ? viewmodel.mtbColtMutable.posizione : `N/D`}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="A00F00C00L00" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Deposito "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbColtMutable.codMdep}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="10" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -330,6 +330,7 @@
<string name="prod_ordine_produzione_title_fragment">Accettazione da ordine</string>
<string name="prod_ordine_lavorazione_title_fragment">Picking da ordine</string>
<string name="prod_versamento_materiale_title_fragment">Versamento materiale</string>
<string name="prod_versamento_materiale_in_buffer_title_fragment">Versamento materiale in buffer</string>
<string name="prod_recupero_materiale_title_fragment">Recupero materiale</string>
<string name="please_select_an_item">Seleziona un elemento per continuare</string>

View File

@ -26,6 +26,7 @@
<item name="nav_resi_cliente" type="id" />
<item name="nav_prod_ordine_produzione" type="id" />
<item name="nav_prod_versamento_materiale" type="id" />
<item name="nav_prod_versamento_materiale_in_buffer" type="id" />
<item name="nav_prod_ordine_lavorazione" type="id" />
<item name="nav_prod_recupero_materiale" type="id" />
<item name="nav_pv_ordini_acquisto" type="id" />

View File

@ -336,6 +336,7 @@
<string name="prod_ordine_produzione_title_fragment">Production picking</string>
<string name="prod_ordine_lavorazione_title_fragment">Manufacture picking</string>
<string name="prod_versamento_materiale_title_fragment">Deposit raw material</string>
<string name="prod_versamento_materiale_in_buffer_title_fragment">Deposit raw material in buffer</string>
<string name="prod_recupero_materiale_title_fragment">Recover raw material</string>
<string name="please_select_an_item">Please select an item before proceed</string>