diff --git a/app/build.gradle b/app/build.gradle index 91c33846..e82a0e4a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,6 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'com.google.gms.google-services' - android { def appVersionCode = 132 @@ -117,11 +116,17 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0' implementation 'org.apache.commons:commons-text:1.8' - //kapt "androidx.lifecycle:lifecycle-compiler:2.0.0" //MVVM + def dagger2_version = "2.26" implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0" + api "com.google.dagger:dagger:$dagger2_version" + annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version" + api "com.google.dagger:dagger-android:$dagger2_version" + api "com.google.dagger:dagger-android-support:$dagger2_version" // if you use the support libraries + annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version" + //FAB implementation 'com.github.clans:fab:1.6.4' //CUSTOM VIEWS diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f4b33c1..9d4a8adb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ @@ -18,7 +17,6 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" - tools:replace="android:debuggable" android:usesCleartextTraffic="true"> diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java index 463ef24a..54fe3592 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java @@ -4,6 +4,8 @@ import android.app.Application; import android.content.res.Configuration; import android.content.res.Resources; +import dagger.Component; +import dagger.android.DaggerApplication; import it.integry.integrywmsnative.core.context.AppContext; import it.integry.integrywmsnative.core.data_store.db.AppDatabase; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao; @@ -11,10 +13,15 @@ import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao; import it.integry.integrywmsnative.core.data_store.db.dao.GrigliaDao; import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao; + public class MainApplication extends Application { public static Resources res; + // Reference to the application graph that is used across the whole app + public static MainApplicationComponent appComponent; + public static MainApplicationModule appModule; + private AppContext appContext = new AppContext(this); private static AppDatabase appDb; @@ -26,11 +33,16 @@ public class MainApplication extends Application { public void onCreate() { super.onCreate(); - appContext.init(); + appModule = new MainApplicationModule(MainApplication.this); + appComponent = DaggerMainApplicationComponent.create(); +// .builder() +// .mainApplicationModule(new MainApplicationModule(MainApplication.this)) +// .build(); + + appContext.init(); appDb = AppDatabase.getDatabase(this); //Stash.init(this); - res = getResources(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java new file mode 100644 index 00000000..0112c9d0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative; + +import android.content.Context; + +import javax.inject.Singleton; + +import dagger.Component; +import it.integry.integrywmsnative.gest.spedizione_new.SpedizioneActivity; + +// Definition of the Application graph +@Component(modules = {MainApplicationModule.class}) +public interface MainApplicationComponent { + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java new file mode 100644 index 00000000..96a57724 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative; + +import android.content.Context; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; + +@Module +public class MainApplicationModule { + + private final Context mContext; + + public MainApplicationModule(Context context) { + this.mContext = context; + } + + @Provides + @Singleton + ColliDataRecoverService provideColliDataRecoverService() { + return new ColliDataRecoverService(mContext); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverDTO.java new file mode 100644 index 00000000..5967cee3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverDTO.java @@ -0,0 +1,91 @@ +package it.integry.integrywmsnative.core.data_recover; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; + +public class ColliDataRecoverDTO { + + private int id; + private int numCollo; + private String serCollo; + private String dataCollo; + private String gestioneCollo; + private String filtro; + + private List testateOrdini; + + public int getId() { + return id; + } + + public ColliDataRecoverDTO setId(int id) { + this.id = id; + return this; + } + + public int getNumCollo() { + return numCollo; + } + + public ColliDataRecoverDTO setNumCollo(int numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public ColliDataRecoverDTO setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public String getDataCollo() { + return dataCollo; + } + + public ColliDataRecoverDTO setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public String getGestioneCollo() { + return gestioneCollo; + } + + public ColliDataRecoverDTO setGestioneCollo(String gestioneCollo) { + this.gestioneCollo = gestioneCollo; + return this; + } + + public String getFiltro() { + return filtro; + } + + public ColliDataRecoverDTO setFiltro(String filtro) { + this.filtro = filtro; + return this; + } + + public List getTestateOrdini() { + return testateOrdini; + } + + public ColliDataRecoverDTO setTestateOrdini(List testateOrdini) { + this.testateOrdini = testateOrdini; + return this; + } + + + public MtbColt getMtbColt() { + return new MtbColt() + .setNumCollo(getNumCollo()) + .setSerCollo(getSerCollo()) + .setGestione(getGestioneCollo()) + .setDataCollo(getDataCollo()) + .setFiltroOrdini(getFiltro()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverService.java b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverService.java new file mode 100644 index 00000000..4f6dfbd8 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverService.java @@ -0,0 +1,152 @@ +package it.integry.integrywmsnative.core.data_recover; + +import android.content.Context; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; +import com.google.android.gms.common.util.IOUtils; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; + +@Singleton +public class ColliDataRecoverService { + + + private final Context mContext; + private List mtbColtsSessions = new ArrayList<>(); + + @Inject + public ColliDataRecoverService(Context context) { + this.mContext = context; + + if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) { + loadLocalFile(); + } + } + + + + public boolean thereIsAnExistantSession() { + return mtbColtsSessions.size() > 0; + } + + public List getAllSessionIDs() { + if(thereIsAnExistantSession()) { + + return Stream.of(mtbColtsSessions) + .map(ColliDataRecoverDTO::getId) + .toList(); + + } else return null; + } + + public ColliDataRecoverDTO getSession(Integer sessionID) { + + if(sessionID == null) return null; + + return getIfExists(sessionID); + } + + private ColliDataRecoverDTO getIfExists(int id) { + Optional recoverDTOOptional = Stream.of(mtbColtsSessions) + .filter(x -> x.getId() == id) + .findSingle(); + + + return recoverDTOOptional.isPresent() ? recoverDTOOptional.get() : null; + } + + public int startNewSession(MtbColt mtbColtSession, List testateOrdini) { + Integer newId = null; + + while(newId == null) { + int randomId = new Random().nextInt(1000); + ColliDataRecoverDTO dto = getIfExists(randomId); + if(dto == null) newId = randomId; + } + + + ColliDataRecoverDTO recoverDTO = new ColliDataRecoverDTO() + .setId(newId) + .setDataCollo(mtbColtSession.getDataColloS()) + .setNumCollo(mtbColtSession.getNumCollo()) + .setSerCollo(mtbColtSession.getSerCollo()) + .setGestioneCollo(mtbColtSession.getGestione()) + .setFiltro(mtbColtSession.getFiltroOrdini()) + .setTestateOrdini(testateOrdini); + + mtbColtsSessions.add(recoverDTO); + updateLocalFile(); + return newId; + } + + public void closeSession(int ID) { + ColliDataRecoverDTO dto = getIfExists(ID); + + if(dto != null) { + mtbColtsSessions.remove(dto); + updateLocalFile(); + } + } + + + private void loadLocalFile() { + InputStream inputStream; + Gson gson = new Gson(); + + try { + inputStream = mContext.openFileInput(CommonConst.Files.RECOVER_COLLO_FILE); + + byte[] bytes = IOUtils.readInputStreamFully(inputStream); + String jsonString = new String(bytes); + + Type listType = new TypeToken>(){}.getType(); + mtbColtsSessions = gson.fromJson(jsonString, listType); + + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + UtilityExceptions.defaultException(mContext, e); + } + } + + + private void updateLocalFile() { + FileOutputStream outputStream; + + Gson gson = new Gson(); + String jsonText = gson.toJson(mtbColtsSessions); + + try { + outputStream = mContext.openFileOutput(CommonConst.Files.RECOVER_COLLO_FILE, Context.MODE_PRIVATE); + outputStream.write(jsonText.getBytes()); + outputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + UtilityExceptions.defaultException(mContext, e); + } + } + + private boolean isFilePresent(String fileName) { + String path = mContext.getFilesDir().getAbsolutePath() + "/" + fileName; + File file = new File(path); + return file.exists(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/viewmodel/VenditaOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/viewmodel/VenditaOrdineInevasoViewModel.java index 063f7923..2d221acc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/viewmodel/VenditaOrdineInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/viewmodel/VenditaOrdineInevasoViewModel.java @@ -730,8 +730,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO this.loadMatchedRows(matchPickingObject); } - - private void loadMatchedRows(List matchedRows) { if(matchedRows == null || matchedRows.size() == 0) { DialogCommon.showNoArtFoundDialog(mActivity, null); @@ -754,7 +752,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO // tempSourceMtbColt.getSerCollo().equals(matchedRows.get(0).getSerCollo()) && // tempSourceMtbColt.getDataColloS().equals(matchedRows.get(0).getDataColloS())) { - onOrdineRowDispatch(matchedRows.get(0)); + onOrdineRowDispatch(matchedRows.get(0)); // } else { // //Se sto pickando da una UL diversa da quella suggerita allora non te la apro in // //automatico ma ti mostro il filtro @@ -777,6 +775,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO } + + public void createNewUL() { this.createNewUL(null, null, null, false, true, null); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java index f21d333c..f541207c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java @@ -15,8 +15,11 @@ import com.tfb.fbtoast.FBToast; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeType; +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; @@ -25,6 +28,7 @@ import it.integry.integrywmsnative.core.class_router.ClassRouter; import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration; import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_recover.ColliDataRecover; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbColt; @@ -43,7 +47,8 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV private ActivitySpedizioneBinding mBindings; - private SpedizioneViewModel mViewmodel; + @Inject + SpedizioneViewModel mViewmodel; private ObservableArrayList mSpedizioneMutableData = new ObservableArrayList(); @@ -55,7 +60,6 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV private boolean mFlashShowCodForn; private int barcodeScannerIstanceID = -1; - private Integer mMtbColtSessionID; private ArrayList mPickingList; private ArrayList mTestateOrdini; @@ -72,7 +76,15 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV mColliRegistrati = DataCache.retrieveItem(getIntent().getStringExtra("keyColliRegistrati")); mBindings = DataBindingUtil.setContentView(this, R.layout.activity_spedizione); - mViewmodel = new ViewModelProvider(this).get(SpedizioneViewModel.class); + +// ((MainApplication) getApplicationContext()).appComponent.inject(this); + SpedizioneComponent spedizioneComponent = DaggerSpedizioneComponent.builder() + .mainApplicationModule(MainApplication.appModule) + .mainApplicationComponent(MainApplication.appComponent) + .build(); + + spedizioneComponent.inject(this); + mViewmodel.addListeners(this); setSupportActionBar(mBindings.toolbar); @@ -238,8 +250,6 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV public void onLUCreated(MtbColt mtbColt) { noLUPresent.set(false); - mMtbColtSessionID = ColliDataRecover.startNewSession(mtbColt, mTestateOrdini); - FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); } @@ -247,7 +257,12 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV public void onLUClosed() { noLUPresent.set(true); - if(mMtbColtSessionID != null) ColliDataRecover.closeSession(mMtbColtSessionID); +// if(mMtbColtSessionID != null) ColliDataRecover.closeSession(mMtbColtSessionID); + } + + @Override + public void onFilterChanged(String newValue) { + } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneComponent.java new file mode 100644 index 00000000..8408c4f1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.spedizione_new; + +import javax.inject.Singleton; + +import dagger.Component; +import it.integry.integrywmsnative.MainApplicationComponent; + +@Singleton +@Component(modules = {SpedizioneModule.class}, dependencies = {MainApplicationComponent.class}) +public interface SpedizioneComponent { + + void inject(SpedizioneActivity spedizioneActivity); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneModule.java new file mode 100644 index 00000000..bb70cea9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneModule.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.gest.spedizione_new; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.MainApplicationModule; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; + +@Module(includes = {MainApplicationModule.class}) +public class SpedizioneModule { + + @Provides + @Singleton + SpedizioneViewModel providesSpedizioneViewModel(ColliDataRecoverService colliDataRecoverService) { + return new SpedizioneViewModel(colliDataRecoverService); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java index 61d1484b..5d5262df 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java @@ -7,14 +7,20 @@ import androidx.lifecycle.ViewModel; import com.annimon.stream.Stream; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; +import javax.inject.Inject; + import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecover; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; +import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal; import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.FiltroOrdineDTO; import it.integry.integrywmsnative.core.model.MtbAart; @@ -41,7 +47,7 @@ import it.integry.integrywmsnative.gest.spedizione_new.exceptions.ScannedPositio import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; -public class SpedizioneViewModel extends ViewModel { +public class SpedizioneViewModel { private List mTestateOrdini; private MutableLiveData> mPickingList = new MutableLiveData<>(); @@ -60,6 +66,16 @@ public class SpedizioneViewModel extends ViewModel { private MtbColt mCurrentMtbColt = null; + private Integer mMtbColtSessionID; + private final ColliDataRecoverService mColliDataRecoverService; + + @Inject + public SpedizioneViewModel(ColliDataRecoverService colliDataRecoverService) { + this.mColliDataRecoverService = colliDataRecoverService; + } + + + public void setDataset(String codMdep, List pickingList, List testateOrdini) { this.mDefaultCodMdep = codMdep; this.mPickingList.postValue(pickingList); @@ -552,6 +568,15 @@ public class SpedizioneViewModel extends ViewModel { private void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO) { + AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(); + AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal(); + + Stream.of(pickingObjectDTO.getWithdrawRows()) + .forEach(row -> { + numCnfWithdrawRows.addAndGet(row.getNumCnf()); + qtaColWithdrawRows.addAndGet(row.getQtaCol()); + }); + } @@ -582,14 +607,13 @@ public class SpedizioneViewModel extends ViewModel { .setDataCollo(value.getDataColloS()) .setMtbColr(new ObservableArrayList<>()); -// value -// .setDisablePrint(disablePrint) -// .setMtbColr(new ObservableArrayList<>()); - -// setULToCurrentContext(value); this.mCurrentMtbColt = mtbColt; + + + mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini); + if (onComplete != null) onComplete.run(); this.sendLUCreated(mtbColt); }, this::sendError);