Modificati in POST i servizi di ricerca in Rettifica Giacenze.

Implementato nuovo servizio di retrieve articolo by codMart.
This commit is contained in:
Giuseppe Scorrano 2023-07-05 10:54:37 +02:00
parent e6ecebd49a
commit c31700d9cb
9 changed files with 163 additions and 104 deletions

View File

@ -1,6 +1,5 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
@ -19,6 +18,7 @@ import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO; import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.articolo.RetrieveArticoloByCodMartRequestDTO;
import it.integry.integrywmsnative.core.utility.UtilityQuery; import it.integry.integrywmsnative.core.utility.UtilityQuery;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -59,14 +59,16 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
public static void getByCodMartsStatic(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) { public static void getByCodMartsStatic(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
String joinedCods = Stream.of(codMartToFind) var codMarts = Stream.of(codMartToFind)
.withoutNulls() .withoutNulls()
.distinct() .distinct().toList();
.collect(Collectors.joining(","));
ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class); ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumer.getByCodMart(joinedCods).enqueue(new Callback<>() { articoloRESTConsumer
.getByCodMart(new RetrieveArticoloByCodMartRequestDTO()
.setCodMarts(codMarts))
.enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) { public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByCodMart", (m) -> { analyzeAnswer(response, "getByCodMart", (m) -> {
@ -103,7 +105,10 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
public void getByCodMart(String codMartToFind, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed) { public void getByCodMart(String codMartToFind, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed) {
ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class); ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumer.getByCodMart(codMartToFind).enqueue(new Callback<>() { articoloRESTConsumer.getByCodMart(
new RetrieveArticoloByCodMartRequestDTO()
.setCodMarts(Collections.singletonList(codMartToFind)))
.enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) { public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByCodMart", (m) -> { analyzeAnswer(response, "getByCodMart", (m) -> {

View File

@ -5,7 +5,9 @@ import java.util.List;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO; import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.articolo.RetrieveArticoloByCodMartRequestDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Query; import retrofit2.http.Query;
@ -16,8 +18,8 @@ public interface ArticoloRESTConsumerService {
@POST("SM2getArticoloByBarcode") @POST("SM2getArticoloByBarcode")
Call<ServiceRESTResponse<MtbAart>> getByBarcodeProd(@Query("barcode") String barcodeProd); Call<ServiceRESTResponse<MtbAart>> getByBarcodeProd(@Query("barcode") String barcodeProd);
@GET("SM2getArticoloByCodMart") @POST("wms/articolo/retrieveByCodMart")
Call<ServiceRESTResponse<MtbAart>> getByCodMart(@Query("codMart") String barcodeProd); Call<ServiceRESTResponse<MtbAart>> getByCodMart(@Body RetrieveArticoloByCodMartRequestDTO retrieveArticoloByCodMartRequest);
@GET("getProductLotStatus") @GET("getProductLotStatus")
Call<ServiceRESTResponse<List<StatoArticoloDTO>>> getStatoPartita(@Query("codMart") String codMart, @Query("partitaMag") String partitaMag); Call<ServiceRESTResponse<List<StatoArticoloDTO>>> getStatoPartita(@Query("codMart") String codMart, @Query("partitaMag") String partitaMag);

View File

@ -0,0 +1,17 @@
package it.integry.integrywmsnative.core.rest.model.articolo;
import java.util.List;
public class RetrieveArticoloByCodMartRequestDTO {
private List<String> codMarts;
public List<String> getCodMarts() {
return codMarts;
}
public RetrieveArticoloByCodMartRequestDTO setCodMarts(List<String> codMarts) {
this.codMarts = codMarts;
return this;
}
}

View File

@ -178,7 +178,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
v -> initBottomSheetDialogFilter(filterChipDTO)); v -> initBottomSheetDialogFilter(filterChipDTO));
switch (filterChipDTO.getID()) { switch (filterChipDTO.getID()) {
case AccettazionePickingBindings.COD_ART_FILTER_ID: case AccettazionePickingBindings.COD_ART_FILTER_ID -> {
mAppliedFilterViewModel.getCurrentCodArtPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { mAppliedFilterViewModel.getCurrentCodArtPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override @Override
public void run() { public void run() {
@ -199,8 +199,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
} }
}); });
filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentCodArtPredicate().set(null)); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentCodArtPredicate().set(null));
break; }
case AccettazionePickingBindings.DESCR_FILTER_ID: case AccettazionePickingBindings.DESCR_FILTER_ID -> {
mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override @Override
public void run() { public void run() {
@ -221,8 +221,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
} }
}); });
filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentDescrPredicate().set(null)); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentDescrPredicate().set(null));
break; }
case AccettazionePickingBindings.POS_FILTER_ID: case AccettazionePickingBindings.POS_FILTER_ID -> {
mAppliedFilterViewModel.getCurrentPosPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { mAppliedFilterViewModel.getCurrentPosPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override @Override
public void run() { public void run() {
@ -243,7 +243,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
} }
}); });
filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentPosPredicate().set(null)); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentPosPredicate().set(null));
break; }
} }
this.mBindings.filterChipsGroup.addView(filterChipView); this.mBindings.filterChipsGroup.addView(filterChipView);
@ -262,7 +262,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
.getFilterLayoutView(); .getFilterLayoutView();
switch (filterChipDTO.getID()) { switch (filterChipDTO.getID()) {
case AccettazionePickingBindings.COD_ART_FILTER_ID: case AccettazionePickingBindings.COD_ART_FILTER_ID ->
((FilterCodArtLayoutView) filterLayoutView) ((FilterCodArtLayoutView) filterLayoutView)
.setAll(mAppliedFilterViewModel.getAllCodArts()) .setAll(mAppliedFilterViewModel.getAllCodArts())
.setAvailable(mAppliedFilterViewModel.getAvailableCodArts()) .setAvailable(mAppliedFilterViewModel.getAvailableCodArts())
@ -273,8 +273,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
mAppliedFilterViewModel.getCurrentCodArtPredicate().get()) mAppliedFilterViewModel.getCurrentCodArtPredicate().get())
.map(x -> x.getSitArtOrdDTO().getCodMart()) .map(x -> x.getSitArtOrdDTO().getCodMart())
.toList()); .toList());
break; case AccettazionePickingBindings.DESCR_FILTER_ID ->
case AccettazionePickingBindings.DESCR_FILTER_ID:
((FilterDescrLayoutView) filterLayoutView) ((FilterDescrLayoutView) filterLayoutView)
.setAll(mAppliedFilterViewModel.getAllDescrs()) .setAll(mAppliedFilterViewModel.getAllDescrs())
.setAvailable(mAppliedFilterViewModel.getAvailableDescrs()) .setAvailable(mAppliedFilterViewModel.getAvailableDescrs())
@ -285,8 +284,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
mAppliedFilterViewModel.getCurrentDescrPredicate().get()) mAppliedFilterViewModel.getCurrentDescrPredicate().get())
.map(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt()) .map(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt())
.toList()); .toList());
break; case AccettazionePickingBindings.POS_FILTER_ID ->
case AccettazionePickingBindings.POS_FILTER_ID:
((FilterPosizioneLayoutView) filterLayoutView) ((FilterPosizioneLayoutView) filterLayoutView)
.setAll(mAppliedFilterViewModel.getAllPos()) .setAll(mAppliedFilterViewModel.getAllPos())
.setAvailable(mAppliedFilterViewModel.getAvailablePos()) .setAvailable(mAppliedFilterViewModel.getAvailablePos())
@ -297,8 +295,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
mAppliedFilterViewModel.getCurrentPosPredicate().get()) mAppliedFilterViewModel.getCurrentPosPredicate().get())
.map(x -> x.getMtbAart().getPosizione()) .map(x -> x.getMtbAart().getPosizione())
.toList()); .toList());
break;
} }
if (!filterLayoutView.isAdded()) if (!filterLayoutView.isAdded())
@ -373,9 +369,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
} }
private void refreshList() { private void refreshList() {
//this.onLoadingStarted();
//new Thread(() -> {
runOnUiThread(() -> { runOnUiThread(() -> {
List<PickingObjectDTO> tmpList; List<PickingObjectDTO> tmpList;
@ -393,7 +386,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
this.mAccettazioneMutableData.addAll(list); this.mAccettazioneMutableData.addAll(list);
this.noItemsToPick.set(!isThereAnyItemToPick(tmpList)); this.noItemsToPick.set(!isThereAnyItemToPick(tmpList));
//this.onLoadingEnded();
}); });
} }
@ -402,21 +394,11 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
.filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getSitArtOrdDTO().getQtaDaEvadere(), BigDecimal.ZERO)) .filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getSitArtOrdDTO().getQtaDaEvadere(), BigDecimal.ZERO))
.toList(); .toList();
List<AccettazioneListModel> sortedList = null; return switch (mCurrentOrderBy) {
case COD_ART_FOR -> convertDataModelToListModel__CodArtForn(tmpList);
switch (mCurrentOrderBy) { case DESCR_ART -> convertDataModelToListModel__DescrArt(tmpList);
case COD_ART_FOR: case RAG_SOC_COM -> convertDataModelToListModel__RagSocCom(tmpList);
sortedList = convertDataModelToListModel__CodArtForn(tmpList); };
break;
case DESCR_ART:
sortedList = convertDataModelToListModel__DescrArt(tmpList);
break;
case RAG_SOC_COM:
sortedList = convertDataModelToListModel__RagSocCom(tmpList);
break;
}
return sortedList;
} }
private List<AccettazioneListModel> convertDataModelToListModel__CodArtForn(List<PickingObjectDTO> dataList) { private List<AccettazioneListModel> convertDataModelToListModel__CodArtForn(List<PickingObjectDTO> dataList) {

View File

@ -183,7 +183,13 @@ public class RettificaGiacenzeViewModel {
mRettificaGiacenzeRESTConsumer.searchArtForn(codAlis, queryText, listaArts -> { mRettificaGiacenzeRESTConsumer.searchArtForn(codAlis, queryText, listaArts -> {
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
List<MtbAart> mtbAarts = Stream.of(listaArts).map(x -> (MtbAart) x.getMtbAart()).toList(); List<MtbAart> mtbAarts = null;
if (listaArts != null)
mtbAarts = Stream.of(listaArts)
.map(x -> (MtbAart) x.getMtbAart())
.toList();
dispatchArts(mtbAarts); dispatchArts(mtbAarts);
}, this::sendError); }, this::sendError);
} }

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.rettifica_giacenze.dto;
public class SearchArticoloByBarcodeOrCodMartRequestDTO {
private String codMartOrBarcode;
public String getCodMartOrBarcode() {
return codMartOrBarcode;
}
public SearchArticoloByBarcodeOrCodMartRequestDTO setCodMartOrBarcode(String codMartOrBarcode) {
this.codMartOrBarcode = codMartOrBarcode;
return this;
}
}

View File

@ -0,0 +1,27 @@
package it.integry.integrywmsnative.gest.rettifica_giacenze.dto;
public class SearchArticoloByCodArtFornOrDescrizioneRequestDTO {
private String codAlis;
private String codArtFornOrDescrizione;
public String getCodAlis() {
return codAlis;
}
public SearchArticoloByCodArtFornOrDescrizioneRequestDTO setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
public String getCodArtFornOrDescrizione() {
return codArtFornOrDescrizione;
}
public SearchArticoloByCodArtFornOrDescrizioneRequestDTO setCodArtFornOrDescrizione(String codArtFornOrDescrizione) {
this.codArtFornOrDescrizione = codArtFornOrDescrizione;
return this;
}
}

View File

@ -19,7 +19,9 @@ import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.SaveDocFromPickingRequestDTO; import it.integry.integrywmsnative.core.rest.model.SaveDocFromPickingRequestDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByBarcodeOrCodMartRequestDTO;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByBarcodeOrCodMartResponseDTO; import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByBarcodeOrCodMartResponseDTO;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByCodArtFornOrDescrizioneRequestDTO;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByCodArtFornOrDescrizioneResponseDTO; import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByCodArtFornOrDescrizioneResponseDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -48,7 +50,9 @@ public class RettificaGiacenzeRESTConsumer extends _BaseRESTConsumer {
public void searchArtForn(String codAlis, String codArtForOrDescr, RunnableArgs<List<SearchArticoloByCodArtFornOrDescrizioneResponseDTO>> onComplete, RunnableArgs<Exception> onError) { public void searchArtForn(String codAlis, String codArtForOrDescr, RunnableArgs<List<SearchArticoloByCodArtFornOrDescrizioneResponseDTO>> onComplete, RunnableArgs<Exception> onError) {
final RettificaGiacenzeRESTConsumerService service = RESTBuilder.getService(RettificaGiacenzeRESTConsumerService.class); final RettificaGiacenzeRESTConsumerService service = RESTBuilder.getService(RettificaGiacenzeRESTConsumerService.class);
service.searchByCodArtFornOrDescrizione(codAlis, codArtForOrDescr) service.searchByCodArtFornOrDescrizione(new SearchArticoloByCodArtFornOrDescrizioneRequestDTO()
.setCodAlis(codAlis)
.setCodArtFornOrDescrizione(codArtForOrDescr))
.enqueue(new Callback<>() { .enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<SearchArticoloByCodArtFornOrDescrizioneResponseDTO>>> call, public void onResponse(Call<ServiceRESTResponse<List<SearchArticoloByCodArtFornOrDescrizioneResponseDTO>>> call,
@ -69,7 +73,8 @@ public class RettificaGiacenzeRESTConsumer extends _BaseRESTConsumer {
public void searchArtInt(String codMartOrBarcodeOrDescr, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onError) { public void searchArtInt(String codMartOrBarcodeOrDescr, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onError) {
final RettificaGiacenzeRESTConsumerService service = RESTBuilder.getService(RettificaGiacenzeRESTConsumerService.class); final RettificaGiacenzeRESTConsumerService service = RESTBuilder.getService(RettificaGiacenzeRESTConsumerService.class);
service.searchByCodMartOrBarcode(codMartOrBarcodeOrDescr) service.searchByCodMartOrBarcode(new SearchArticoloByBarcodeOrCodMartRequestDTO()
.setCodMartOrBarcode(codMartOrBarcodeOrDescr))
.enqueue(new Callback<>() { .enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<SearchArticoloByBarcodeOrCodMartResponseDTO>>> call, public void onResponse(Call<ServiceRESTResponse<List<SearchArticoloByBarcodeOrCodMartResponseDTO>>> call,

View File

@ -4,24 +4,24 @@ import java.util.List;
import it.integry.integrywmsnative.core.rest.model.SaveDocFromPickingRequestDTO; import it.integry.integrywmsnative.core.rest.model.SaveDocFromPickingRequestDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByBarcodeOrCodMartRequestDTO;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByBarcodeOrCodMartResponseDTO; import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByBarcodeOrCodMartResponseDTO;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByCodArtFornOrDescrizioneRequestDTO;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByCodArtFornOrDescrizioneResponseDTO; import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.SearchArticoloByCodArtFornOrDescrizioneResponseDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Query;
public interface RettificaGiacenzeRESTConsumerService { public interface RettificaGiacenzeRESTConsumerService {
@GET("wms/articolo/searchByCodArtFornOrDescrizione") @POST("wms/articolo/searchByCodArtFornOrDescrizione")
Call<ServiceRESTResponse<List<SearchArticoloByCodArtFornOrDescrizioneResponseDTO>>> searchByCodArtFornOrDescrizione( Call<ServiceRESTResponse<List<SearchArticoloByCodArtFornOrDescrizioneResponseDTO>>> searchByCodArtFornOrDescrizione(
@Query("codAlis") String codAlis, @Body SearchArticoloByCodArtFornOrDescrizioneRequestDTO searchArticoloByCodArtFornOrDescrizioneRequest);
@Query("codArtFornOrDescrizione") String codMartOrBarcode);
@GET("wms/articolo/searchByCodMartOrBarcode") @POST("wms/articolo/searchByCodMartOrBarcode")
Call<ServiceRESTResponse<List<SearchArticoloByBarcodeOrCodMartResponseDTO>>> searchByCodMartOrBarcode(@Query("codMartOrBarcode") String codMartOrBarcode); Call<ServiceRESTResponse<List<SearchArticoloByBarcodeOrCodMartResponseDTO>>> searchByCodMartOrBarcode(
@Body SearchArticoloByBarcodeOrCodMartRequestDTO searchArticoloByBarcodeOrCodMartRequest);
@POST("saveDocFromPickingPvm") @POST("saveDocFromPickingPvm")
Call<ServiceRESTResponse<Void>> saveDocFromPickingPvm(@Body SaveDocFromPickingRequestDTO saveDocFromPickingRequestDTO); Call<ServiceRESTResponse<Void>> saveDocFromPickingPvm(@Body SaveDocFromPickingRequestDTO saveDocFromPickingRequestDTO);