Finish v1_9_4(98)

This commit is contained in:
Giuseppe Scorrano 2019-11-19 10:46:25 +01:00
commit e7ce1aebd0
64 changed files with 1622 additions and 351 deletions

55
.idea/runConfigurations/app_base.xml generated Normal file
View File

@ -0,0 +1,55 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_base" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="USE_LAST_SELECTED_DEVICE" value="false" />
<option name="PREFERRED_AVD" value="" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Hybrid>
<Java />
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

55
.idea/runConfigurations/app_frudis.xml generated Normal file
View File

@ -0,0 +1,55 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_frudis" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="USE_LAST_SELECTED_DEVICE" value="false" />
<option name="PREFERRED_AVD" value="" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Hybrid>
<Java />
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

55
.idea/runConfigurations/app_ime.xml generated Normal file
View File

@ -0,0 +1,55 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_ime" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="USE_LAST_SELECTED_DEVICE" value="false" />
<option name="PREFERRED_AVD" value="" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Hybrid>
<Java />
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,55 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_saporiveri" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="USE_LAST_SELECTED_DEVICE" value="false" />
<option name="PREFERRED_AVD" value="" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Hybrid>
<Java />
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@ -1,12 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_saporiveri_pv" type="AndroidRunConfigurationType" factoryName="Android App">
<configuration default="false" name="app_saporiveri_pv" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_vgalimenti" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -0,0 +1,55 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_vglimenti" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="USE_LAST_SELECTED_DEVICE" value="false" />
<option name="PREFERRED_AVD" value="" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Hybrid>
<Java />
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 95
def appVersionName = '1.9.1'
def appVersionCode = 98
def appVersionName = '1.9.4'
signingConfigs {
release {
@ -83,7 +83,7 @@ android {
abortOnError false
}
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti", ":dynamic_ime", ":dynamic_frudis", ":dynamic_saporiveri_pv"]
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti", ":dynamic_ime", ":dynamic_frudis", ":dynamic_saporiveri_pv", ":dynamic_saporiveri"]
}

View File

@ -12,16 +12,13 @@ import com.google.android.material.navigation.NavigationView;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Toast;
import androidx.fragment.app.FragmentTransaction;
@ -169,7 +166,7 @@ public class MainActivity extends BaseActivity
private void initGestMenu() {
Menu menu = mBinding.navView.getMenu();
ICustomConfiguration customConfiguration = ClassRouter.getIstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION);
List<MenuConfiguration.MenuGroup> menuGroups = menuConfiguration.getGroups();
@ -196,7 +193,7 @@ public class MainActivity extends BaseActivity
}
private MenuConfiguration.MenuItem getMenuItem(@IdRes int menuId) {
ICustomConfiguration customConfiguration = ClassRouter.getIstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION);
List<MenuConfiguration.MenuGroup> menuGroups = menuConfiguration.getGroups();
@ -315,7 +312,7 @@ public class MainActivity extends BaseActivity
private void init(){
ServerStatusChecker.getIstance().addCallback(value -> {
ServerStatusChecker.getInstance().addCallback(value -> {
if(value && (!mIsOnline || firstCheckExecution)){
SettingsManager.loadDBVariables(() -> {

View File

@ -100,6 +100,7 @@ public class BarcodeManager {
}
public static boolean onKeyDown(int keyCode, KeyEvent keyEvent){
if (mCurrentBarcodeInterface != null)
mCurrentBarcodeInterface.onKeyEvent(keyEvent);
return true;
}
@ -152,6 +153,7 @@ public class BarcodeManager {
}
public static boolean isKeyboardEmulator() {
return mCurrentBarcodeInterface instanceof KeyboardEmulatorBarcodeReader;
}
}

View File

@ -12,6 +12,7 @@ public class BaseCustomConfiguration implements ICustomConfiguration {
public static class Keys {
public static int MENU_CONFIGURATION = 0;
public static int FLAG_SHOW_COD_FORN_IN_SPEDIZIONE = 1;
public static int CUSTOM_DYNAMIC_VERSION_PATH = 2;
}
protected HashMap<Integer, Object> configurations = new HashMap<Integer, Object>() {{

View File

@ -14,7 +14,8 @@ public class ClassRouter {
public enum PATH {
FILTRO_ORDINI_VENDITA,
ORDINI_VENDITA,
CUSTOM_CONFIGURATION
CUSTOM_CONFIGURATION,
BARCODE_CUSTOMIZATION
}
private static Context context;
@ -59,7 +60,7 @@ public class ClassRouter {
}
public static <T> T getIstance(PATH path) {
public static <T> T getInstance(PATH path) {
try {
if (!checkIClassExists(path)) {

View File

@ -0,0 +1,7 @@
package it.integry.integrywmsnative.core.class_router.interfaces;
public interface IBarcodeCustomization {
boolean shouldForceToEan13(String barcode);
}

View File

@ -33,4 +33,7 @@ public interface ArticoloGrigliaDao {
@Query("SELECT * FROM articoli_griglia WHERE (cod_mart = :scan OR bar_code =:scan )AND id_griglia = :idGriglia LIMIT 1")
ArticoloGriglia findArticoloByScanAndGriglia(String scan, int idGriglia);
@Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode )AND id_griglia = :idGriglia LIMIT 1")
Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart);
}

View File

@ -1,6 +1,7 @@
package it.integry.integrywmsnative.core.data_store.db.dao;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
@ -39,7 +40,7 @@ public interface ArticoloOrdineDao {
@Query("SELECt * from articoli_ordine where cod_mart = :codMart and id_ordine = :ordineId LIMIT 1")
ArticoloOrdine findArticoloByCodMartAndOrdine(int ordineId, String codMart);
@Query( " SELECT articoli_ordine.* " +
@Query(" SELECT articoli_ordine.* " +
" FROM articoli_ordine " +
" LEFT OUTER JOIN articoli_griglia on articoli_ordine.cod_mart = articoli_griglia.cod_mart " +
" WHERE " +
@ -50,4 +51,8 @@ public interface ArticoloOrdineDao {
" AND articoli_ordine.id_ordine = :ordineId " +
" LIMIT 1")
ArticoloOrdine findArticoloByBarcodeAndOrdine(int ordineId, String barcode);
@Delete
void delete(ArticoloOrdine articolo);
}

View File

@ -1,6 +1,7 @@
package it.integry.integrywmsnative.core.data_store.db.dao;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
@ -27,4 +28,7 @@ public interface OrdineDao {
@Update
void update(Ordine ordine);
@Delete
void delete(Ordine ordine);
}

View File

@ -143,7 +143,8 @@ public class Ordine {
}
public void setCodMdep(@Nullable String codMdep) {
this.codMdep = codMdep; }
this.codMdep = codMdep;
}
public void setDataOrdS(String dataOrd) {
setDataOrd(UtilityDate.recognizeDateWithExceptionHandler(dataOrd));

View File

@ -24,7 +24,7 @@ public class ArticoliGrigliaRepository extends Repository{
List<ArticoloGriglia> toUpdate = new ArrayList<>();
List<ArticoloGriglia> toInsert = new ArrayList<>();
for (ArticoloGriglia art : articoli){
Integer id = mRepository.getIdArticoloByGrigliaAndCodMart(art.getIdGriglia(),art.getCodMart());
Integer id = mRepository.getIdArticoloByGrigliaAndBarcodeAndCodMart(art.getIdGriglia(),art.getBarCode(),art.getCodMart());
if (id != null){
art.setArticoloGrigliaId(id);
toUpdate.add(art);

View File

@ -94,4 +94,16 @@ public void findArticoloByScanAndOrdine(Ordine ordine, String barcode, RunnableA
}
});
}
public void deleteArticolo(ArticoloOrdine articolo, Runnable onSave, RunnableArgs<Exception> onError) {
execute(()->{
try{
mRepository.delete(articolo);
onSave.run();
}catch (Exception e){
onError.run(e);
}
});
}
}

View File

@ -10,7 +10,7 @@ import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGrigl
import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class OrdineRepository extends Repository{
public class OrdineRepository extends Repository {
private OrdineDao mRepository;
@ -18,44 +18,45 @@ public class OrdineRepository extends Repository{
this.mRepository = MainApplication.getOrdiniRepository();
}
public void selectAll(RunnableArgs<List<Ordine>> onSuccess, RunnableArgs<Exception> onError){
Runnable query = ()->{
try{
public void selectAll(RunnableArgs<List<Ordine>> onSuccess, RunnableArgs<Exception> onError) {
Runnable query = () -> {
try {
onSuccess.run(mRepository.getAll());
}catch (Exception e){
} catch (Exception e) {
onError.run(e);
}
};
execute(query);
}
public void selectAllTransmitted(RunnableArgs<List<OrdineWithGriglia>> onSuccess, RunnableArgs<Exception> onError){
Runnable query = ()->{
try{
public void selectAllTransmitted(RunnableArgs<List<OrdineWithGriglia>> onSuccess, RunnableArgs<Exception> onError) {
Runnable query = () -> {
try {
onSuccess.run(mRepository.getAllTrasnmitted());
}catch (Exception e){
} catch (Exception e) {
onError.run(e);
}
};
execute(query);
}
public void selectAllOpenOrders(Griglia griglia, RunnableArgs<List<OrdineWrapper>> onSuccess, RunnableArgs<Exception> onError){
Runnable query = ()->{
try{
public void selectAllOpenOrders(Griglia griglia, RunnableArgs<List<OrdineWrapper>> onSuccess, RunnableArgs<Exception> onError) {
Runnable query = () -> {
try {
onSuccess.run(mRepository.getAllOpenOrdersByGriglia(griglia.getGrigliaId()));
}catch (Exception e){
} catch (Exception e) {
onError.run(e);
}
};
execute(query);
}
public void insert(Ordine ordine, RunnableArgs<Integer> onSuccess, RunnableArgs<Exception> onError){
execute(()->{
try{
public void insert(Ordine ordine, RunnableArgs<Integer> onSuccess, RunnableArgs<Exception> onError) {
execute(() -> {
try {
Long id = mRepository.insert(ordine);
onSuccess.run(id.intValue());
}catch (Exception e){
} catch (Exception e) {
onError.run(e);
}
});
@ -63,11 +64,22 @@ public class OrdineRepository extends Repository{
public void updateOrder(Ordine ordine, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onError) {
execute(()->{
try{
execute(() -> {
try {
mRepository.update(ordine);
onSuccess.run(ordine);
}catch (Exception e){
} catch (Exception e) {
onError.run(e);
}
});
}
public void delete(Ordine ordine, Runnable onSuccess, RunnableArgs<Exception> onError) {
execute(() -> {
try {
mRepository.delete(ordine);
onSuccess.run();
} catch (Exception e) {
onError.run(e);
}
});

View File

@ -11,9 +11,10 @@ public class BaseActivity extends AppCompatActivity {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getDeviceId() != -1 && event.getDeviceId() != 0 && event.getAction() == KeyEvent.ACTION_DOWN){
BarcodeManager.onKeyDown(event.getKeyCode(),event);
return false;
if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
return BarcodeManager.onKeyDown(event.getKeyCode(), event);
}
}
return super.dispatchKeyEvent(event);
}

View File

@ -2,26 +2,42 @@ package it.integry.integrywmsnative.core.expansion;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.pointmobilescannerlibrary.PointMobileBarcodeReader;
public class BaseDialog extends Dialog {
private boolean mBarcodeListener = false;
public BaseDialog(@NonNull Context context) {
super(context);
if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()){
setOnKeyListener((dialog, keyCode, event) -> {
if (mBarcodeListener && event.getAction() == KeyEvent.ACTION_DOWN && !isControlKey(event)) {
return BarcodeManager.onKeyDown(event.getKeyCode(), event);
}
return false;
});
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getDeviceId() != -1 && event.getDeviceId() != 0 && event.getAction() == KeyEvent.ACTION_DOWN){
BarcodeManager.onKeyDown(event.getKeyCode(),event);
return false;
}
return super.dispatchKeyEvent(event);
private boolean isControlKey(KeyEvent keyEvent) {
int keyCode = keyEvent.getKeyCode();
return (
keyCode == KeyEvent.KEYCODE_BACK ||
keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
);
}
public void setBarcodeListener(boolean listen) {
this.mBarcodeListener = listen;
}
}

View File

@ -1,6 +1,8 @@
package it.integry.integrywmsnative.core.rest.consumers;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.interfaces.IBarcodeCustomization;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
@ -13,6 +15,15 @@ public class BarcodeRESTConsumer extends _BaseRESTConsumer {
public static void decodeEan128(BarcodeScanDTO barcodeObj, RunnableArgs<Ean128Model> onComplete, RunnableArgs<Exception> onFailed) {
IBarcodeCustomization barcodeCustomization = ClassRouter.getInstance(ClassRouter.PATH.BARCODE_CUSTOMIZATION);
if(barcodeCustomization != null && barcodeCustomization.shouldForceToEan13(barcodeObj.getStringValue())){
Ean128Model ean128Model = new Ean128Model();
ean128Model.Gtin = barcodeObj.getStringValue();
onComplete.run(ean128Model);
return;
}
String ean128 = barcodeObj.getStringValue().replaceAll("" + ((char) 29), "|");
BarcodeRESTConsumerService barcodeRESTConsumerService = RESTBuilder.getService(BarcodeRESTConsumerService.class);

View File

@ -37,7 +37,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
public static void getArticoliListino(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class);
ordiniARestService
.getArticoliListino(codAlis, SettingsManager.i().userSession.profileDB, SettingsManager.i().user.username, SettingsManager.i().user.password)
.getArticoliListino(codAlis)
.enqueue(new Callback<ServiceRESTResponse<GrigliaDTO>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<GrigliaDTO>> call, Response<ServiceRESTResponse<GrigliaDTO>> response) {
@ -94,7 +94,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class);
ordiniARestService
.saveOrdine(saveDTO, SettingsManager.i().userSession.profileDB, SettingsManager.i().user.username, SettingsManager.i().user.password)
.saveOrdine(saveDTO)
.enqueue(new Callback<List<ServiceRESTResponse<DtbOrdt>>>() {
@Override
public void onResponse(Call<List<ServiceRESTResponse<DtbOrdt>>> call, Response<List<ServiceRESTResponse<DtbOrdt>>> response) {

View File

@ -15,8 +15,8 @@ import retrofit2.http.Query;
public interface PVOrdiniAcquistoRESTConsumerService {
@POST("SM2GetElencoArticoli")
Call<ServiceRESTResponse<GrigliaDTO>> getArticoliListino(@Query("chiaveGriglia") String codAlis, @Query("profileDb") String profileDb, @Header("username") String username, @Header("password") String password);
Call<ServiceRESTResponse<GrigliaDTO>> getArticoliListino(@Query("chiaveGriglia") String codAlis);
@POST("SM2SaveTerminalino")
Call<List<ServiceRESTResponse<DtbOrdt>>> saveOrdine(@Body SaveDTO saveDTO, @Query("profileDb") String profileDb, @Header("username") String username, @Header("password") String password);
Call<List<ServiceRESTResponse<DtbOrdt>>> saveOrdine(@Body SaveDTO saveDTO);
}

View File

@ -12,7 +12,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
public class ServerStatusChecker {
private static ServerStatusChecker istance = new ServerStatusChecker();
private static ServerStatusChecker instance = new ServerStatusChecker();
private List<RunnableArgs<Boolean>> mCallback = new ArrayList<>();
@ -47,17 +47,17 @@ public class ServerStatusChecker {
public static void init(){
istance.shouldExecute = true;
instance.shouldExecute = true;
istance.handler.post(istance.runnableCode);
instance.handler.post(instance.runnableCode);
}
public static void dispose() {
istance.shouldExecute = false;
instance.shouldExecute = false;
}
public static ServerStatusChecker getIstance() {
return istance;
public static ServerStatusChecker getInstance() {
return instance;
}
}

View File

@ -4,7 +4,6 @@ import android.app.Activity;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
@ -12,23 +11,33 @@ import android.os.Build;
import android.os.Environment;
import com.github.javiersantos.appupdater.AppUpdater;
import com.github.javiersantos.appupdater.AppUpdaterUtils;
import com.github.javiersantos.appupdater.enums.AppUpdaterError;
import com.github.javiersantos.appupdater.enums.Display;
import com.github.javiersantos.appupdater.enums.UpdateFrom;
import com.github.javiersantos.appupdater.objects.Update;
import java.io.File;
import androidx.core.content.FileProvider;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.class_router.BaseCustomConfiguration;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration;
import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UpdatesManager {
public static void init(Activity context) {
String suffix;
ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
try{
suffix = customConfiguration.getConfig(BaseCustomConfiguration.Keys.CUSTOM_DYNAMIC_VERSION_PATH);
if (suffix == null){
suffix = "";
}
}catch (Exception e){
suffix = "";
}
String currentVersionUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/currentVersion";
String currentDownloadUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/android-release_v2.apk";
String currentDownloadUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/android-release"+suffix+"_v2.apk";
AppUpdater appUpdater = new AppUpdater(context)

View File

@ -5,6 +5,7 @@ import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.context.MainContext;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.utility.UtilityWindow;

View File

@ -94,7 +94,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
private void init(){
ServerStatusChecker.getIstance().addCallback(value -> {
ServerStatusChecker.getInstance().addCallback(value -> {
if(value && mBindings.noConnectionTopLayout.isExpanded()){
collapseNoConnectionLayout();
@ -215,7 +215,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
private void initGestMenu() {
ICustomConfiguration customConfiguration = ClassRouter.getIstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION);
List<MenuConfiguration.MenuGroup> menuGroups = menuConfiguration.getGroups();

View File

@ -28,10 +28,13 @@ import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsu
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.ActivityPvordineAcquistoEditBinding;
import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.adapter.OrdineAcquistoArtListAdapter;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
public class PVOrdineAcquistoEditActivity extends BaseActivity {
@ -40,7 +43,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
private Griglia mGriglia;
private List<ArticoloOrdine> mArticoli = new ArrayList<>();
private PVEditOrderHelper mhelper;
private ActivityPvordineAcquistoEditBinding mBinding;
private ActivityPvOrdineAcquistoEditBinding mBinding;
private int mBarcodeScannerIstanceID;
private OrdineAcquistoArtListAdapter mAdapter;
@ -49,15 +52,22 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
super.onCreate(savedInstanceState);
mhelper = new PVEditOrderHelper(this);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pvordine_acquisto_edit);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pv_ordine_acquisto_edit);
mBinding.setViewModel(this);
mOrdine = DataCache.retrieveItem(getIntent().getStringExtra("keyOrdine"));
if (mOrdine.isTransmitted()){
setSupportActionBar(mBinding.toolbar);
mBinding.toolbar.setTitle(R.string.edit_order);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (mOrdine.isTransmitted()) {
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
closeEdit();
}
String testataOrdString = String.format(this.getString(R.string.ord_acq_testata), String.valueOf(mOrdine.getOrdineId()), UtilityDate.formatDate(mOrdine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
mBinding.orderIdentifier.setText(Html.fromHtml(testataOrdString));
FabMenuCustomAnimations.changeIconOnFocus(mBinding.closeActivityFab, R.drawable.ic_check_white_24dp, R.drawable.ic_close_24dp);
initRecyclerView();
fetchDetails();
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
@ -66,6 +76,12 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
private void initRecyclerView() {
mBinding.articoliOrdineList.setHasFixedSize(true);
@ -74,18 +90,47 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
DividerItemDecoration itemDecorator = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
mBinding.articoliOrdineList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::addArticolo);
mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::selectAction);
mBinding.articoliOrdineList.setAdapter(mAdapter);
}
private void selectAction(ArticoloOrdine articoloOrdine) {
mBinding.closeActivityFab.close(false);
BarcodeManager.disable();
runOnUiThread(() -> DialogAskAction.make(this,
articoloOrdine.getDescrizione(),
articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(),
() -> this.addArticolo(articoloOrdine),
() -> this.deleteArticolo(articoloOrdine)).show());
}
private void deleteArticolo(ArticoloOrdine articoloOrdine) {
String text = "Stai per eliminare l'articolo <b> " + articoloOrdine.getDescrizione() + "</b> dall'ordine, <br> sei sicuro?";
DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
mhelper.removeArticoloFromOrdine(articoloOrdine, () -> {
progress.dismiss();
BarcodeManager.enable();
runOnUiThread(this::fetchArticoli);
}, e -> {
progress.dismiss();
runOnUiThread(() -> UtilityExceptions.defaultException(this, e));
});
}), () -> {
}).show();
}
private void handleException(Exception ex) {
runOnUiThread(()->{
runOnUiThread(() -> {
BarcodeManager.enable();
UtilityExceptions.defaultException(this, ex, false);
});
}
private void onScanSuccessful(BarcodeScanDTO dto) {
mBinding.closeActivityFab.close(false);
BarcodeManager.disable();
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
mhelper.checkArticolo(
@ -103,16 +148,13 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
}
private void addArticolo(ArticoloOrdine articoloOrdine) {
runOnUiThread(()->{
EditArticoloDialog.make(this, articoloOrdine, articolo -> {
BarcodeManager.enable();
if (articolo == null) {
Toast.makeText(this, "Inserimento articolo annullato", Toast.LENGTH_SHORT).show();
} else {
fetchArticoli();
}
}).show();
});
runOnUiThread(() -> EditArticoloDialog.make(this, articoloOrdine, articolo -> {
BarcodeManager.enable();
if (articolo != null) {
Toast.makeText(this, "Articolo aggiunto all'ordine!", Toast.LENGTH_SHORT).show();
}
fetchArticoli();
}).show());
}
private void fetchDetails() {
@ -122,7 +164,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
private void fetchGriglia() {
mhelper.loadGriglia(mOrdine.getIdGriglia(), griglia -> {
runOnUiThread(()->{
runOnUiThread(() -> {
mGriglia = griglia;
mBinding.codAlis.setText(mGriglia.getCodAlis());
});
@ -134,10 +176,12 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
mhelper.loadArticoli(mOrdine, articoli -> {
progress.dismiss();
mArticoli = articoli;
runOnUiThread(()->{
runOnUiThread(() -> {
mAdapter.updateItems(mArticoli);
mBinding.countArtOrd.setText(String.valueOf(mArticoli.size()));
mBinding.pvOrdineExport.setVisibility(mArticoli.size() > 0 ? View.VISIBLE : View.GONE);
mBinding.pvOrdineExport.setVisibility(mArticoli.size() > 0 ? View.INVISIBLE : View.GONE);
mBinding.closeActivityFab.close(false);
mBinding.scanArtSpinner.setVisibility(mArticoli.size() > 0 ? View.GONE : View.VISIBLE);
});
}, this::handleException);
}
@ -148,15 +192,15 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
public void exportOrdine() {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
PVOrdiniAcquistoRESTConsumer.saveOrdine(mOrdine , mArticoli,mGriglia,(ordine)->{
PVOrdiniAcquistoRESTConsumer.saveOrdine(mOrdine, mArticoli, mGriglia, (ordine) -> {
progress.dismiss();
runOnUiThread(()-> {
runOnUiThread(() -> {
Toast.makeText(this, "Ordine salvato con successo", Toast.LENGTH_SHORT).show();
onBackPressed();
});
},e-> runOnUiThread(()-> {
}, e -> runOnUiThread(() -> {
progress.dismiss();
UtilityExceptions.defaultException(this,e);
UtilityExceptions.defaultException(this, e);
}));
}
@ -176,4 +220,23 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
}
public void manualSearch(){
BarcodeManager.disable();
DialogSimpleInputHelper.makeInputDialog(this,"Inserisci il codice a barre/codice articolo da cercare",codice->{
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
mhelper.checkArticolo(
mOrdine,
codice,
articoloOrdine -> {
progress.dismiss();
addArticolo(articoloOrdine);
},
e -> {
progress.dismiss();
handleException(e);
}
);
}, BarcodeManager::enable).show();
}
}

View File

@ -93,7 +93,7 @@ public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<O
@Override
public void onBindSubheaderViewHolder(OrdineAcquistoArtListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
subheaderHolder.binding.title.setText(mContext.getString(R.string.ordini_a_aperti));
subheaderHolder.binding.title.setText(mContext.getString(R.string.item_list));
}
@Override

View File

@ -6,6 +6,8 @@ import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.text.Editable;
import android.text.Html;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.view.LayoutInflater;
@ -17,9 +19,11 @@ import it.integry.integrywmsnative.core.expansion.BaseDialog;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
public class EditArticoloDialog {
@ -32,7 +36,6 @@ public class EditArticoloDialog {
private PVEditOrderHelper mHelper;
private ArticoloOrdine mArticolo;
private ArticoloOrdine mSavedArt;
private boolean mLockedInput = false;
@ -41,6 +44,7 @@ public class EditArticoloDialog {
mContext = context;
mArticolo = articolo;
mHelper = new PVEditOrderHelper(context);
mSavedArt = null;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_pv_edit_articolo, null, false);
@ -51,8 +55,12 @@ public class EditArticoloDialog {
UtilityDialog.setTo90PercentSize(mContext, mDialog);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
int qtaCnf = (int)Math.ceil(mArticolo.getQtaOrd() / mArticolo.getQtaCnf());
mBinding.qtaTot.setText(String.valueOf(mArticolo.getQtaOrd()));
mSavedArt = null;
mBinding.qtaCnf.setText(String.valueOf(qtaCnf));
mDialog.setOnShowListener(dialog -> {
UtilityFocus.focusTextBox(mContext,mBinding.qtaTot);
});
mDialog.setOnDismissListener(dialog -> {
onDialogDismiss.run(mSavedArt);
@ -84,7 +92,7 @@ public class EditArticoloDialog {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
setQtaCnf(s.toString().length() >0 ? Float.parseFloat(s.toString()) : 0);
setQtaCnf(s.toString().length() >0 ? Integer.parseInt(s.toString()) : 0);
}
@Override
@ -93,7 +101,7 @@ public class EditArticoloDialog {
}
});
}
public void setQtaCnf(float qtaCnf){
public void setQtaCnf(int qtaCnf){
if (mLockedInput){
mLockedInput = false;
}else{
@ -109,8 +117,7 @@ public class EditArticoloDialog {
mLockedInput = false;
}else{
mLockedInput = true;
float qtaCnf = qtaOrd / mArticolo.getQtaCnf();
mBinding.qtaCnf.setText(String.valueOf(qtaCnf));
mBinding.qtaCnf.setText(String.valueOf((int)Math.ceil(qtaOrd / mArticolo.getQtaCnf())));
}
}
@ -129,6 +136,8 @@ public class EditArticoloDialog {
}catch (Exception e){
mContext.runOnUiThread(()-> UtilityExceptions.defaultException(mContext,e));
progress.dismiss();
return;
}
mHelper.saveArticoloToOrdine(mArticolo, ()->{
mSavedArt = mArticolo;

View File

@ -67,4 +67,8 @@ public class PVEditOrderHelper {
public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs<Exception> onFail) {
mArticoliOrdineRepository.saveArticoloToOrdine(articolo, onSave, onFail);
}
public void removeArticoloFromOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs<Exception> onError){
mArticoliOrdineRepository.deleteArticolo(articolo, onSave, onError);
}
}

View File

@ -4,10 +4,12 @@ import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
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 android.widget.Toast;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
@ -22,6 +24,7 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
@ -30,6 +33,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding;
@ -38,6 +42,7 @@ import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLis
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment, IScrollableFragment {
@ -47,6 +52,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
private Griglia mGriglia;
private OrdineAcquistoPvOpenListAdapter mAdapter;
private List<OrdineWrapper> mRenderedOrderList = new ArrayList<>();
private boolean mRedirectToNewOrder = true;
public PVOrdiniAcquistoGrigliaFragment() {
@ -119,6 +125,11 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
mBinding.ordiniAEmptyView.setVisibility(ordini == null || ordini.size() <= 0 ? View.VISIBLE : View.GONE);
refreshRenderedOrdini(ordini);
mAdapter.updateItems(mRenderedOrderList);
if (mRenderedOrderList.size() <= 0 && mRedirectToNewOrder) {
createNewOrder();
}else{
mRedirectToNewOrder = false;
}
}
public Griglia getGriglia() {
@ -133,11 +144,11 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, selectOrdine);
mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, this::selectAction);
mBinding.ordiniAApertiMainList.setAdapter(mAdapter);
}
private RunnableArgs<Ordine> selectOrdine = ordine -> {
private void editOrdine(Ordine ordine) {
Intent myIntent = new Intent(getActivity(), PVOrdineAcquistoEditActivity.class);
@ -146,18 +157,50 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
getActivity().startActivity(myIntent);
};
}
private void selectAction(Ordine ordine) {
getActivity().runOnUiThread(() -> DialogAskAction.make(getActivity(),
Html.fromHtml(String.format(this.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdineId()), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))).toString(),
ordine.getCountArticoli() + " articoli",
() -> this.editOrdine(ordine),
() -> this.deleteOrdine(ordine)).show());
}
private void deleteOrdine(Ordine ordine) {
String text = "Stai per eliminare un ordine sei sicuro?";
DialogSimpleMessageHelper.makeWarningDialog(getActivity(), new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper.deleteOrder(ordine, () -> {
getActivity().runOnUiThread(() -> {
progress.dismiss();
Toast.makeText(getActivity(), "Ordine eliminato!", Toast.LENGTH_SHORT);
fetchOrders();
});
}, e -> {
progress.dismiss();
getActivity().runOnUiThread(() -> UtilityExceptions.defaultException(getActivity(), e));
});
}), () -> {
}).show();
}
private void refreshRenderedOrdini(List<OrdineWrapper> ordini) {
mRenderedOrderList.clear();
if (ordini != null) mRenderedOrderList.addAll(ordini);
mRenderedOrderList.addAll(ordini);
}
public void createNewOrder() {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity(), getString(R.string.ordini_a_aperti_progress));
mHelper.createNewOrder(mGriglia, order -> {
progress.dismiss();
getActivity().runOnUiThread(()-> selectOrdine.run(order));
getActivity().runOnUiThread(() -> editOrdine(order));
}, e -> getActivity().runOnUiThread(() -> UtilityExceptions.defaultException(getActivity(), e, progress)));
}
@ -175,7 +218,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
@Override
public void onResume() {
super.onResume();
if (mGriglia != null){
if (mGriglia != null) {
fetchOrders();
}
}

View File

@ -28,7 +28,7 @@ public class OrdineAcquistoPvOpenListAdapter extends SectionedRecyclerViewAdapte
private Context mContext;
private List<OrdineWrapper> mDataset;
RunnableArgs<Ordine> mOnItemSelect;
private RunnableArgs<Ordine> mOnItemSelect;
static class SubheaderHolder extends RecyclerView.ViewHolder {
@ -70,7 +70,7 @@ public class OrdineAcquistoPvOpenListAdapter extends SectionedRecyclerViewAdapte
private List<OrdineWrapper> orderItems(List<OrdineWrapper> dataset) {
return Stream.of(dataset)
.distinctBy(OrdineWrapper::getOrdine)
.sortBy(x -> UtilityDate.formatDate(x.getOrdine().getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH))
.sortBy(x -> x.getOrdine().getOrdineId())
.toList();
}
@ -103,13 +103,11 @@ public class OrdineAcquistoPvOpenListAdapter extends SectionedRecyclerViewAdapte
String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdineId()), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
holder.binding.numArts.setText(String.format(mContext.getString(R.string.ord_acq_num_articoli), String.valueOf(ordineWrapper.getCountArticoli())));
holder.binding.numArts.setText(Html.fromHtml(String.format(mContext.getString(R.string.ord_acq_num_articoli), String.valueOf(ordineWrapper.getCountArticoli()))));
holder.binding.orderIdentifier.setText(Html.fromHtml(testataOrdString));
holder.binding.getRoot().setOnClickListener(v -> {
mOnItemSelect.run(ordine);
});
holder.binding.getRoot().setOnClickListener(v -> mOnItemSelect.run(ordine));
}

View File

@ -3,8 +3,10 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil;
@ -26,7 +28,7 @@ public class DialogScanLisA {
private Activity mContext;
private Dialog mDialog;
private BaseDialog mDialog;
private DialogScanCodiceGrigliaBinding mBinding;
@ -55,12 +57,15 @@ public class DialogScanLisA {
return new DialogScanLisA(context, onDialogDismiss).mDialog;
}
private void initBarcode() {
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
mDialog.setBarcodeListener(true);
mDialog.setOnDismissListener(dialog -> {
BarcodeManager.removeCallback(barcodeIstanceID);
BarcodeManager.enable();
@ -82,7 +87,7 @@ public class DialogScanLisA {
});
};
RunnableArgs<Griglia> onGrigliaAvaialable = griglia->{
RunnableArgs<Griglia> onGrigliaAvailable = griglia->{
mContext.runOnUiThread(()->{
progressDialog.dismiss();
mGriglia = griglia;
@ -95,13 +100,9 @@ public class DialogScanLisA {
repository.findByCodAlis(data.getStringValue(),griglia->{
if (griglia != null){
griglia.getGriglia().setCountArticoli(griglia.getCountArticoli());
if (griglia.getCountArticoli() >0){
onGrigliaAvaialable.run(griglia.getGriglia());
}else{
mHelper.updateGriglia(griglia.getGriglia(), onGrigliaAvaialable,mOnError);
}
mHelper.updateGriglia(griglia.getGriglia(), onGrigliaAvailable,mOnError);
}else{
mHelper.downloadAndSaveLisA(data.getStringValue(), onGrigliaAvaialable,mOnError);
mHelper.downloadAndSaveLisA(data.getStringValue(), onGrigliaAvailable,mOnError);
}
},mOnError);

View File

@ -10,6 +10,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO;
@ -21,11 +22,14 @@ public class OrdineAcquistoPvHelper {
private Context mContext;
private GrigliaRepository mGrigliaRepository;
private ArticoliGrigliaRepository mArticoliGrigliaRepository;
private ArticoliOrdineRepository mArticoliOrdineRepository;
private OrdineRepository mOrdineRepository;
public OrdineAcquistoPvHelper(Context mContext) {
this.mContext = mContext;
this.mGrigliaRepository = new GrigliaRepository();
this.mArticoliGrigliaRepository = new ArticoliGrigliaRepository();
this.mArticoliOrdineRepository = new ArticoliOrdineRepository();
this.mOrdineRepository = new OrdineRepository();
}
@ -67,9 +71,13 @@ public class OrdineAcquistoPvHelper {
Ordine ordine = new Ordine();
ordine.setDataIns(new Date());
ordine.setIdGriglia(griglia.getGrigliaId());
mOrdineRepository.insert(ordine,id->{
mOrdineRepository.insert(ordine, id -> {
ordine.setOrdineId(id);
onSuccess.run(ordine);
},onError);
}, onError);
}
public void deleteOrder(Ordine ordine, Runnable onSuccess, RunnableArgs<Exception> onFail) {
mOrdineRepository.delete(ordine, onSuccess, onFail);
}
}

View File

@ -12,7 +12,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.MultiAutoCompleteTextView;
import com.annimon.stream.Stream;
@ -131,7 +130,7 @@ public class DialogVenditaFiltroAvanzato {
}
private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) {
IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getIstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA);
IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getInstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA);
// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> {
// bindings.filledExposedDropdownDataCons.callOnClick();

View File

@ -100,7 +100,7 @@ public class VenditaOrdineInevasoHelper {
public List<VenditaOrdineInevasoListViewModel> getListViewModelPerPosizione(List<List<PickingObjectDTO>> groupedRighe, List<MtbColr> mtbColrs) {
ICustomConfiguration customConfiguration = ClassRouter.getIstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
List<VenditaOrdineInevasoListViewModel> listModel = new ArrayList<>();

View File

@ -1,7 +1,7 @@
package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.viewmodel;
import android.app.Dialog;
import android.app.ProgressDialog;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -921,7 +921,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone();
IOrdiniVendita ordiniVendita = ClassRouter.getIstance(ClassRouter.PATH.ORDINI_VENDITA);
IOrdiniVendita ordiniVendita = ClassRouter.getInstance(ClassRouter.PATH.ORDINI_VENDITA);
ordiniVendita.distribuisciCollo(progress, cloneMtbColt, mTestateOrdini, mtbColts -> {

View File

@ -0,0 +1,44 @@
package it.integry.integrywmsnative.ui;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.view.animation.OvershootInterpolator;
import com.github.clans.fab.FloatingActionMenu;
public class FabMenuCustomAnimations {
public static void changeIconOnFocus(FloatingActionMenu fabMenu, int iconOpen, int iconClose) {
AnimatorSet set = new AnimatorSet();
ObjectAnimator scaleOutX = ObjectAnimator.ofFloat(fabMenu.getMenuIconView(), "scaleX", 1.0f, 0.2f);
ObjectAnimator scaleOutY = ObjectAnimator.ofFloat(fabMenu.getMenuIconView(), "scaleY", 1.0f, 0.2f);
ObjectAnimator scaleInX = ObjectAnimator.ofFloat(fabMenu.getMenuIconView(), "scaleX", 0.2f, 1.0f);
ObjectAnimator scaleInY = ObjectAnimator.ofFloat(fabMenu.getMenuIconView(), "scaleY", 0.2f, 1.0f);
scaleOutX.setDuration(50);
scaleOutY.setDuration(50);
scaleInX.setDuration(150);
scaleInY.setDuration(150);
scaleInX.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
fabMenu.getMenuIconView().setImageResource(fabMenu.isOpened() ? iconOpen:iconClose);
}
});
set.play(scaleOutX).with(scaleOutY);
set.play(scaleInX).with(scaleInY).after(scaleOutX);
set.setInterpolator(new OvershootInterpolator(2));
fabMenu.setIconToggleAnimatorSet(set);
}
public static void changeIconOnFocus(FloatingActionMenu fabMenu, int iconOpen) {
changeIconOnFocus(fabMenu,iconOpen,iconOpen);
}
}

View File

@ -0,0 +1,58 @@
package it.integry.integrywmsnative.view.dialogs;
import android.app.Activity;
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 it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialog;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.databinding.DialogAskActionEditDeleteBinding;
public class DialogAskAction {
private Activity mContext;
private Dialog mDialog;
private Runnable mOnEditSelected;
private Runnable mOnDeleteSelected;
private DialogAskAction(Activity context,String title, String subTitle, Runnable onEditSelected, Runnable onDeleteSelected) {
mContext = context;
mOnEditSelected = onEditSelected;
mOnDeleteSelected = onDeleteSelected;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DialogAskActionEditDeleteBinding mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_action_edit_delete, null, false);
mBinding.setViewmodel(this);
mDialog = new BaseDialog(context);
mDialog.setContentView(mBinding.getRoot());
UtilityDialog.setTo90PercentSize(mContext, mDialog);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mBinding.bottomSheetActionsTitle.setText(title);
mBinding.bottomSheetActionsSubtitle.setText(subTitle);
}
public static Dialog make(Activity context, String title, String subtitle, Runnable onEdit, Runnable onDelete) {
return new DialogAskAction(context, title,subtitle,onEdit,onDelete).mDialog;
}
public void onEdit(){
mDialog.dismiss();
mOnEditSelected.run();
}
public void onDelete(){
mDialog.dismiss();
mOnDeleteSelected.run();
}
}

View File

@ -0,0 +1,80 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.text.SpannableString;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import java.util.HashMap;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.databinding.DialogBaseBinding;
import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding;
/**
* Created by GiuseppeS on 22/03/2018.
*/
public class DialogSimpleInputHelper {
private static Dialog makeBase(Context mContext, String titleText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick){
Dialog dialog = new Dialog(mContext);
DialogSimpleInputViewModel viewModel = new DialogSimpleInputViewModel(dialog);
DialogInputGeneralBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.dialog_input_general, null, false);
viewModel
.setOnPositive(()->{
onPositiveClick.run(mBinding.generalInput.getText().toString());
})
.setOnNegative(onNegativeClick);
mBinding.setViewmodel(viewModel);
//Title VIEW
mBinding.titleText.setText(titleText);
ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE);
//Content View
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(false);
dialog.setContentView(mBinding.getRoot());
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
UtilityDialog.setTo90PercentSize(mContext,dialog);
return dialog;
}
public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick){
return makeBase(mContext,
title,
onPositiveClick,
onNegativeClick);
}
}

View File

@ -0,0 +1,49 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.app.Dialog;
public class DialogSimpleInputViewModel {
private Dialog mDialog;
private Runnable onPositive;
private Runnable onNegative;
public DialogSimpleInputViewModel(Dialog dialog) {
mDialog = dialog;
}
public DialogSimpleInputViewModel setOnPositive(Runnable onPositive) {
this.onPositive = onPositive;
return this;
}
public DialogSimpleInputViewModel setOnNegative(Runnable onNegative) {
this.onNegative = onNegative;
return this;
}
public boolean isPositiveVisible() {
return onPositive != null;
}
public boolean isNegativeVisible() {
return onNegative != null;
}
public void onPositiveClick() {
mDialog.dismiss();
if(onPositive != null) onPositive.run();
}
public void onNegativeClick() {
mDialog.dismiss();
if(onNegative != null) onNegative.run();
}
}

View File

@ -0,0 +1,258 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/full_white"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/full_white"
android:orientation="vertical"
android:paddingTop="8dp"
tools:context=".gest.contenuto_bancale.ContenutoBancaleActivity">
<it.integry.integrywmsnative.ui.ElevatedToolbar
android:id="@+id/elevated_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="modifica ordine"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_gravity="start" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/add_extra_items_toolbar"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:background="@drawable/ripple_effect"
android:adjustViewBounds="true"
android:src="@drawable/ic_search_black_24dp"
android:onClick="@{()->viewModel.manualSearch()}"
android:tint="@color/colorPrimaryGray"/>
</androidx.appcompat.widget.Toolbar>
</it.integry.integrywmsnative.ui.ElevatedToolbar>
<LinearLayout
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">
<LinearLayout
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="ordine: "
android:textColor="@android:color/black"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/order_identifier"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="22 ottobre 2018" />
</LinearLayout>
<LinearLayout
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="Griglia "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_alis"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textStyle="italic"
tools:text="4SECCO" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
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="N. articoli "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/count_art_ord"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="10" />
</LinearLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/articoli_ordine_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="92dp"
android:paddingStart="2dp"
android:paddingEnd="2dp" />
<LinearLayout
android:id="@+id/scan_art_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:visibility="visible"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginStart="8dp"
android:layout_marginEnd="12dp"
android:layout_gravity="center_vertical"
android:gravity="center_horizontal"
style="@style/AppTheme.NewMaterial.Text"
android:text="@string/scan_item"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/close_activity_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchor="@+id/linearLayout2"
app:layout_anchorGravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:menu_icon="@drawable/ic_check_white_24dp"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/success_color"
fab:menu_colorPressed="@color/green_400"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/pv_ordine_export"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_black_upload"
android:visibility="gone"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.exportOrdine()}"
fab:fab_label="@string/close_and_export" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/pv_ordine_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_check_black_24dp"
android:visibility="visible"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.closeEdit()}"
fab:fab_label="@string/close_and_exit" />
</com.github.clans.fab.FloatingActionMenu>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@ -1,202 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/full_white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="8dp"
android:background="@color/full_white"
tools:context=".gest.contenuto_bancale.ContenutoBancaleActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/gray_detail_background_round8"
android:orientation="vertical"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ordine: "
android:textColor="@android:color/black"
android:textSize="16sp"
style="@style/AppTheme.NewMaterial.Text.Small" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/order_identifier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="22 ottobre 2018"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
style="@style/AppTheme.NewMaterial.Text.Small" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Griglia "
android:textColor="@android:color/black"
style="@style/AppTheme.NewMaterial.Text.Small" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_alis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="4SECCO"
android:textColor="@android:color/black"
android:textStyle="italic"
style="@style/AppTheme.NewMaterial.Text.Small" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="12dp">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="N. articoli "
android:textColor="@android:color/black"
style="@style/AppTheme.NewMaterial.Text.Small" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/count_art_ord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="10"
android:textColor="@android:color/black"
android:textStyle="bold"
style="@style/AppTheme.NewMaterial.Text.Small" />
</LinearLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/articoli_ordine_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="92dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"/>
</LinearLayout>
</LinearLayout>
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/close_activity_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/success_color"
fab:menu_colorPressed="@color/green_400"
fab:menu_fab_size="normal"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
app:fab_showAnimation="@anim/fab_scale_up"
app:fab_hideAnimation="@anim/fab_scale_down"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true"
app:menu_icon="@drawable/ic_check_white_24dp"
>
<com.github.clans.fab.FloatingActionButton
android:id="@+id/pv_ordine_export"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_black_upload"
android:visibility="gone"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.exportOrdine()}"
fab:fab_label="@string/close_and_export"
/>
<com.github.clans.fab.FloatingActionButton
android:id="@+id/pv_ordine_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_check_black_24dp"
android:visibility="visible"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.closeEdit()}"
fab:fab_label="@string/close_and_exit"
android:scaleX="-1" />
</com.github.clans.fab.FloatingActionMenu>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@ -0,0 +1,169 @@
<?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.view.dialogs.DialogAskAction" />
</data>
<androidx.cardview.widget.CardView
android:id="@+id/base_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:id="@+id/bottom_sheet_actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:orientation="vertical"
android:padding="16dp"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<RelativeLayout
android:id="@+id/dialog_actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:ellipsize="end"
android:text="@string/choose_action"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:textColor="@android:color/primary_text_light"
android:textSize="18sp"
android:textStyle="bold"/>
</RelativeLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/bottom_sheet_actions_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:paddingEnd="8dp"
android:paddingStart="0dp"
android:textColor="#444"
android:textSize="18sp"
android:textStyle="bold"
tools:text="Title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/bottom_sheet_actions_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textStyle="bold"
tools:text="subtitle" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.50" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@id/guideline_action"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/bottom_sheet_actions_edit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:padding="16dp"
android:scaleX="1.5"
android:scaleY="1.5"
android:src="@drawable/ic_edit_24dp"
android:onClick="@{()->viewmodel.onEdit()}"
android:tint="@color/green_600" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/edit" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/guideline_action"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/bottom_sheet_actions_delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:padding="16dp"
android:scaleX="1.5"
android:scaleY="1.5"
android:src="@drawable/ic_delete_24dp"
android:onClick="@{()->viewmodel.onDelete()}"
android:tint="@color/red_600" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delete" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputViewModel" />
</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"
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>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="24dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<TextView
android:id="@+id/title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle"
tools:text="Insert here"
android:gravity="center_horizontal"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
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.10"/>
<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.90"/>
<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.TextInputEditText
android:id="@+id/general_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:hint="input here"
style="@style/TextInputEditText.OutlinePrimary"/>
</com.google.android.material.textfield.TextInputLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<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"
android:onClick="@{() -> viewmodel.onNegativeClick()}"
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:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@string/confirm"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -1,18 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.cardview.widget.CardView
android:id="@+id/base_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -40,12 +42,31 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="24dp"
android:paddingRight="24dp">
android:padding="24dp">
<RelativeLayout
android:id="@+id/dialog_title"
android:id="@+id/dialog_actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:ellipsize="end"
android:text="@string/insert_qty"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:textColor="@android:color/primary_text_light"
android:textSize="18sp"
android:textStyle="bold"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/dialog_info"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@ -53,10 +74,10 @@
android:id="@+id/cod_mart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimary"
android:layout_marginBottom="8dp"
android:ellipsize="end"
android:text="@{viewmodel.articolo.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="18sp"
android:textStyle="bold"
tools:text="codMart" />
@ -68,26 +89,33 @@
android:layout_below="@id/cod_mart"
android:ellipsize="end"
android:text="@{viewmodel.articolo.descrizione}"
android:textColor="@color/red_600"
android:textSize="16sp"
android:textStyle="bold"
tools:text="DESCR ART" />
</RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:paddingLeft="8dp"
android:text="Unità di misura: "
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="4dp"
android:text="@{viewmodel.articolo.untMis}"
android:textColor="#000"
android:textSize="18sp"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintRight_toRightOf="parent"
tools:text="(UM)" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
@ -167,7 +195,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/packages"
android:inputType="numberDecimal"
android:inputType="number"
android:selectAllOnFocus="true" />
</com.google.android.material.textfield.TextInputLayout>
@ -219,12 +247,12 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/center_guideline"
android:onClick="@{()->viewmodel.cancel()}"
app:icon="@drawable/ic_clear_24dp"
app:strokeColor="@color/colorPrimary"
android:text="@string/no"/>
android:text="@string/abort"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/add_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.PrimaryFull"
@ -233,9 +261,9 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/center_guideline"
app:layout_constraintEnd_toEndOf="parent"
app:icon="@drawable/ic_add_24dp"
android:focusable="true"
android:onClick="@{()->viewmodel.saveAndExit()}"
android:text="@string/yes"/>
android:text="@string/add"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -30,6 +30,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants"
android:paddingTop="8dp">
<LinearLayout
@ -138,13 +139,13 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/ordini_a_aperti_main_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:layout_marginBottom="92dp"
android:background="@color/full_white"
android:paddingStart="2dp"
android:paddingEnd="2dp"/>

View File

@ -260,7 +260,6 @@
<string name="batch_lot_not_enabled">Il lotto <b>%s</b> non è attivo. Continuare?</string>
<string name="punto_vendita">Punto Vendita</string>
<string name="title_dynamic_saporiveri">Dynamic SaporiVeri</string>
<string name="title_dynamic_saporiveri_pv">SaporiVeri PV</string>
<string name="generate_orders">Genera ordini di acqusito</string>
<string name="transmitted_orders">Ordini di acquisto trasmessi</string>
@ -283,4 +282,11 @@
<string name="add">Aggiungi</string>
<string name="close_and_export">Chiudi ed esporta ordine</string>
<string name="close_and_exit">Chiudi ordine</string>
<string name="scan_art_barcode_to_add">Scansiona il codice di un articolo per aggiungerlo all\' ordine</string>
<string name="edit_order">Modifica ordine</string>
<string name="item_list">Lista articoli</string>
<string name="insert_qty">Inserisci quantità</string>
<string name="choose_action">Seleziona una azione</string>
<string name="delete">Elimina</string>
<string name="edit">Modifica</string>
</resources>

View File

@ -268,7 +268,6 @@
<string name="home">Home</string>
<string name="logout">Logout</string>
<string name="title_dynamic_saporiveri">Dynamic SaporiVeri</string>
<string name="title_dynamic_saporiveri_pv">SaporiVeri PV</string>
<string name="punto_vendita">Sale point</string>
<string name="generate_orders">Generate purchase orders</string>
@ -288,4 +287,12 @@
<string name="add">Add</string>
<string name="close_and_export">Close and export</string>
<string name="close_and_exit">Close order</string>
<string name="scan_art_barcode_to_add">Scan an item barcode to add it to the order</string>
<string name="edit_order">Edit order</string>
<string name="item_list">Items list</string>
<string name="insert_qty">Insert Quantity</string>
<string name="choose_action">Choose action</string>
<string name="delete">Delete</string>
<string name="edit">Edit</string>
<string name="title_dynamic_saporiveri">SaporVeri Customization</string>
</resources>

View File

@ -156,4 +156,5 @@
</resources>

View File

@ -1,4 +1,6 @@
call build_azienda.bat _base
call build_azienda.bat vgalimenti
call build_azienda.bat ime
call build_azienda.bat frudis
call build_azienda.bat frudis
call build_azienda.bat saporiveri_pv
call build_azienda.bat saporiveri

1
dynamic_saporiveri/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,24 @@
apply plugin: 'com.android.dynamic-feature'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':app')
implementation 'androidx.appcompat:appcompat:1.1.0'
}

View File

@ -0,0 +1,14 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution"
package="it.integry.wms.dynamic_customization">
<dist:module
dist:instant="false"
dist:title="@string/title_dynamic_saporiveri">
<dist:delivery>
<dist:on-demand />
</dist:delivery>
<dist:fusing dist:include="true" />
</dist:module>
</manifest>

View File

@ -0,0 +1,31 @@
package it.integry.wms.dynamic_customization;
import android.content.Context;
import android.util.Log;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.wms.dynamic_customization.extensions.BarcodeCustomization;
import it.integry.wms.dynamic_customization.extensions.CustomConfiguration;
import it.integry.wms.dynamic_customization.extensions.FiltroOrdiniVendita;
import it.integry.wms.dynamic_customization.extensions.OrdiniVendita;
public class DynamicContext {
public void init(Context context) {
Log.d("DynamicContext", "Caricamento personalizzazioni per SaporiVeri");
try {
ClassRouter.registerPath(ClassRouter.PATH.FILTRO_ORDINI_VENDITA, FiltroOrdiniVendita.class);
ClassRouter.registerPath(ClassRouter.PATH.ORDINI_VENDITA, OrdiniVendita.class);
ClassRouter.registerPath(ClassRouter.PATH.CUSTOM_CONFIGURATION, CustomConfiguration.class);
ClassRouter.registerPath(ClassRouter.PATH.BARCODE_CUSTOMIZATION, BarcodeCustomization.class);
} catch (Exception ex) {
UtilityExceptions.defaultException(context, ex);
}
Log.d("DynamicContext", "Caricamento personalizzazioni per SaporiVeri COMPLETATO");
}
}

View File

@ -0,0 +1,14 @@
package it.integry.wms.dynamic_customization.extensions;
import it.integry.integrywmsnative.core.class_router.interfaces.IBarcodeCustomization;
public class BarcodeCustomization implements IBarcodeCustomization {
@Override
public boolean shouldForceToEan13(String barcode) {
return barcode != null && barcode.length() == 13;
}
}

View File

@ -0,0 +1,11 @@
package it.integry.wms.dynamic_customization.extensions;
import it.integry.integrywmsnative.core.class_router.BaseCustomConfiguration;
import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration;
public class CustomConfiguration extends BaseCustomConfiguration implements ICustomConfiguration {
public CustomConfiguration() {
}
}

View File

@ -0,0 +1,21 @@
package it.integry.wms.dynamic_customization.extensions;
import it.integry.integrywmsnative.core.class_router.interfaces.IFiltroOrdiniVendita;
public class FiltroOrdiniVendita implements IFiltroOrdiniVendita {
@Override
public boolean shoudShowCodMdepFilter() {
return false;
}
@Override
public boolean shoudShowIdViaggioFilter() {
return false;
}
@Override
public boolean shoudShowAgenteFilter() {
return false;
}
}

View File

@ -0,0 +1,26 @@
package it.integry.wms.dynamic_customization.extensions;
import android.app.Dialog;
import java.util.List;
import it.integry.integrywmsnative.core.class_router.interfaces.IOrdiniVendita;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
public class OrdiniVendita implements IOrdiniVendita {
@Override
public void distribuisciCollo(Dialog progress, MtbColt mtbColt, List<OrdineVenditaInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
UtilityToast.showToast("Avviato metodo in BaseFeature");
ColliMagazzinoRESTConsumer.distribuisciCollo(mtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(),
onComplete,
onFailed);
}
}

View File

@ -7,6 +7,7 @@ public class CustomConfiguration extends BaseCustomConfiguration implements ICus
public CustomConfiguration() {
configurations.put(Keys.MENU_CONFIGURATION, new MenuConfigurationSAPORIVERIPV());
configurations.put(Keys.CUSTOM_DYNAMIC_VERSION_PATH,"_pv");
}
}

View File

@ -62,7 +62,9 @@ public class KeyboardEmulatorBarcodeReader implements BarcodeReaderInterface {
if (keyEvent.getKeyCode() != KeyEvent.KEYCODE_ENTER){
if (keyEvent.getKeyCode() != KeyEvent.KEYCODE_SHIFT_LEFT){
mLastCharInsertTime =keyEvent.getEventTime();
mTextBarcode+= (char) keyEvent.getUnicodeChar();
if (keyEvent.getUnicodeChar() > 0){
mTextBarcode+= (char) keyEvent.getUnicodeChar();
}
}
}else{
if (mTextBarcode.length() > 0){

View File

@ -1 +1 @@
include ':app', ':pointmobilescannerlibrary', ':dynamic_vgalimenti', ':dynamic__base', ':zebrascannerlibrary', ':honeywellscannerlibrary', ':dynamic_ime', ':dynamic_frudis', ':dynamic_saporiveri_pv', ':keyobardemulatorscannerlibrary', ':barcode_base_android_library'
include ':app', ':pointmobilescannerlibrary', ':dynamic_vgalimenti', ':dynamic__base', ':zebrascannerlibrary', ':honeywellscannerlibrary', ':dynamic_ime', ':dynamic_frudis', ':dynamic_saporiveri_pv', ':keyobardemulatorscannerlibrary', ':barcode_base_android_library', ':dynamic_saporiveri'