Compare commits

...

10 Commits

Author SHA1 Message Date
Don Wilfried dab2e5e867 feat: Enhance AddNetwork functionality with neighborhood selection and update AssignAgentGeo to include neighborhood parameter 2025-08-27 21:20:32 +01:00
Don Wilfried 405c2ce49d feat: Add offline supervisor info retrieval and update related components 2025-08-15 15:18:24 +01:00
Don Wilfried 6f146eb712 Refactor payment terminology and remove unused payment methods
- Updated header titles from 'QUITANCE' to 'PAYMENT' in NumeroQuitance and NumeroQuitanceDetail components.
- Removed references to 'WALLET' and 'CASH' payment methods in NumeroQuitanceDetail, leaving only 'Tresor pay'.
- Changed the title in optionNumeroQuitanceScreen from 'QUITANCE' to 'NUMERO_QUITANCE'.
- Added new translation key 'PAY' in both English and French language files.
- Updated French translations for 'QUITANCE' and 'SAISIE_NUMERO_QUITANCE' to reflect payment context.
- Added console logs for debugging in searchUserAction function.
2025-07-09 06:01:04 +01:00
Don Wilfried 1ce94928b6 Update application branding and localization; refactor user input validation and logging
- Changed app name from "iLink City" to "SIM_ba Mobile" in French localization files.
- Updated various UI text to reflect new branding in French localization.
- Added validation for Cameroon phone numbers in CreateUserStep2.
- Enhanced logging for debugging purposes across multiple components.
- Refactored user input handling to trim whitespace for phone numbers.
- Updated geocoding URL to use test base URL for development.
- Adjusted constants for API endpoints to reflect new test environment.
2025-06-18 13:03:01 +01:00
Don Wilfried e2557b3ab3 feat: Implement internationalization for placeholder and labels in login screens
- Added I18n support for the placeholder in FilteredList component.
- Updated createAccount component to use I18n for hierarchical and tax code descriptions.
- Modified createUserStep2 to change town ID and added console logs for debugging.
- Updated English and French translation files to reflect new labels and descriptions.
- Changed geocoding URL in MapService to point to the correct endpoint and added debug logs.
2025-04-25 10:51:55 +01:00
Don Wilfried d1b4021c19 Fixing IGS problem 2025-03-28 14:04:43 +01:00
Don Wilfried 2349f60ba8 Update French translations and set default values for municipality and district 2025-02-23 20:57:50 +01:00
Don Wilfried c09626f480 Update images and adjust styles across multiple screens 2025-02-21 11:00:37 +01:00
Don Wilfried a67d6fdf06 Ready for release 2025-01-15 15:06:31 +01:00
Don Wilfried 104e08eecd Before trying to fix the assembleRelease bug 2025-01-09 12:24:29 +01:00
64 changed files with 3846 additions and 2621 deletions

View File

@ -130,9 +130,10 @@ android {
compileSdkVersion rootProject.ext.compileSdkVersion compileSdkVersion rootProject.ext.compileSdkVersion
compileSdkVersion rootProject.ext.compileSdkVersion compileSdkVersion rootProject.ext.compileSdkVersion
// TODO: Switch from test to prod and vice versa
defaultConfig { defaultConfig {
applicationId "com.test_city.douala3" // applicationId "com.test_city.douala3"
applicationId "com.test_city.douala3test"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
missingDimensionStrategy 'react-native-camera', 'general' missingDimensionStrategy 'react-native-camera', 'general'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,5 +1,5 @@
{ {
"WELCOME": "Welcome to iLink World !", "WELCOME": "Welcome to SIM_ba !",
"WAITING_LONG": "Waiting for a moment", "WAITING_LONG": "Waiting for a moment",
"HELP": "Help", "HELP": "Help",
"SIMPLE_USER": "Simple User", "SIMPLE_USER": "Simple User",
@ -136,7 +136,7 @@
"QUARTIER_COMMUNE": "Neighborhood in the town", "QUARTIER_COMMUNE": "Neighborhood in the town",
"ARRONDISSEMENT": "Borough", "ARRONDISSEMENT": "Borough",
"PATENTE": "Patent", "PATENTE": "Patent",
"TVA": "TVA", "TVA": "VAT",
"IRPP": "IRPP", "IRPP": "IRPP",
"ANNEE_TAXE": "Paid year taxed", "ANNEE_TAXE": "Paid year taxed",
"ANNEE_TAXE_N": "Paid year taxed N", "ANNEE_TAXE_N": "Paid year taxed N",
@ -275,6 +275,8 @@
"IMAGE_TAKE": "Image take", "IMAGE_TAKE": "Image take",
"NAME": "Last name(s)", "NAME": "Last name(s)",
"FIRSTNAME": "First name(s) ", "FIRSTNAME": "First name(s) ",
"CIVILITY": "Civility",
"NATIONALITY": "Nationality",
"NAME_EMETTEUR": "Issuer first name(s)", "NAME_EMETTEUR": "Issuer first name(s)",
"EMETTEUR": "Issuer", "EMETTEUR": "Issuer",
"FIRSTNAME_EMETTEUR": "Issuer last name(s) ", "FIRSTNAME_EMETTEUR": "Issuer last name(s) ",
@ -449,7 +451,6 @@
"CHOOSE_LANGUAGE": "Choose the language", "CHOOSE_LANGUAGE": "Choose the language",
"MODIFY_PASSWORD": "Forgotten password", "MODIFY_PASSWORD": "Forgotten password",
"CONTACT": "Contact", "CONTACT": "Contact",
"UPDATE": "... update",
"FAQ": "FAQ", "FAQ": "FAQ",
"UPDATE_POSITION_TEXT": "Update my position", "UPDATE_POSITION_TEXT": "Update my position",
"YOU_ARE": "Are you?", "YOU_ARE": "Are you?",
@ -536,8 +537,8 @@
"MEMBERSHIP_REQUEST": "Membership applications", "MEMBERSHIP_REQUEST": "Membership applications",
"HISTORY_TYPE_REQUEST": "Queries", "HISTORY_TYPE_REQUEST": "Queries",
"TREAT": "Processed", "TREAT": "Processed",
"EXIT_TITLE": "Close iLink World!", "EXIT_TITLE": "Close SIM_ba!",
"EXIT_DESC": "Do you really want to close iLink World?", "EXIT_DESC": "Do you really want to close SIM_ba?",
"NO_TREAT": "Unprocessed", "NO_TREAT": "Unprocessed",
"EXIT": "Close", "EXIT": "Close",
"PERIOD": "Period", "PERIOD": "Period",
@ -550,7 +551,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Your account has been activated successfully!", "ACCOUNT_ACTIVATE_TEXT": "Your account has been activated successfully!",
"HISTORY_END": "End", "HISTORY_END": "End",
"DONT_VALIDATE_ACCOUNT": "Account not validated", "DONT_VALIDATE_ACCOUNT": "Account not validated",
"CONNEXION_SUCCESSFULL_TEXT": "Successful login Welcome to iLink World!", "CONNEXION_SUCCESSFULL_TEXT": "Successful login Welcome to SIM_ba!",
"UNVALIDATE_ACCOUNT_TEXT": "Your hypervisor has not yet verified your account", "UNVALIDATE_ACCOUNT_TEXT": "Your hypervisor has not yet verified your account",
"TEXT_NEED_POSITION": "Please update your location!", "TEXT_NEED_POSITION": "Please update your location!",
"TITLE_NEED_POSITION": "Your location needs to be updated", "TITLE_NEED_POSITION": "Your location needs to be updated",
@ -563,12 +564,12 @@
"TITLE_PROBLE_COME": "A problem has been encountered", "TITLE_PROBLE_COME": "A problem has been encountered",
"TITLE_SUPPRESS_CONFIRM": "Confirm deletion", "TITLE_SUPPRESS_CONFIRM": "Confirm deletion",
"TEXT_SUPPRESS_CONFIRM": "Do you really want to delete this user ?", "TEXT_SUPPRESS_CONFIRM": "Do you really want to delete this user ?",
"TEXT_ERROR_START_APPLICATION": "An error occurred while starting iLink World, please restart iLink World", "TEXT_ERROR_START_APPLICATION": "An error occurred while starting SIM_ba, please restart SIM_ba",
"TEXT_UNABLE_TO_GET_YOUR_POSITION": "Unable to retrieve your location, please make sure your GPS is enabled and restart iLink World", "TEXT_UNABLE_TO_GET_YOUR_POSITION": "Unable to retrieve your location, please make sure your GPS is enabled and restart SIM_ba",
"RESTART": "REPEAT", "RESTART": "REPEAT",
"TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Unable to retrieve information from your country, check your internet connection, click \" Ok \"to try again,", "TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Unable to retrieve information from your country, check your internet connection, click \" Ok \"to try again,",
"TITLE_UNABLE_TO_AUTORISE": "Failed to Authorize", "TITLE_UNABLE_TO_AUTORISE": "Failed to Authorize",
"MISSING_AUTORISATION_LOCATION": "iLink World is not authorized to access your location, please allow iLink World to access your location and restart iLink World", "MISSING_AUTORISATION_LOCATION": "SIM_ba is not authorized to access your location, please allow SIM_ba to access your location and restart SIM_ba",
"TEXT_FORGOTTEN_PASSWORD": "Enter your username, we will send you a new password", "TEXT_FORGOTTEN_PASSWORD": "Enter your username, we will send you a new password",
"TEXT_NETWORK_UNABLE": "Network not available, want to try again?", "TEXT_NETWORK_UNABLE": "Network not available, want to try again?",
"LOADING_TEXT_MARKERS": "More points", "LOADING_TEXT_MARKERS": "More points",
@ -577,7 +578,7 @@
"NO_POINT_FOUND": "No points found ", "NO_POINT_FOUND": "No points found ",
"LAUNCH_POINT_WITH_FILTER": "Do you want to restart the search within a radius of ", "LAUNCH_POINT_WITH_FILTER": "Do you want to restart the search within a radius of ",
"UNABLE_GET_INFORMATION": "Problem of retrieval of information", "UNABLE_GET_INFORMATION": "Problem of retrieval of information",
"UNABLE_GET_INFORMATION_TEXT": "Make sure your GPS is turned on and put in high precision mode and restart iLink World", "UNABLE_GET_INFORMATION_TEXT": "Make sure your GPS is turned on and put in high precision mode and restart SIM_ba",
"TITLE_HELP_SOON": "Help not available!", "TITLE_HELP_SOON": "Help not available!",
"YOUR_NETWORK": "Select your network", "YOUR_NETWORK": "Select your network",
"YOUR_NETWORK_SELECTED": "Your network", "YOUR_NETWORK_SELECTED": "Your network",
@ -600,11 +601,10 @@
"UPDATE_DATE": "Date updated", "UPDATE_DATE": "Date updated",
"ASSIGN_TO_AGENT": "Assign to an agent", "ASSIGN_TO_AGENT": "Assign to an agent",
"AVIS_MODIFY_SUCCESS": "Notice successfully amended", "AVIS_MODIFY_SUCCESS": "Notice successfully amended",
"ORDRE_RECETTE_SUCCES": "Recipe order entered successfully",
"NUMERO_QUITANCE_SUCCES": "Successful receipt number", "NUMERO_QUITANCE_SUCCES": "Successful receipt number",
"ORDRE_RECETTE_MODIFY_SUCCES": "Recipe order number successfully changed", "ORDRE_RECETTE_MODIFY_SUCCES": "Recipe order number successfully changed",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Receipt number changed successfully", "NUMERO_QUITANCE_MODIFY_SUCCES": "Receipt number changed successfully",
"TAXES_SUR_LA_PROPRETE": "Tax on cleanliness", "TAXES_SUR_LA_PROPRETE": "Synthetic general tax *",
"SAVE": "Save", "SAVE": "Save",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Are you sure you want to remove this tax?", "TEXT_SUPPRESS_CONFIRM_TAXE": "Are you sure you want to remove this tax?",
"NUMERO_QUITANCE": "Receipt number", "NUMERO_QUITANCE": "Receipt number",
@ -631,12 +631,10 @@
"PAYMENT_DEADLINE": "Payment deadline", "PAYMENT_DEADLINE": "Payment deadline",
"TAX_NOTICE_CREATED_AT": "Tax notice created at", "TAX_NOTICE_CREATED_AT": "Tax notice created at",
"TOTAL_AMOUNT": "Total amount", "TOTAL_AMOUNT": "Total amount",
"UPDATE_DATE": "Update date",
"YEAR": "Year", "YEAR": "Year",
"TYPE": "Type", "TYPE": "Type",
"CODE_MEMBRE": "Sponsor code", "CODE_MEMBRE": "Sponsor code",
"DISTRICT": "District", "DISTRICT": "District",
"IDENTIFICATION_NUMBER": "Identification number",
"MUNICIPALITY": "Municipality", "MUNICIPALITY": "Municipality",
"ID_PATENTE": "ID patent", "ID_PATENTE": "ID patent",
"NETWORK_ID": "Network ID", "NETWORK_ID": "Network ID",
@ -649,7 +647,7 @@
"PRINCIPAL_AMOUNT": "Principal amount", "PRINCIPAL_AMOUNT": "Principal amount",
"DATE_AVIS_IMPOSITION": "Tax notice date", "DATE_AVIS_IMPOSITION": "Tax notice date",
"TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "This network is inactive, please choose another", "TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "This network is inactive, please choose another",
"ENTER_SPONSOR_CODE": "Renseignez votre code parrain", "ENTER_SPONSOR_CODE": "Renseignez votre code hiérarchique ou taxe",
"NOM_SOCIETE": "Society name", "NOM_SOCIETE": "Society name",
"TAKE_My_POSITION": "Retreive position", "TAKE_My_POSITION": "Retreive position",
"CREATE_ACTIF": "Create asset", "CREATE_ACTIF": "Create asset",

View File

@ -1,5 +1,5 @@
{ {
"WELCOME": "Bienvenue sur iLink City !", "WELCOME": "Bienvenue sur SIM_ba Mobile !",
"WAITING_LONG": "Veuillez patienter un instant", "WAITING_LONG": "Veuillez patienter un instant",
"HELP": "Aide", "HELP": "Aide",
"SIMPLE_USER": "Utilisateur simple", "SIMPLE_USER": "Utilisateur simple",
@ -148,9 +148,9 @@
"ANNEE_TAXE_N_1": "Année taxé payée N-1", "ANNEE_TAXE_N_1": "Année taxé payée N-1",
"ANNEE_TAXE_N_2": "Année taxé payée N-2", "ANNEE_TAXE_N_2": "Année taxé payée N-2",
"TYPE_ACTIVITE": "Type d'activité", "TYPE_ACTIVITE": "Type d'activité",
"TECHNICAL_AGREMENT": "Agrément technique", "TECHNICAL_AGREMENT": "Agrément technique ou Licence",
"IMMATRICULATION_DGI": "Immatriculation DGI", "IMMATRICULATION_DGI": "NIU",
"INFORMATION_FICHE_CIRCUIT": "Information fiche circuit", "INFORMATION_FICHE_CIRCUIT": "Fiche d'identification",
"OTHERS_INFORMATIONS": "Autres informations", "OTHERS_INFORMATIONS": "Autres informations",
"CREATE_GROUP": "Créer un groupe", "CREATE_GROUP": "Créer un groupe",
"MANAGE_GROUP": "Gérer le groupe", "MANAGE_GROUP": "Gérer le groupe",
@ -285,6 +285,8 @@
"IMAGE_TAKE": "Prise d'image", "IMAGE_TAKE": "Prise d'image",
"NAME": "Nom(s)", "NAME": "Nom(s)",
"FIRSTNAME": "Prénom(s) ", "FIRSTNAME": "Prénom(s) ",
"CIVILITY": "Civilité",
"NATIONALITY": "Nationalité",
"NAME_EMETTEUR": "Nom(s) émetteur", "NAME_EMETTEUR": "Nom(s) émetteur",
"EMETTEUR": "Emetteur", "EMETTEUR": "Emetteur",
"FIRSTNAME_EMETTEUR": "Prénom(s) émetteur", "FIRSTNAME_EMETTEUR": "Prénom(s) émetteur",
@ -301,15 +303,15 @@
"SUPER_ADMIN": "Super administrateur", "SUPER_ADMIN": "Super administrateur",
"GEOLOCATED": "Agent géo-localisé", "GEOLOCATED": "Agent géo-localisé",
"DELETE_GEOLOCATED_USER": "Supprimer", "DELETE_GEOLOCATED_USER": "Supprimer",
"ADDRESS": "Adresse", "ADDRESS": "Adresse EX:TotalEnergies Bonateki",
"CREDIT": "Crédit", "CREDIT": "Crédit",
"NEXT": "Suivant", "NEXT": "Suivant",
"PREVIOUS": "Précédent", "PREVIOUS": "Précédent",
"SPONSOR_CODE": "Code réseau de taxe", "SPONSOR_CODE": "Code classe de taxes",
"CODE_PARRAIN": "Code parrain", "CODE_PARRAIN": "Code hiérarchique ou taxe",
"CODE_SPONSOR": "Code sponsor", "CODE_SPONSOR": "Code sponsor",
"SOLDE_UNVAIBLE": "solde non disponible", "SOLDE_UNVAIBLE": "solde non disponible",
"TEXT_BIG_CREATE_AGENT_1": "Inscrivez-vous en tant qu'agent", "TEXT_BIG_CREATE_AGENT_1": "Créer un acteur",
"EMAIL": "Email", "EMAIL": "Email",
"COUNTRY": "Pays", "COUNTRY": "Pays",
"LOADING_INFO": "Chargement des informations...", "LOADING_INFO": "Chargement des informations...",
@ -384,7 +386,7 @@
"OK": "OK", "OK": "OK",
"SIMPLE": "Simple", "SIMPLE": "Simple",
"BLOCKED": "Bloqué", "BLOCKED": "Bloqué",
"APP_FULLNAME": "Ilink City", "APP_FULLNAME": "SIM_ba Mobile",
"GUIDE_TITLE": "Bienvenue dans le Guide de", "GUIDE_TITLE": "Bienvenue dans le Guide de",
"GUIDE_USER_SIMPLE": "Guide pour un utilisateur", "GUIDE_USER_SIMPLE": "Guide pour un utilisateur",
"GUIDE_AGENT": "Guide pour un agent", "GUIDE_AGENT": "Guide pour un agent",
@ -424,9 +426,9 @@
"TEXT_GUIDE_USER_11": "Cliquez sur l'option de profil pour avoir des informations lier à votre compte", "TEXT_GUIDE_USER_11": "Cliquez sur l'option de profil pour avoir des informations lier à votre compte",
"CATEGORY": "Catégorie", "CATEGORY": "Catégorie",
"WAY": "Itinéraire", "WAY": "Itinéraire",
"ADD_NETWORK": "Ajouter réseau de taxe", "ADD_NETWORK": "Ajouter une classe de taxes",
"POINT_NUMBER": "Nombres de points", "POINT_NUMBER": "Nombres de points",
"SUPERIOR_CODE": "Code parrain", "SUPERIOR_CODE": "Code hiérarchique ou taxe",
"ADD_SUCCES": "Ajout reussi", "ADD_SUCCES": "Ajout reussi",
"ADD_SUCCESS_TEXT": "La taxe a été ajoutée avec succès ", "ADD_SUCCESS_TEXT": "La taxe a été ajoutée avec succès ",
"MEMBER_CODE": "Code membre", "MEMBER_CODE": "Code membre",
@ -457,7 +459,6 @@
"CHOOSE_LANGUAGE": "Choisir la langue", "CHOOSE_LANGUAGE": "Choisir la langue",
"MODIFY_PASSWORD": "Mot de passe oublié", "MODIFY_PASSWORD": "Mot de passe oublié",
"CONTACT": "Contact", "CONTACT": "Contact",
"UPDATE": "... mise à jour",
"FAQ": "FAQ", "FAQ": "FAQ",
"UPDATE_POSITION_TEXT": "Mettre à jour ma position", "UPDATE_POSITION_TEXT": "Mettre à jour ma position",
"YOU_ARE": "Vous êtes ?", "YOU_ARE": "Vous êtes ?",
@ -543,8 +544,8 @@
"MEMBERSHIP_REQUEST": "Demandes d'adhésion", "MEMBERSHIP_REQUEST": "Demandes d'adhésion",
"HISTORY_TYPE_REQUEST": "Requêtes", "HISTORY_TYPE_REQUEST": "Requêtes",
"TREAT": "Traité", "TREAT": "Traité",
"EXIT_TITLE": "Fermer iLink City !", "EXIT_TITLE": "Fermer SIM_ba Mobile !",
"EXIT_DESC": "Voulez-vous vraiment fermer iLink City ?", "EXIT_DESC": "Voulez-vous vraiment fermer SIM_ba Mobile ?",
"NO_TREAT": "Non traité", "NO_TREAT": "Non traité",
"EXIT": "Fermer", "EXIT": "Fermer",
"PERIOD": "Période", "PERIOD": "Période",
@ -557,7 +558,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Votre compte a été activé avec succès !", "ACCOUNT_ACTIVATE_TEXT": "Votre compte a été activé avec succès !",
"HISTORY_END": "Fin", "HISTORY_END": "Fin",
"DONT_VALIDATE_ACCOUNT": "Compte non validé", "DONT_VALIDATE_ACCOUNT": "Compte non validé",
"CONNEXION_SUCCESSFULL_TEXT": "Connexion réussie. Bienvenue dans iLink City ! ", "CONNEXION_SUCCESSFULL_TEXT": "Connexion réussie. Bienvenue dans SIM_ba Mobile ! ",
"UNVALIDATE_ACCOUNT_TEXT": "Votre hyperviseur n'a pas encore validé votre compte", "UNVALIDATE_ACCOUNT_TEXT": "Votre hyperviseur n'a pas encore validé votre compte",
"TEXT_NEED_POSITION": "Veuillez mettre à jour votre position !", "TEXT_NEED_POSITION": "Veuillez mettre à jour votre position !",
"TITLE_NEED_POSITION": "Votre position doit être mise à jour", "TITLE_NEED_POSITION": "Votre position doit être mise à jour",
@ -570,12 +571,12 @@
"TITLE_PROBLE_COME": "Un problème a été rencontré", "TITLE_PROBLE_COME": "Un problème a été rencontré",
"TITLE_SUPPRESS_CONFIRM": "Confirmation de suppression", "TITLE_SUPPRESS_CONFIRM": "Confirmation de suppression",
"TEXT_SUPPRESS_CONFIRM": "Voulez vous vraiment supprimer cet utilisateur ?", "TEXT_SUPPRESS_CONFIRM": "Voulez vous vraiment supprimer cet utilisateur ?",
"TEXT_ERROR_START_APPLICATION": "Une erreur est survenue au démarrage de iLink City. Veuillez relancer iLink City", "TEXT_ERROR_START_APPLICATION": "Une erreur est survenue au démarrage de SIM_ba Mobile. Veuillez relancer SIM_ba Mobile",
"TEXT_UNABLE_TO_GET_YOUR_POSITION": "Impossible de recupérez votre position. Veuillez verifier que votre GPS est activé et relancez iLink City", "TEXT_UNABLE_TO_GET_YOUR_POSITION": "Impossible de recupérez votre position. Veuillez verifier que votre GPS est activé et relancez SIM_ba Mobile",
"RESTART": "RECOMMENCER", "RESTART": "RECOMMENCER",
"TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Impossible de recupérer les informations de votre pays. Verifiez votre connexion internet ! cliquez sur \"Ok\" pour reessayer", "TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Impossible de recupérer les informations de votre pays. Verifiez votre connexion internet ! cliquez sur \"Ok\" pour reessayer",
"TITLE_UNABLE_TO_AUTORISE": "Echec de l'autorisation", "TITLE_UNABLE_TO_AUTORISE": "Echec de l'autorisation",
"MISSING_AUTORISATION_LOCATION": "iLink City n'est pas autorisé à acceder à votre position. Veuillez autoriser iLink City à accéder à votre localisation et relancez iLink City", "MISSING_AUTORISATION_LOCATION": "SIM_ba Mobile n'est pas autorisé à acceder à votre position. Veuillez autoriser SIM_ba Mobile à accéder à votre localisation et relancez SIM_ba Mobile",
"TEXT_FORGOTTEN_PASSWORD": "Saisissez votre identifiant,nous vous enverrons un nouveau mot de passe\n", "TEXT_FORGOTTEN_PASSWORD": "Saisissez votre identifiant,nous vous enverrons un nouveau mot de passe\n",
"TEXT_NETWORK_UNABLE": "Réseau non disponible, voulez vous réessayer ?", "TEXT_NETWORK_UNABLE": "Réseau non disponible, voulez vous réessayer ?",
"LOADING_TEXT_MARKERS": "Suite des points ", "LOADING_TEXT_MARKERS": "Suite des points ",
@ -584,10 +585,10 @@
"LAUNCH_POINT_WITH_FILTER": "Voulez-vous relancer la recherche dans un rayon de ", "LAUNCH_POINT_WITH_FILTER": "Voulez-vous relancer la recherche dans un rayon de ",
"LOADING_TEXT_MARKERS_2": "autour", "LOADING_TEXT_MARKERS_2": "autour",
"UNABLE_GET_INFORMATION": "Problème de récuperation des Informations", "UNABLE_GET_INFORMATION": "Problème de récuperation des Informations",
"UNABLE_GET_INFORMATION_TEXT": "Vérifiez que votre GPS est activé et mis en mode haute precision et relancez iLink City", "UNABLE_GET_INFORMATION_TEXT": "Vérifiez que votre GPS est activé et mis en mode haute precision et relancez SIM_ba Mobile",
"TITLE_HELP_SOON": "Aide non disponible !", "TITLE_HELP_SOON": "Aide non disponible !",
"YOUR_NETWORK": "Sélectionner votre réseau", "YOUR_NETWORK": "Sélectionner votre réseau",
"YOUR_NETWORK_SELECTED": "Votre réseau", "YOUR_NETWORK_SELECTED": "Classe de la taxe",
"UNIT_PER_TAXE_UNIT_COUNT": "Taxe par unité", "UNIT_PER_TAXE_UNIT_COUNT": "Taxe par unité",
"HELP_SOON": "Un tutoriel vous aidant dans la compréhension des fonctionnalités de l'application vous sera bientôt mis à disposition.", "HELP_SOON": "Un tutoriel vous aidant dans la compréhension des fonctionnalités de l'application vous sera bientôt mis à disposition.",
"UPLOAD_PHOTO": "Chargement de la photo", "UPLOAD_PHOTO": "Chargement de la photo",
@ -598,23 +599,21 @@
"ORDRE_RECETTE": "Ordre recette", "ORDRE_RECETTE": "Ordre recette",
"NO_ORDRE_RECETTE": "Aucun ordre de recette", "NO_ORDRE_RECETTE": "Aucun ordre de recette",
"MODIFICATION_ORDRE_RECETTE": "Modifier ordre recette", "MODIFICATION_ORDRE_RECETTE": "Modifier ordre recette",
"SAISIE_NUMERO_QUITANCE": "Saisir numéro quitance", "SAISIE_NUMERO_QUITANCE": "Saisir numéro quittance",
"MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quitance", "MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quittance",
"SAISIR_QUITANCE": "Saisir quitance", "SAISIR_QUITANCE": "Saisir paiement ou quittance",
"CODE_AGENT": "Code agent ", "CODE_AGENT": "Code agent ",
"AVIS_IMPOSITION": "Déclaration", "AVIS_IMPOSITION": "Déclaration",
"AGENT_INFORMATION": "Informations sur l'agent", "AGENT_INFORMATION": "Informations sur l'agent",
"UPDATE_DATE": "Date de mis à jour",
"ASSIGN_TO_AGENT": "Assigner à un agent", "ASSIGN_TO_AGENT": "Assigner à un agent",
"AVIS_MODIFY_SUCCESS": "Avis modifié avec succès", "AVIS_MODIFY_SUCCESS": "Avis modifié avec succès",
"ORDRE_RECETTE_SUCCES": "Ordre de recette saisi avec succès", "NUMERO_QUITANCE_SUCCES": "Numéro de quittance enregistré avec succès",
"NUMERO_QUITANCE_SUCCES": "Numéro de quitance enregistré avec succès",
"ORDRE_RECETTE_MODIFY_SUCCES": "Numéro ordre de recette modifié avec succès", "ORDRE_RECETTE_MODIFY_SUCCES": "Numéro ordre de recette modifié avec succès",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Numéro de quitance modifié avec succès", "NUMERO_QUITANCE_MODIFY_SUCCES": "Numéro de quittance modifié avec succès",
"TAXES_SUR_LA_PROPRETE": "Taxe sur la propreté", "TAXES_SUR_LA_PROPRETE": "Impôt général synthétique *",
"SAVE": "Enregistrer", "SAVE": "Enregistrer",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Voulez vous vraiment supprimer cette taxe?", "TEXT_SUPPRESS_CONFIRM_TAXE": "Voulez vous vraiment supprimer cette taxe?",
"NUMERO_QUITANCE": "Numéro quitance", "NUMERO_QUITANCE": "Numéro quittance",
"QUITANCE": "Quitance", "QUITANCE": "Quitance",
"ORDRE_DE_RECETTE": "Ordre de recette", "ORDRE_DE_RECETTE": "Ordre de recette",
"MODIFY_ORDRE_DE_RECETTE": "Modifier ordre de recette", "MODIFY_ORDRE_DE_RECETTE": "Modifier ordre de recette",
@ -643,12 +642,11 @@
"TYPE": "Type", "TYPE": "Type",
"CODE_MEMBRE": "Code sponsor", "CODE_MEMBRE": "Code sponsor",
"DISTRICT": "District", "DISTRICT": "District",
"IDENTIFICATION_NUMBER": "Numéro d'identification",
"MUNICIPALITY": "Municipalité", "MUNICIPALITY": "Municipalité",
"ID_PATENTE": "ID patente", "ID_PATENTE": "ID patente",
"NETWORK_ID": "ID du réseau", "NETWORK_ID": "ID du réseau",
"NEIGHTBORHOOD": "Quartier", "NEIGHTBORHOOD": "Quartier",
"ORDRE_RECETTE_RECEIPT": "Recette et quitance", "ORDRE_RECETTE_RECEIPT": "Recette et quittance",
"HISTORY_OF": "Historique des", "HISTORY_OF": "Historique des",
"AVIS_IMPOSITIONS": "déclarations", "AVIS_IMPOSITIONS": "déclarations",
"ORDRE_RECETTES_RECEIPTS": "recettes et quitances", "ORDRE_RECETTES_RECEIPTS": "recettes et quitances",
@ -656,7 +654,7 @@
"PRINCIPAL_AMOUNT": "Montant principal", "PRINCIPAL_AMOUNT": "Montant principal",
"DATE_AVIS_IMPOSITION": "Date avis imposition", "DATE_AVIS_IMPOSITION": "Date avis imposition",
"TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "Ce réseau n'est pas actif, veuillez choisir un autre", "TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "Ce réseau n'est pas actif, veuillez choisir un autre",
"ENTER_SPONSOR_CODE": "Renseignez votre code parrain", "ENTER_SPONSOR_CODE": "Renseignez votre code hiérarchique ou taxe",
"NOM_SOCIETE": "Nom de la société", "NOM_SOCIETE": "Nom de la société",
"TAKE_My_POSITION": "Récupération de votre position", "TAKE_My_POSITION": "Récupération de votre position",
"CREATE_ACTIF": "Créer un actif", "CREATE_ACTIF": "Créer un actif",
@ -692,7 +690,6 @@
"ACTIF": "actif", "ACTIF": "actif",
"ACTIFS": "actifs", "ACTIFS": "actifs",
"TAXE_INFORMATION": "Informations sur la déclaration", "TAXE_INFORMATION": "Informations sur la déclaration",
"ACTIFS": "actifs",
"NUMERO_AVIS_IMPOSITION": "N° déclaration", "NUMERO_AVIS_IMPOSITION": "N° déclaration",
"ADD_ORDRE_RECETTE": "Ajouter un ordre de recette", "ADD_ORDRE_RECETTE": "Ajouter un ordre de recette",
"PENALITE_ON_TAXE": "Pénalité sur les taxes", "PENALITE_ON_TAXE": "Pénalité sur les taxes",
@ -705,14 +702,14 @@
"DELETE_PENALITE": "Supprimer la pénalité", "DELETE_PENALITE": "Supprimer la pénalité",
"TAUX_PENALITE": "Taux de pénalité (%)", "TAUX_PENALITE": "Taux de pénalité (%)",
"TAUX": "Taux", "TAUX": "Taux",
"NO_ORDRE_RECETTE_WITH_QUITANCE": "Aucun ordre de recette sans quitance", "NO_ORDRE_RECETTE_WITH_QUITANCE": "Aucun ordre de recette sans quittance",
"SAVE_PENALITY": "Taux", "SAVE_PENALITY": "Taux",
"SAISIE_PENALITY": "Saisie des pénalités", "SAISIE_PENALITY": "Saisie des pénalités",
"MODIFICATION_SAISIE_PENALITY": "Modification/Suppression", "MODIFICATION_SAISIE_PENALITY": "Modification/Suppression",
"YOU_HAVE_DEFINED_PENALITY_FOR_THIS_YEAR": "Vous avez déjà définit une pénalité pour les années suivantes:", "YOU_HAVE_DEFINED_PENALITY_FOR_THIS_YEAR": "Vous avez déjà définit une pénalité pour les années suivantes:",
"AMOUNT_ORDRE_RECETTE": "Montant de l'ordre de recette", "AMOUNT_ORDRE_RECETTE": "Montant de l'ordre de recette",
"AMOUNT_TAX_NOTICE": "Montant de la déclaration", "AMOUNT_TAX_NOTICE": "Montant de la déclaration",
"YOU_CANT_DELETE_LAST_TAX_NOTICE": "Une quitance doit contenir au moins un ordre de recette", "YOU_CANT_DELETE_LAST_TAX_NOTICE": "Une quittance doit contenir au moins un ordre de recette",
"WOULD_YOU_WANT_SEARCH_BY_NAME": "Voulez-vous rechercher l'usager par son nom ?", "WOULD_YOU_WANT_SEARCH_BY_NAME": "Voulez-vous rechercher l'usager par son nom ?",
"USAGER_NAME": "Nom de l'usager", "USAGER_NAME": "Nom de l'usager",
"NO_USAGER_CORRESPONDING_TO_SEARCH": "Aucun usager ne correspond à votre recherche", "NO_USAGER_CORRESPONDING_TO_SEARCH": "Aucun usager ne correspond à votre recherche",
@ -727,9 +724,8 @@
"PENALITE_INCLUSE": "Pénalité incluse", "PENALITE_INCLUSE": "Pénalité incluse",
"SOINS": "Soins", "SOINS": "Soins",
"INVOICE": "Facture", "INVOICE": "Facture",
"ORDRE_RECETTE_QUITANCE": "Ordre et quitance", "ORDRE_RECETTE_QUITANCE": "Ordre et quittance",
"ID": "ID", "ID": "ID",
"CONNEXION_CHOICE": "Choix de connexion", "CONNEXION_CHOICE": "Choix de connexion",
"CONNEXION_CHOICE_DESCRIPTION": "Un compte agent de recharge est associé à votre numéro. Voulez vous continuer en tant que agent recharge ?" "CONNEXION_CHOICE_DESCRIPTION": "Un compte agent de recharge est associé à votre numéro. Voulez vous continuer en tant que agent recharge ?"
} }

View File

@ -1,3 +1,5 @@
<resources> <resources>
<string name="app_name">Douala3 Test</string> <!-- TODO: Switch from test to prod and vice versa -->
<string name="app_name">Test SIM_ba mobile CAD3</string>
<!-- <string name="app_name">SIM_ba mobile CAD3</string> -->
</resources> </resources>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -324,7 +324,7 @@ const WebviewScreen = ({
const params = queryString.parse(webViewState.url); const params = queryString.parse(webViewState.url);
let transaction_id = ''; let transaction_id = '';
let token = ''; let token = null;
const keys = Object.keys(params); const keys = Object.keys(params);
keys.forEach(elt => { keys.forEach(elt => {
if (elt.includes('transaction_id')) transaction_id = params[elt]; if (elt.includes('transaction_id')) transaction_id = params[elt];

View File

@ -19,6 +19,7 @@ import {ProgressDialog} from "react-native-simple-dialogs";
import axios from "axios"; import axios from "axios";
import {uploadImage} from "../../webservice/IlinkConstants"; import {uploadImage} from "../../webservice/IlinkConstants";
import Dialog from "react-native-dialog"; import Dialog from "react-native-dialog";
import FilteredList from "../login/FilteredList ";
let theme = require('./../../utils/theme.json'); let theme = require('./../../utils/theme.json');
@ -115,7 +116,10 @@ export default class AddNetwork extends Component {
displayImage: false, displayImage: false,
loadingUpload: false, loadingUpload: false,
item: this.props.navigation.getParam("item", null), item: this.props.navigation.getParam("item", null),
password: null password: null,
neighborhood: null,
building_value: [],
built: [false]
} }
} }
@ -219,6 +223,14 @@ export default class AddNetwork extends Component {
} }
renderTaxesDropdown = (index) => { renderTaxesDropdown = (index) => {
const selectedNeighbourhood = this.state.result && this.state.result.neighborhoods
? this.state.result.neighborhoods.find(n => n.name === this.state.neighborhood)
: null;
const mercurialValue = selectedNeighbourhood
? (this.state.built[index]
? selectedNeighbourhood.mercur_built_value
: selectedNeighbourhood.mercur_unbuilt_value)
: null;
return ( return (
<> <>
<Animatable.View key={index}> <Animatable.View key={index}>
@ -348,6 +360,65 @@ export default class AddNetwork extends Component {
</> : </> :
null null
} }
{
!isNil(this.state.taxes_selected[index]) &&
this.state.taxes_selected[index].name?.toLowerCase() === 'taxe sur la propriété' && (
<>
<Animatable.View>
<View
style={{
width: responsiveWidth(90),
alignSelf: 'center',
backgroundColor: 'white',
borderRadius: 10,
marginTop: 20,
paddingLeft: 20,
paddingRight: 20,
}}>
<Dropdown
label={I18n.t('BUILDING_CONSTRUCTED')}
data={[{value: 'Non'}, {value: 'Oui'}]}
value={this.state.built[index] ? 'Oui' : 'Non'}
onChangeText={value => {
const built = [...this.state.built];
built[index] = value === 'Oui';
this.setState({built});
}}
/>
</View>
</Animatable.View>
{mercurialValue != null && (
<Text
style={{
marginTop: 5,
marginLeft: responsiveWidth(6),
fontSize: 16,
color: '#fff',
}}>
{`${I18n.t('MERCURIAL_VALUE')}: ${mercurialValue}`}
</Text>
)}
{this.state.built[index] && (
<Animatable.View>
<Fumi
iconClass={FontAwesomeIcon}
iconName="building"
label={I18n.t('CONSTRUCTION_VALUE')}
iconColor="#f95a25"
iconSize={20}
keyboardType="decimal-pad"
style={styles.input}
onChangeText={value => {
const building_value = [...this.state.building_value];
building_value[index] = value;
this.setState({building_value});
}}
/>
</Animatable.View>
)}
</>
)
}
{ {
!isNil(this.state.taxes_selected[index]) ? !isNil(this.state.taxes_selected[index]) ?
this.state.taxes_selected[index].billing_period === 'jour' && this.state.taxes_selected[index].billing_period === 'jour' &&
@ -408,6 +479,9 @@ export default class AddNetwork extends Component {
render() { render() {
const hasPropertyTax = this.state.taxes_selected.some(
t => t && t.name?.toLowerCase() === 'taxe sur la propriété'
);
return ( return (
<View style={style.container}> <View style={style.container}>
<StatusBar <StatusBar
@ -420,7 +494,10 @@ export default class AddNetwork extends Component {
<ScrollView style={{flex: 1, paddingTop: 30}}> <ScrollView style={{flex: 1, paddingTop: 30}}>
<View style={style.appContainer}> <View style={style.appContainer}>
<Image source={require('../../assets/img/icon3.png')} <Image source={require('../../assets/img/icon3.png')}
style={{width: responsiveWidth(90), resizeMode: "contain"}}/> style={{width: responsiveWidth(90), resizeMode: "contain",
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
}}/>
</View> </View>
<Text style={style.title}>{I18n.t('ADD_NETWORK')}</Text> <Text style={style.title}>{I18n.t('ADD_NETWORK')}</Text>
@ -440,6 +517,17 @@ export default class AddNetwork extends Component {
</> : </> :
<> <>
{this.renderTaxesDropdown(0)} {this.renderTaxesDropdown(0)}
{hasPropertyTax && (
<Animatable.View>
<FilteredList
items={this.state.result.neighborhoods}
placeholder={I18n.t('FIND_A_NEIGHBORHOOD')}
onItemSelect={selectedItem => {
this.setState({neighborhood: selectedItem.name});
}}
/>
</Animatable.View>
)}
{ {
this.state.tabTaxe.map((element, index) => ( this.state.tabTaxe.map((element, index) => (
index > 0 && index > 0 &&
@ -493,6 +581,7 @@ export default class AddNetwork extends Component {
this.setState({isLoading: false}); this.setState({isLoading: false});
}); });
} else { } else {
console.log("ICI===>")
if (this.ckeckIfFieldIsOK(this.state.password)) if (this.ckeckIfFieldIsOK(this.state.password))
this.passwordAnim.shake(800); this.passwordAnim.shake(800);
else else
@ -513,26 +602,38 @@ export default class AddNetwork extends Component {
for (let i = 0; i < this.state.tabTaxe.length; i++) { for (let i = 0; i < this.state.tabTaxe.length; i++) {
if (this.state.taxes_selected[i].hasOwnProperty("id")) { if (this.state.taxes_selected[i].hasOwnProperty("id")) {
if (this.state.taxes_selected[i].has_image_capture === "1") { if (this.state.taxes_selected[i].has_image_capture === "1") {
taxes_to_send.push({ let taxe = {
has_image_capture: this.state.taxes_selected[i].has_image_capture, has_image_capture: this.state.taxes_selected[i].has_image_capture,
image: this.state.taxes_selected[i].image, image: this.state.taxes_selected[i].image,
id_network_tax: this.state.taxes_selected[i].id, id_network_tax: this.state.taxes_selected[i].id,
name: this.state.taxes_selected[i].name,
tax_units_count: isNil(this.state.tax_units_count[i]) ? null : this.state.tax_units_count[i], tax_units_count: isNil(this.state.tax_units_count[i]) ? null : this.state.tax_units_count[i],
units_per_tax_unit_count: isNil(this.state.units_per_tax_unit_count[i]) ? null : this.state.units_per_tax_unit_count[i], units_per_tax_unit_count: isNil(this.state.units_per_tax_unit_count[i]) ? null : this.state.units_per_tax_unit_count[i],
number_of_days: isNil(this.state.number_of_days[i]) ? null : this.state.number_of_days[i], number_of_days: isNil(this.state.number_of_days[i]) ? null : this.state.number_of_days[i],
}); };
if (this.state.taxes_selected[i].name?.toLowerCase() === 'taxe sur la propriété') {
taxe.building_value = isNil(this.state.building_value[i]) ? null : this.state.building_value[i];
taxe.built = this.state.built[i];
}
taxes_to_send.push(taxe);
} else { } else {
taxes_to_send.push({ let taxe = {
has_image_capture: this.state.taxes_selected[i].has_image_capture, has_image_capture: this.state.taxes_selected[i].has_image_capture,
id_network_tax: this.state.taxes_selected[i].id, id_network_tax: this.state.taxes_selected[i].id,
name: this.state.taxes_selected[i].name,
tax_units_count: isNil(this.state.tax_units_count[i]) ? null : this.state.tax_units_count[i], tax_units_count: isNil(this.state.tax_units_count[i]) ? null : this.state.tax_units_count[i],
units_per_tax_unit_count: isNil(this.state.units_per_tax_unit_count[i]) ? null : this.state.units_per_tax_unit_count[i], units_per_tax_unit_count: isNil(this.state.units_per_tax_unit_count[i]) ? null : this.state.units_per_tax_unit_count[i],
number_of_days: isNil(this.state.number_of_days[i]) ? null : this.state.number_of_days[i], number_of_days: isNil(this.state.number_of_days[i]) ? null : this.state.number_of_days[i],
}); };
if (this.state.taxes_selected[i].name?.toLowerCase() === 'taxe sur la propriété') {
taxe.building_value = isNil(this.state.building_value[i]) ? null : this.state.building_value[i];
taxe.built = this.state.built[i];
}
taxes_to_send.push(taxe);
} }
} }
} }
let res = await AssignAgentGeo(validateCode, enterPhone, taxes_to_send, item.id_agent, password, item.id); let res = await AssignAgentGeo(validateCode, enterPhone, taxes_to_send, item.id_agent, password, item.id, this.state.neighborhood);
this.setState({isLoading: false}); this.setState({isLoading: false});
if (res) { if (res) {
if (res['success'] !== undefined) { if (res['success'] !== undefined) {
@ -596,8 +697,8 @@ const style = StyleSheet.create({
marginTop: 20, marginTop: 20,
borderColor: 'transparent', borderColor: 'transparent',
backgroundColor: theme.primaryDarkAdvanced, backgroundColor: theme.primaryDarkAdvanced,
height: responsiveHeight(8) height: responsiveHeight(8),
marginBottom: responsiveHeight(8) // espace ajouté en bas
}, },
appContainer: { appContainer: {
flexDirection: 'row', flexDirection: 'row',

View File

@ -52,7 +52,10 @@ export default class About extends React.Component {
<View style={{ flex: 6, alignItems: "center", justifyContent: "space-evenly" }}> <View style={{ flex: 6, alignItems: "center", justifyContent: "space-evenly" }}>
<Image resizeMode="contain" style={{ width: responsiveWidth(50), height: responsiveHeight(20) }} source={require("../../assets/img/ilinklogo.png")} /> <Image resizeMode="contain" style={{ width: responsiveWidth(50), height: responsiveHeight(20) }} source={require("../../assets/img/ilinklogo.png")} />
<Image resizeMode="contain" style={{ width: responsiveWidth(90) }} source={require("../../assets/img/icon3.png")} /> <Image resizeMode="contain" style={{ width: responsiveWidth(90),
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
}} source={require("../../assets/img/icon3.png")} />
<Text style={{ color: "white", margin: 10, fontSize: 15, alignSelf: "center" }}>{I18n.t("ABOUT_TEXT")}</Text> <Text style={{ color: "white", margin: 10, fontSize: 15, alignSelf: "center" }}>{I18n.t("ABOUT_TEXT")}</Text>
</View> </View>

View File

@ -105,6 +105,7 @@ const styles = StyleSheet.create({
}, },
img_style: { img_style: {
resizeMode: 'contain', resizeMode: 'contain',
width: responsiveWidth(90) width: responsiveWidth(90),
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
} }
}); });

View File

@ -521,8 +521,9 @@ class Home extends BaseScreen {
} }
createUsagerAccounts = (usagers) => { createUsagerAccounts = (usagers) => {
console.log("createGeolocatedAccounts===>>",JSON.stringify(usagers));
createGeolocatedAccounts(usagers).then((result) => { createGeolocatedAccounts(usagers).then((result) => {
console.log("result", result); console.log("resultcreateGeolocatedAccounts===>>", result);
this.setState({displaySynchronizeLoader: false}); this.setState({displaySynchronizeLoader: false});
if (!_.isNil(result)) { if (!_.isNil(result)) {
@ -556,6 +557,7 @@ class Home extends BaseScreen {
} }
createActifsAccounts = (actifs) => { createActifsAccounts = (actifs) => {
console.log("createActifsAccounts===>>",actifs)
saveActifsSociety(actifs).then((result) => { saveActifsSociety(actifs).then((result) => {
console.log("result", result); console.log("result", result);
this.setState({displaySynchronizeLoader: false}); this.setState({displaySynchronizeLoader: false});
@ -634,6 +636,7 @@ class Home extends BaseScreen {
usagersToSend.push(usagersToSave[index].data); usagersToSend.push(usagersToSave[index].data);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) { if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
console.log("Isco2===>>", usagersToSend);
this.createUsagerAccounts(usagersToSend); this.createUsagerAccounts(usagersToSend);
} }
console.warn("USAGERS FORMATE", usagersToSave); console.warn("USAGERS FORMATE", usagersToSave);
@ -663,6 +666,7 @@ class Home extends BaseScreen {
usagersToSend.push(usagersToSave[index].data); usagersToSend.push(usagersToSave[index].data);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) { if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
console.log("Isco3===>>", usagersToSend);
this.createUsagerAccounts(usagersToSend); this.createUsagerAccounts(usagersToSend);
} }
console.warn("USAGERS FORMATE", usagersToSave); console.warn("USAGERS FORMATE", usagersToSave);
@ -673,9 +677,10 @@ class Home extends BaseScreen {
} else } else
usagersToSend.push(usagersToSave[index].data); usagersToSend.push(usagersToSave[index].data);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) { // if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
this.createUsagerAccounts(usagersToSend); // console.log("Isco4===>>", usagersToSend);
} // this.createUsagerAccounts(usagersToSend);
// }
} }
@ -686,6 +691,7 @@ class Home extends BaseScreen {
console.log("Usagers to save length", (usagersToSave.filter((usager) => !usager.isSaved)).length); console.log("Usagers to save length", (usagersToSave.filter((usager) => !usager.isSaved)).length);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) { if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
console.log("Isco5===>>", usagersToSend);
this.createUsagerAccounts(usagersToSend); this.createUsagerAccounts(usagersToSend);
} }
} }
@ -720,6 +726,8 @@ class Home extends BaseScreen {
actif.data.taxes.map((taxe, indexTaxe) => { actif.data.taxes.map((taxe, indexTaxe) => {
console.log("Usagers to send length", actifsToSend.length); console.log("Usagers to send length", actifsToSend.length);
console.log("Usagers To save", actifsToSave.filter((usager) => !usager.isSaved).length); console.log("Usagers To save", actifsToSave.filter((usager) => !usager.isSaved).length);
console.log("taxe.has_image_capture", taxe.has_image_capture);
console.log("taxe.has_image_capture", taxe.has_image_capture === "1");
if (taxe.has_image_capture === "1") { if (taxe.has_image_capture === "1") {
this.createFormData(taxe.image); this.createFormData(taxe.image);
this.uploadImage().then((response) => { this.uploadImage().then((response) => {
@ -738,6 +746,8 @@ class Home extends BaseScreen {
}); });
} else { } else {
actifsToSend.push(actif.data); actifsToSend.push(actif.data);
console.log("actifsToSend.push===>>",actif.data)
console.log("actifsToSend.length === (actifsToSave.filter((usager) => !usager.isSaved)).length",actifsToSend.length === (actifsToSave.filter((usager) => !usager.isSaved)).length)
if (actifsToSend.length === (actifsToSave.filter((usager) => !usager.isSaved)).length) if (actifsToSend.length === (actifsToSave.filter((usager) => !usager.isSaved)).length)
this.createActifsAccounts(actifsToSend); this.createActifsAccounts(actifsToSend);
} }
@ -2428,104 +2438,125 @@ class Home extends BaseScreen {
<MaterialDialog <MaterialDialog
title={I18n.t("SEARCH")} title={I18n.t("SEARCH")}
visible={this.state.dialogSearchUser} visible={this.state.dialogSearchUser}
onCancel={() => this.setState({dialogSearchUser: false})} onCancel={() => this.setState({ dialogSearchUser: false })}
onOk={result => { onOk={() => {
if(this.state.isPhoneAssureSearch) { console.log(
this.props.searchUserAction({ "On ok search user===>>",
dial_code: this.state.indicatif, this.state.userName,
phone: this.state.userName, this.state.indicatif,
this.state.isPhoneAssureSearch,
}, true); this.state.isNumeroAssureSearch
);
// Prépare le payload
const payload = { dial_code: this.state.indicatif };
if (this.state.isPhoneAssureSearch) {
payload.phone = this.state.userName;
} else if (this.state.isNumeroAssureSearch) {
payload.identification_number = this.state.userName;
} else { } else {
this.props.searchUserAction({ payload.name = this.state.userName;
dial_code: this.state.indicatif,
name: this.state.userName,
}, true);
} }
// Lance l'action
this.setState({dialogSearchUser: false}); this.props.searchUserAction(payload, true);
this.setState({ dialogSearchUser: false });
}} }}
> >
<View> <View>
<TextInput <TextInput
style={{marginTop: 10, height: 46, borderRadius: 5, borderWidth: 1, borderColor: "#ccc"}} style={{
placeholder={this.state.isPhoneAssureSearch ? I18n.t('PHONE') : I18n.t('NAME')} marginTop: 10, height: 46, borderRadius: 5, borderWidth: 1, borderColor: "#ccc"
value={this.state.userName}
keyboardType={this.state.isPhoneAssureSearch ? 'numeric' : 'default'}
onChangeText={(userName) => {
this.setState({userName});
}} }}
placeholder={
this.state.isPhoneAssureSearch
? I18n.t("PHONE")
: this.state.isNumeroAssureSearch
? I18n.t("IMMATRICULATION_DGI") // nouveau libellé à ajouter dans vos traductions
: I18n.t("NAME")
}
value={this.state.userName}
keyboardType={this.state.isPhoneAssureSearch ? "numeric" : "default"}
onChangeText={userName => this.setState({ userName })}
icon={ icon={
<FontAwesome <FontAwesome
style={{zIndex: 10}} style={{ zIndex: 10 }}
name={this.state.isPhoneAssureSearch ? 'phone' : 'user'} name={
this.state.isPhoneAssureSearch
? "phone"
: this.state.isNumeroAssureSearch
? "id-card" // icône FontAwesome5 pour le NIU
: "user"
}
size={20} size={20}
/> />
} }
/> />
<View style={{ <View
flexDirection: 'row', style={{
position: 'absolute', flexDirection: "row",
position: "absolute",
top: 22, top: 22,
right: 50, right: 20,
justifyContent: 'space-between',
width: 50
}}>
<FontAwesomeIcon
style={{paddingRight: 5}}
name='phone'
size={20}
color={Color.primaryColor}
onPress={() => {
this.setState({
isNumeroAssureSearch: false,
isPhoneAssureSearch: true
});
}} }}
/> >
{/* Mode téléphone */}
<FontAwesomeIcon <FontAwesomeIcon
style={{paddingRight: 5}} name="phone"
name='user'
size={20} size={20}
color={Color.primaryColor} color={this.state.isPhoneAssureSearch ? Color.primaryColor : "#888"}
onPress={() => { onPress={() =>
this.setState({ this.setState({
isNumeroAssureSearch: false, isPhoneAssureSearch: true,
isPhoneAssureSearch: false isNumeroAssureSearch: false
}); })
}} }
style={{ marginHorizontal: 5 }}
/> />
{/* Mode nom */}
<FontAwesomeIcon
name="user"
size={20}
color={
!this.state.isPhoneAssureSearch && !this.state.isNumeroAssureSearch
? Color.primaryColor
: "#888"
}
onPress={() =>
this.setState({
isPhoneAssureSearch: false,
isNumeroAssureSearch: false
})
}
style={{ marginHorizontal: 5 }}
/>
{/* Mode NIU */}
<FontAwesomeIcon
name="id-card"
size={20}
color={this.state.isNumeroAssureSearch ? Color.primaryColor : "#888"}
onPress={() =>
this.setState({
isPhoneAssureSearch: false,
isNumeroAssureSearch: true
})
}
style={{ marginHorizontal: 5 }}
/>
{/* Scanner QR */}
<FontAwesomeIcon <FontAwesomeIcon
style={{paddingRight: 5}}
name="qrcode" name="qrcode"
size={20} size={20}
color={Color.primaryColor} color={Color.primaryColor}
onPress={() => { onPress={() => this.setState({ showQRCodeScanner: true })}
this.setState({ style={{ marginHorizontal: 5 }}
showQRCodeScanner: true
});
}}
/> />
</View> </View>
</View> </View>
</MaterialDialog>
{/* <Fumi iconClass={FontAwesomeIcon} );
label={I18n.t('NAME')}
iconColor={'#f95a25'}
iconSize={20}
iconName={"user"}
value={this.state.userName}
onChangeText={(userName) => {
this.setState({userName});
}}
style={styles.input}
>
</Fumi>*/}
</MaterialDialog>)
} }
renderDialogResultSearchUser() { renderDialogResultSearchUser() {

View File

@ -126,7 +126,9 @@ export default class ActivateAccount extends Component {
alignItems: 'center', alignItems: 'center',
}}> }}>
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}> <View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}>
<Image style={{width: responsiveWidth(90), resizeMode: 'contain',}} <Image style={{width: responsiveWidth(90), resizeMode: 'contain',
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
}}
source={require('../../assets/img/icon3.png')}/> source={require('../../assets/img/icon3.png')}/>
</View> </View>
@ -177,7 +179,9 @@ export default class ActivateAccount extends Component {
alignItems: 'center', alignItems: 'center',
}}> }}>
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}> <View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}>
<Image style={{width: responsiveWidth(90), resizeMode: 'contain',}} <Image style={{width: responsiveWidth(90), resizeMode: 'contain',
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
}}
source={require('../../assets/img/icon3.png')}/> source={require('../../assets/img/icon3.png')}/>
</View> </View>
@ -284,7 +288,9 @@ export default class ActivateAccount extends Component {
alignItems: 'center', alignItems: 'center',
}}> }}>
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}> <View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}>
<Image style={{width: responsiveWidth(90), resizeMode: 'contain',}} <Image style={{width: responsiveWidth(90), resizeMode: 'contain',
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
}}
source={require('../../assets/img/icon3.png')}/> source={require('../../assets/img/icon3.png')}/>
</View> </View>

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { View, Text, TextInput, FlatList, TouchableOpacity } from 'react-native'; import { View, Text, TextInput, FlatList, TouchableOpacity } from 'react-native';
import { responsiveWidth} from 'react-native-responsive-dimensions'; import { responsiveWidth} from 'react-native-responsive-dimensions';
import I18n from "react-native-i18n";
class FilteredList extends Component { class FilteredList extends Component {
constructor(props) { constructor(props) {
@ -52,7 +53,7 @@ class FilteredList extends Component {
> >
<TextInput <TextInput
style={{ padding: 18, borderBottomWidth: 1 }} style={{ padding: 18, borderBottomWidth: 1 }}
placeholder="Quel est votre activité..." placeholder={this.props.placeholder || I18n.t('WHATS_YOUR_BUSINESS')}
value={searchTerm} value={searchTerm}
onChangeText={this.handleSearch} onChangeText={this.handleSearch}
onFilterChange={this.handleFilter} onFilterChange={this.handleFilter}

View File

@ -228,6 +228,7 @@ export default class ForgottenPassword extends Component{
iconName={'phone'} iconName={'phone'}
label={"Indicatif"} label={"Indicatif"}
style={styles.inputCode} style={styles.inputCode}
onChangeText={(text) => { this.setState({indicatif: text})}}
value={this.state.indicatif} value={this.state.indicatif}
iconColor={theme.accent} iconColor={theme.accent}
/> />
@ -250,10 +251,12 @@ export default class ForgottenPassword extends Component{
onRenitPassword() { onRenitPassword() {
if(this.state.phone.length>0){ if(this.state.phone.length>0){
console.log("Messi===>>")
if(this.props.navigation.state.params.type!==null){ if(this.props.navigation.state.params.type!==null){
let type= this.props.navigation.state.params.type === 0 ? 'user' : 'agent'; let type= this.props.navigation.state.params.type === 0 ? 'user' : 'agent';
console.log("Type user send", this.props.navigation.state.params.type); console.log("Type user send", this.props.navigation.state.params.type);
this.setState({isSending:true}); this.setState({isSending:true});
console.log("Messi===>>",this.state.indicatif+this.state.phone,type)
reinitpassword(this.state.indicatif+this.state.phone,type).then((data)=>{ reinitpassword(this.state.indicatif+this.state.phone,type).then((data)=>{
this.setState({isSending:false}) this.setState({isSending:false})

View File

@ -95,7 +95,8 @@ const log = StyleSheet.create({
img: { img: {
width: responsiveWidth(90), width: responsiveWidth(90),
resizeMode: 'contain', resizeMode: 'contain',
alignSelf: 'center' alignSelf: 'center',
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
}, },
title: { title: {
color: "white", color: "white",

View File

@ -17,7 +17,7 @@ import {responsiveHeight, responsiveWidth, responsiveFontSize} from 'react-nativ
import {Fumi, Kaede} from 'react-native-textinput-effects' import {Fumi, Kaede} from 'react-native-textinput-effects'
import * as Animatable from 'react-native-animatable' import * as Animatable from 'react-native-animatable'
import Button from 'apsl-react-native-button' import Button from 'apsl-react-native-button'
import {categoryChild, getCodeInformation, getSupervisorInfoCode} from './../../webservice/AuthApi' import {categoryChild, getCodeInformation, getSupervisorInfoCode, getSupervisorInfoCodeOffline} from './../../webservice/AuthApi'
let theme = require('./../../utils/theme.json') let theme = require('./../../utils/theme.json')
let route = require('./../../route.json') let route = require('./../../route.json')
@ -147,7 +147,18 @@ export default class CreateAccount extends Component {
this.checkCodeParrain() this.checkCodeParrain()
}}> }}>
{I18n.t('NEXT')}</Button> {I18n.t('NEXT')}</Button>
<View style={{display: 'flex', flexDirection: 'column'}}>
<Text style={styles.indication}>
<Text style={styles.indicationTitle}>
{I18n.t('HIERACHIC_CODE')} :
</Text>{' '}
{I18n.t('HIERACHIC_CODE_DESCRIPTION')}
</Text>
<Text style={styles.indication}>
<Text style={styles.indicationTitle}>{I18n.t('TAX_CODE')} :</Text>{' '}
{I18n.t('TAX_CODE_DESCRIPTION')}
</Text>
</View>
</ScrollView> </ScrollView>
); );
} }
@ -504,8 +515,19 @@ export default class CreateAccount extends Component {
} }
// retreiveSupervisorInfosCode() {
// getSupervisorInfoCode().then((result) => {
// console.warn("SUPERVISOR INFOS CODE", JSON.stringify(result));
// storeData(supervisorCode, JSON.stringify(result)).then(() => {
// this.setState({displayLoader: false});
// });
// }).catch(error => {
// //console.log(error);
// })
// }
retreiveSupervisorInfosCode() { retreiveSupervisorInfosCode() {
getSupervisorInfoCode().then((result) => { getSupervisorInfoCodeOffline().then((result) => {
console.warn("SUPERVISOR INFOS CODE", JSON.stringify(result)); console.warn("SUPERVISOR INFOS CODE", JSON.stringify(result));
storeData(supervisorCode, JSON.stringify(result)).then(() => { storeData(supervisorCode, JSON.stringify(result)).then(() => {
this.setState({displayLoader: false}); this.setState({displayLoader: false});
@ -603,7 +625,8 @@ export default class CreateAccount extends Component {
} else { } else {
let codeSupervisorsData = JSON.parse(codeSupervisor); let codeSupervisorsData = JSON.parse(codeSupervisor);
let codeSupervisors = Object.keys(codeSupervisorsData); let codeSupervisorsDataCodes = codeSupervisorsData.codes;
let codeSupervisors = Object.keys(codeSupervisorsData.codes);
this.setState({codeSupervisorsData}); this.setState({codeSupervisorsData});
if (!codeSupervisors.includes(user.member)) { if (!codeSupervisors.includes(user.member)) {
@ -616,8 +639,17 @@ export default class CreateAccount extends Component {
}], {cancelable: false}); }], {cancelable: false});
} else { } else {
this.setState({isLoging: false}); this.setState({isLoging: false});
let resultInfosCode = codeSupervisorsData[user.member]; let resultInfosCode = codeSupervisorsDataCodes[user.member];
this.setState({codeSupervisorData: resultInfosCode}); const completedResultInfosCode = {
...resultInfosCode,
companies_types:codeSupervisorsData.globals.companies_types ,
districts: codeSupervisorsData.globals.districts,
neighborhoods: codeSupervisorsData.globals.neighborhoods,
activities: codeSupervisorsData.globals.activities,
municipalities: codeSupervisorsData.globals.municipalities
};
this.setState({codeSupervisorData: completedResultInfosCode});
if (resultInfosCode.network.is_companies_network === "1" && resultInfosCode.child == "geolocated") { if (resultInfosCode.network.is_companies_network === "1" && resultInfosCode.child == "geolocated") {
this.props.navigation.push(route.createUserStep, { this.props.navigation.push(route.createUserStep, {
@ -746,6 +778,19 @@ const styles = StyleSheet.create({
textAlign: 'center', textAlign: 'center',
margin: 5, margin: 5,
}, },
indication: {
color: 'white',
fontSize: 14,
marginLeft: 20,
marginRight: 20,
marginBottom: 10,
},
indicationTitle: {
color: 'white',
fontSize: 14,
marginLeft: 20,
fontWeight: '600',
},
btnvalide: { btnvalide: {
marginTop: 20, marginTop: 20,
marginLeft: 20, marginLeft: 20,

View File

@ -1,4 +1,9 @@
import React, {Component, useState} from 'react'; import Button from 'apsl-react-native-button';
import axios from "axios";
import isEqual from 'lodash/isEqual';
import isNil from 'lodash/isNil';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { import {
Alert, Alert,
BackHandler, BackHandler,
@ -13,20 +18,22 @@ import {
TouchableOpacity, TouchableOpacity,
View View
} from 'react-native'; } from 'react-native';
import PropTypes from 'prop-types';
import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome';
import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions';
import {Fumi} from 'react-native-textinput-effects'
import * as Animatable from 'react-native-animatable'; import * as Animatable from 'react-native-animatable';
import Button from 'apsl-react-native-button'; import Dialog from "react-native-dialog";
import MapView, {Marker} from 'react-native-maps'; import Geolocation from 'react-native-geolocation-service';
import {Dropdown} from 'react-native-material-dropdown-v2'; import I18n from 'react-native-i18n';
import isEqual from 'lodash/isEqual'; import MapView, { Marker } from 'react-native-maps';
import isNil from 'lodash/isNil'; import { MaterialDialog } from "react-native-material-dialog";
import {getPositionInformation} from './../../webservice/MapService'; import { Dropdown } from 'react-native-material-dropdown-v2';
import I18n from 'react-native-i18n' import { responsiveHeight, responsiveWidth } from 'react-native-responsive-dimensions';
import {material} from 'react-native-typography'; import { ProgressDialog } from "react-native-simple-dialogs";
import { Fumi } from 'react-native-textinput-effects';
import { material } from 'react-native-typography';
import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome';
import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
import { store } from "../../redux/store";
import { getDefaultTown } from "../../webservice/AuthApi";
import { uploadImage } from "../../webservice/IlinkConstants";
import { import {
createGeolocatedAccount, createGeolocatedAccount,
createUserAccount, createUserAccount,
@ -35,17 +42,7 @@ import {
getListCountriesActive, getListCountriesActive,
getTownInformationName getTownInformationName
} from './../../webservice/AuthApi'; } from './../../webservice/AuthApi';
import {MaterialDialog} from "react-native-material-dialog"; import { getPositionInformation } from './../../webservice/MapService';
import Geolocation from 'react-native-geolocation-service';
import ImagePicker from 'react-native-image-crop-picker';
import {Color} from "../../config/Color";
import {FontWeight, Typography} from "../../config/typography";
import Dialog from "react-native-dialog";
import {store} from "../../redux/store";
import axios from "axios";
import {uploadImage} from "../../webservice/IlinkConstants";
import {ProgressDialog} from "react-native-simple-dialogs";
import {getDefaultTown} from "../../webservice/AuthApi";
const GEOLOCATION_OPTIONS = {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000, useSignificantChanges: true}; const GEOLOCATION_OPTIONS = {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000, useSignificantChanges: true};
@ -123,7 +120,8 @@ export default class CreateUserStep2 extends Component {
isLoging: false, isLoging: false,
countries: '', countries: '',
selectedCountry: null, selectedCountry: null,
indicatif: '', indicatif: '+237',
country: "Cameroon",
snackVisible: false, snackVisible: false,
snackText: '', snackText: '',
disableNetwork: false, disableNetwork: false,
@ -162,6 +160,17 @@ export default class CreateUserStep2 extends Component {
console.log("props", this.props); console.log("props", this.props);
} }
// Fonction de validation pour les numéros de téléphone camerounais
validateCameroonPhoneNumber = (phoneNumber) => {
if (!phoneNumber) {
return false; // Si le numéro est vide, retourne false
}
console.log("Phone number===>>", phoneNumber);
const trimmedPhoneNumber = phoneNumber.trim();
const phoneRegex = /^\d{9}$/;
return phoneRegex.test(trimmedPhoneNumber);
}
createFormData = (photo) => { createFormData = (photo) => {
this.dataToSendTemp.append("image", { this.dataToSendTemp.append("image", {
name: photo.path.split('/').pop(), name: photo.path.split('/').pop(),
@ -177,6 +186,7 @@ export default class CreateUserStep2 extends Component {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
try { try {
let datas = await getCodeInformation(membre); let datas = await getCodeInformation(membre);
console.log("ICI datas===>>",datas)
// Assuming the API returns country and dial_code // Assuming the API returns country and dial_code
const { country, dial_code, ...otherData } = datas; const { country, dial_code, ...otherData } = datas;
resolve({ country, dial_code, ...otherData }); resolve({ country, dial_code, ...otherData });
@ -219,7 +229,7 @@ export default class CreateUserStep2 extends Component {
try { try {
const result = await this.retreiveCodeInformation(); const result = await this.retreiveCodeInformation();
console.log("RESULTAT ", result); console.log("RESULTAT===>> ", result);
if (!result) { if (!result) {
throw new Error("Aucun résultat obtenu"); throw new Error("Aucun résultat obtenu");
@ -229,8 +239,8 @@ export default class CreateUserStep2 extends Component {
this.setState({ this.setState({
result, result,
country, // country,
indicatif: dial_code // indicatif: dial_code
}); });
if (child) { if (child) {
@ -246,10 +256,10 @@ export default class CreateUserStep2 extends Component {
} : {}) } : {})
}); });
} else { } else {
throw new Error("Impossible de récupérer les informations du code parrain"); throw new Error("Impossible de récupérer les informations du code hiérarchique ou taxe");
} }
} else { } else {
const networks = await getCountryNetwork(indicatif); const networks = await getCountryNetwork("+237");
const reseaux = Object.values(networks).filter(network => network !== ""); const reseaux = Object.values(networks).filter(network => network !== "");
this.setState({ this.setState({
networks: reseaux, networks: reseaux,
@ -260,7 +270,7 @@ export default class CreateUserStep2 extends Component {
console.error("Erreur dans getNetworks:", error); console.error("Erreur dans getNetworks:", error);
this.setState({ modalVisible: false }); this.setState({ modalVisible: false });
if (error.message === "Impossible de récupérer les informations du code parrain") { if (error.message === "Impossible de récupérer les informations du code hiérarchique ou taxe") {
Alert.alert(I18n.t('TITLE_PROBLE_COME'), error.message, [{ Alert.alert(I18n.t('TITLE_PROBLE_COME'), error.message, [{
text: "Revenir", text: "Revenir",
onPress: () => this.props.navigation.pop() onPress: () => this.props.navigation.pop()
@ -313,6 +323,8 @@ export default class CreateUserStep2 extends Component {
if (jsonMatch) { if (jsonMatch) {
countriesData = JSON.parse(jsonMatch[0]); countriesData = JSON.parse(jsonMatch[0]);
} }
}else{
countriesData = response;
} }
const formattedCountries = countriesData.map(country => ({ const formattedCountries = countriesData.map(country => ({
@ -323,11 +335,11 @@ export default class CreateUserStep2 extends Component {
})); }));
this.setState({ this.setState({
country: formattedCountries, // country: formattedCountries,
countries: formattedCountries[0], countries: formattedCountries[0],
isLoading: false, isLoading: false,
selectedCountry: formattedCountries[0], // Sélectionne le premier pays par défaut selectedCountry: formattedCountries[0], // Sélectionne le premier pays par défaut
indicatif: formattedCountries[0].code_dial // indicatif: formattedCountries[0].code_dial
}); });
this.getNetworks(formattedCountries[0].label); this.getNetworks(formattedCountries[0].label);
} catch (error) { } catch (error) {
@ -339,7 +351,7 @@ export default class CreateUserStep2 extends Component {
onSelectCountry = (country) => { onSelectCountry = (country) => {
this.setState({ this.setState({
selectedCountry: country, selectedCountry: country,
indicatif: country.code_dial, // indicatif: country.code_dial,
modalVisible: false modalVisible: false
}); });
this.getNetworks(country.code_dial); this.getNetworks(country.code_dial);
@ -387,7 +399,7 @@ export default class CreateUserStep2 extends Component {
const selectedCountry = this.state.countries[index]; const selectedCountry = this.state.countries[index];
this.setState({ this.setState({
selectedCountry: selectedCountry, selectedCountry: selectedCountry,
indicatif: selectedCountry.code_dial, // indicatif: selectedCountry.code_dial,
network: null network: null
}); });
this.getNetworks(selectedCountry.code_dial); this.getNetworks(selectedCountry.code_dial);
@ -511,7 +523,11 @@ export default class CreateUserStep2 extends Component {
town = result[0]; town = result[0];
} else } else
town = result; town = result;
this.setState({town: town}); this.setState({town: {
name: "Douala",
id: "2",
indicatif: "+237"
}});
}) })
} else { } else {
getDefaultTown().then(result => { getDefaultTown().then(result => {
@ -521,7 +537,11 @@ export default class CreateUserStep2 extends Component {
town = resultTowwn[0]; town = resultTowwn[0];
} else } else
town = resultTowwn; town = resultTowwn;
this.setState({town: town}); this.setState({town: {
name: "Douala",
id: "2",
indicatif: "+237"
}});
}); });
}) })
} }
@ -534,7 +554,10 @@ export default class CreateUserStep2 extends Component {
for (let i of cnt) { for (let i of cnt) {
if (i.code_country === shortcountry) { if (i.code_country === shortcountry) {
found = true found = true
this.setState({indicatif: i.code_dial, country: i.name}) this.setState({
// indicatif: i.code_dial,
country: i.name
})
this.getNetworks(i.code_dial); this.getNetworks(i.code_dial);
} }
} }
@ -686,7 +709,7 @@ export default class CreateUserStep2 extends Component {
paddingRight: 20, paddingRight: 20,
backgroundColor: 'white' backgroundColor: 'white'
}}> }}>
<Fumi {/* <Fumi
iconClass={FontAwesomeIcon} iconClass={FontAwesomeIcon}
label={I18n.t('COUNTRY_CHOICE')} label={I18n.t('COUNTRY_CHOICE')}
// value={this.state.countries} // value={this.state.countries}
@ -767,27 +790,7 @@ export default class CreateUserStep2 extends Component {
}} }}
/> */} /> */}
<Fumi
iconClass={FontAwesomeIcon}
iconName={'flag'}
// value={this.state.indicatif}
value={selectedCountry ? `${selectedCountry.code_dial}` : ''}
enabled={false}
editable={false}
// onChangeText={(text) => {
// let phonenum = text + (this.state.contact !== undefined ? this.state.contact : "");
// this.setState({indicatif: text, phone: phonenum});
// }}
style={{
width: responsiveWidth(30),
height: responsiveHeight(10),
alignSelf: 'center',
marginTop: responsiveHeight(2),
marginLeft: responsiveWidth(5),
marginRight: responsiveWidth(5),
borderRadius: 5,
}}
/>
<View> <View>
<Fumi iconClass={FontAwesomeIcon} iconName={'phone'} <Fumi iconClass={FontAwesomeIcon} iconName={'phone'}
placeholder={I18n.t('PHONE')} placeholder={I18n.t('PHONE')}
@ -797,15 +800,15 @@ export default class CreateUserStep2 extends Component {
}} }}
iconSize={20} iconSize={20}
onChangeText={(text) => { onChangeText={(text) => {
let phonenumber = text this.setState({phone: text.trim(), contact: text.trim()})
this.setState({phone: phonenumber, contact: text})
}} }}
style={{ style={{
marginTop: responsiveHeight(2), marginTop: responsiveHeight(2),
marginRight: responsiveWidth(5), marginRight: responsiveWidth(5),
marginLeft: responsiveWidth(5),
width: responsiveWidth(55), width: responsiveWidth(90),
borderRadius: 5, borderRadius: 5,
}} }}
> >
@ -818,15 +821,15 @@ export default class CreateUserStep2 extends Component {
}} }}
iconSize={20} iconSize={20}
onChangeText={(text) => { onChangeText={(text) => {
let phonenumber = text this.setState({phoneTransaction: text.trim(), contactTransaction: text.trim()})
this.setState({phoneTransaction: phonenumber, contactTransaction: text})
}} }}
style={{ style={{
marginTop: responsiveHeight(2), marginTop: responsiveHeight(2),
marginRight: responsiveWidth(5), marginRight: responsiveWidth(5),
width: responsiveWidth(55), marginLeft: responsiveWidth(5),
width: responsiveWidth(90),
borderRadius: 5, borderRadius: 5,
}} }}
> >
@ -1043,21 +1046,24 @@ export default class CreateUserStep2 extends Component {
> >
<Dropdown <Dropdown
label={I18n.t('COUNTRY_CHOICE')} label={I18n.t('COUNTRY_CHOICE')}
data={this.state.countries} data={[{"code_country": "CM", "code_dial": "+237", "label": "Cameroon", "value": "Cameroon"}]}
useNativeDriver={true} useNativeDriver={true}
value={this.state.country === null ? "" : // value={this.state.country === null ? "" :
this.state.country} // this.state.country}
value={this.state.country}
onChangeText={(value, index, data) => { onChangeText={(value, index, data) => {
this.setState({country: value, indicatif: value.code_dial, network: null}) this.setState({
// country: value,
// indicatif: value.code_dial,
network: null})
this.getNetworks(value.code_dial) this.getNetworks(value.code_dial)
}} }}
valueExtractor={(value) => { // valueExtractor={(value) => {
return value // return value
}} // }}
labelExtractor={(value) => { // labelExtractor={(value) => {
return value.name // return value.name
}} // }}
/> />
</View> </View>
<Animatable.View ref={(comp) => { <Animatable.View ref={(comp) => {
@ -1070,7 +1076,7 @@ export default class CreateUserStep2 extends Component {
onChangeText={(text) => { onChangeText={(text) => {
this.setState({indicatif: text}) // this.setState({indicatif: text})
}} }}
style={{ style={{
width: responsiveWidth(30), width: responsiveWidth(30),
@ -1159,7 +1165,12 @@ export default class CreateUserStep2 extends Component {
data['type'] = "create_user" data['type'] = "create_user"
data['phone'] = indicatif + phone; data['phone'] = indicatif + phone;
data['network'] = network; data['network'] = network;
data['town'] = this.state.town; // data['town'] = this.state.town;
data['town'] = {
name: "Douala",
id: "2",
indicatif: "+237"
}
data['latitude'] = myPosition.latitude; data['latitude'] = myPosition.latitude;
data['longitude'] = myPosition.longitude; data['longitude'] = myPosition.longitude;
for (let i in user) { for (let i in user) {
@ -1188,7 +1199,7 @@ export default class CreateUserStep2 extends Component {
break; break;
default: default:
Alert.alert(I18n.t("CONNEXION_SUCCESSFUL"), result.error_msg Alert.alert(I18n.t("CONNEXION_SUCCESSFUL"), result.error_msg
, [{text: 'OK', onPress: () => ""}], {cancelable: false}) , [{text: 'OK', onPress: () =>this.props.navigation.popToTop()}], {cancelable: false})
} }
this.setState({isLoading: false}) this.setState({isLoading: false})
} }
@ -1210,7 +1221,16 @@ export default class CreateUserStep2 extends Component {
checkUserGeolocated() { checkUserGeolocated() {
let {myPosition, textaddress, place, indicatif, user, network, phone, phoneTransaction} = this.state; let {myPosition, textaddress, place, indicatif, user, network, phone, phoneTransaction} = this.state;
this.setState({isLoading: true}) this.setState({isLoading: true});
// Validation des numéros de téléphone
const isPhoneValid = this.validateCameroonPhoneNumber(phone);
const isPhoneTransactionValid = this.validateCameroonPhoneNumber(phoneTransaction);
if (!isPhoneValid || !isPhoneTransactionValid) {
Alert.alert("Erreur", "Les numéros de téléphone doivent être des numéros camerounais valides de 9 chiffres (ex: 656391882).");
this.setState({isLoading: false});
return;
}
if (user !== undefined) { if (user !== undefined) {
if (this.checkOrShake(phone, this.numanim)) { if (this.checkOrShake(phone, this.numanim)) {
if (this.checkOrShake(network, this.networkanim)) { if (this.checkOrShake(network, this.networkanim)) {

View File

@ -518,6 +518,9 @@ export class LoginUi extends Component {
</View> </View>
</ScrollView> </ScrollView>
<View style={style.logoContaner}>
<Image style={style.byIlinkLogo} source={require('../../../assets/img/by-ilink-world.png')}/>
</View>
</Animated.View> </Animated.View>
@ -810,6 +813,12 @@ const style = StyleSheet.create({
}, },
logo: { logo: {
width: responsiveWidth(90), width: responsiveWidth(90),
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
resizeMode: "contain"
},
byIlinkLogo: {
width: responsiveWidth(30),
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
resizeMode: "contain" resizeMode: "contain"
}, },
title: { title: {

View File

@ -14,7 +14,8 @@ import {
getPasObject, getPasObject,
getPubActiveObject, getPubActiveObject,
getSupervisorInfoCode, getSupervisorInfoCode,
getAppVersion getAppVersion,
getSupervisorInfoCodeOffline
} from '../../webservice/AuthApi'; } from '../../webservice/AuthApi';
import {Bubbles, DoubleBounce, Bars, Pulse} from 'react-native-loader'; import {Bubbles, DoubleBounce, Bars, Pulse} from 'react-native-loader';
import Configuration from "../../webservice/persistences/Configuration"; import Configuration from "../../webservice/persistences/Configuration";
@ -58,7 +59,7 @@ export default class SplashScreen extends Component {
// //
constructor(props) { constructor(props) {
super(props); super(props);
this.retreiveSupervisorInfosCode(); // this.retreiveSupervisorInfosCode();
this.state = {} this.state = {}
}; };
@ -130,8 +131,29 @@ export default class SplashScreen extends Component {
});*/ });*/
} }
initializeOfflineMode = () => {
console.log("Initialisation du mode Hors Ligne...");
getSupervisorInfoCodeOffline()
.then((result) => {
console.warn("SUPERVISOR INFOS CODE_", JSON.stringify(result));
storeData(supervisorCode, JSON.stringify(result))
.then(() => {
this.setState({ offlineInitialized: true, isLoading: false });
})
.catch(error => {
console.error("Erreur lors du stockage :", error);
this.setState({ isLoading: false });
});
})
.catch(error => {
console.error("Erreur lors de la récupération des infos :", error);
});
}
componentDidMount() { componentDidMount() {
console.log("ComponentDidMount===>>")
this.initializeOfflineMode();
// this.retreiveSupervisorInfosCode();
try { try {
this.requestCameraPermission() this.requestCameraPermission()
} catch (e) { } catch (e) {
@ -197,15 +219,16 @@ export default class SplashScreen extends Component {
} }
retreiveSupervisorInfosCode() { retreiveSupervisorInfosCode() {
console.log("RETRIEVE SUPERVISOR INFOS CODE");
getSupervisorInfoCode().then((result) => { getSupervisorInfoCode().then((result) => {
console.warn("SUPERVISOR INFOS CODE", JSON.stringify(result)); console.warn("SUPERVISOR INFOS CODE_", JSON.stringify(result));
storeData(supervisorCode, JSON.stringify(result)).then(() => { storeData(supervisorCode, JSON.stringify(result)).then(() => {
getData(supervisorCode).then(resultGet => { getData(supervisorCode).then(resultGet => {
console.log("DATA FROM ASYNC STORAGE", resultGet); console.log("DATA FROM ASYNC STORAGE", resultGet);
}); });
}); });
}).catch(error => { }).catch(error => {
console.log(error); console.log("errorGetSupervisorInfoCode", error);
}) })
} }

View File

@ -240,7 +240,8 @@ const styles=StyleSheet.create({
}, },
logo:{ logo:{
width:responsiveWidth(90), width:responsiveWidth(90),
resizeMode:'contain' resizeMode:'contain',
height: responsiveHeight(16), // Delete this line if the image size sucks and change the width and the height of icon3.png to 257 x 112
}, },
lottie: { lottie: {
width: 48 width: 48

View File

@ -62,7 +62,7 @@ class NumeroQuitance extends Component {
static navigationOptions = () => { static navigationOptions = () => {
return { return {
drawerLabel: () => null, drawerLabel: () => null,
headerTitle: I18n.t('QUITANCE'), headerTitle: I18n.t('PAYMENT'),
headerTintColor: 'white', headerTintColor: 'white',
headerStyle: { headerStyle: {
backgroundColor: Color.primaryColor, backgroundColor: Color.primaryColor,

View File

@ -74,8 +74,8 @@ class NumeroQuitanceDetail extends Component {
return { return {
drawerLabel: () => null, drawerLabel: () => null,
title: navigation.getParam("isModify", false) ? I18n.t('QUITANCE') title: navigation.getParam("isModify", false) ? I18n.t('PAYMENT')
: I18n.t('QUITANCE'), : I18n.t('PAYMENT'),
headerTintColor: 'white', headerTintColor: 'white',
headerStyle: { headerStyle: {
backgroundColor: Color.primaryColor, backgroundColor: Color.primaryColor,
@ -119,15 +119,16 @@ class NumeroQuitanceDetail extends Component {
added_revenue_orders_items: [], added_revenue_orders_items: [],
displayAddOrdreRecette: false, displayAddOrdreRecette: false,
ordreRecetteId: this.props.navigation.getParam("isModify", false) ? this.props.navigation.getParam("item", "-").id_receipt : "", ordreRecetteId: this.props.navigation.getParam("isModify", false) ? this.props.navigation.getParam("item", "-").id_receipt : "",
// Suppression de ces 2 moyens de paiement Wallet et Cash pour laissser uniquement Tresor pay qui lui vient plutot de l'API
paymentMethods: [ paymentMethods: [
{ // {
title: I18n.t('WALLET'), // title: I18n.t('WALLET'),
value: 'wallet' // value: 'wallet'
}, // },
{ // {
title: I18n.t('CASH'), // title: I18n.t('CASH'),
value: 'cash' // value: 'cash'
}, // },
], ],
paymentMethod: 'wallet', paymentMethod: 'wallet',
paymentUrl: '', paymentUrl: '',
@ -285,15 +286,16 @@ class NumeroQuitanceDetail extends Component {
if (nextProps.paymentMethod !== null) { if (nextProps.paymentMethod !== null) {
if (nextProps.paymentMethod.result !== null) { if (nextProps.paymentMethod.result !== null) {
console.log("nextProps.paymentMethod", nextProps.paymentMethod); console.log("nextProps.paymentMethod", nextProps.paymentMethod);
// Suppression de ces 2 moyens de paiement Wallet et Cash pour laissser uniquement Tresor pay qui lui vient plutot de l'API
const paymentsMethods = [ const paymentsMethods = [
{ // {
title: I18n.t('WALLET'), // title: I18n.t('WALLET'),
value: 'wallet' // value: 'wallet'
}, // },
{ // {
title: I18n.t('CASH'), // title: I18n.t('CASH'),
value: 'cash' // value: 'cash'
}, // },
] ]
this.setState({ this.setState({
paymentMethods: [...paymentsMethods, ...nextProps.paymentMethod.result.response.methods] paymentMethods: [...paymentsMethods, ...nextProps.paymentMethod.result.response.methods]
@ -947,7 +949,7 @@ class NumeroQuitanceDetail extends Component {
disabled={true} disabled={true}
textStyle={styles.textbtnstyle} textStyle={styles.textbtnstyle}
> >
{this.state.isModify ? I18n.t('MODIFY') : I18n.t('SAVE')} {this.state.isModify ? I18n.t('MODIFY') : I18n.t('PAY')}
</Button> </Button>
</View> </View>

View File

@ -491,7 +491,7 @@ export const optionOrdreRecetteScreen = {
export const optionNumeroQuitanceScreen = { export const optionNumeroQuitanceScreen = {
type: 'QUITANCE', type: 'QUITANCE',
title: 'QUITANCE', title: 'NUMERO_QUITANCE',
subTitle: 'CHOOSE_OPTION', subTitle: 'CHOOSE_OPTION',
options: [ options: [
{ {

View File

@ -1,5 +1,5 @@
{ {
"WELCOME": "Welcome to iLink World !", "WELCOME": "Welcome to SIM_ba !",
"WAITING_LONG": "Waiting for a moment", "WAITING_LONG": "Waiting for a moment",
"HELP": "Help", "HELP": "Help",
"SIMPLE_USER": "Simple User", "SIMPLE_USER": "Simple User",
@ -13,6 +13,7 @@
"THE_AGENT": "Agent", "THE_AGENT": "Agent",
"USER": "User", "USER": "User",
"HYPERVISOR": "Hypervisor", "HYPERVISOR": "Hypervisor",
"YOU_HAVE": "You have",
"OPEN": "Open", "OPEN": "Open",
"POSITION": "My position", "POSITION": "My position",
"TAKE_MY_PLACE": "Take my position", "TAKE_MY_PLACE": "Take my position",
@ -34,25 +35,18 @@
"ASK_FOR_SUPERVISOR1": "Ask to become a supervisor", "ASK_FOR_SUPERVISOR1": "Ask to become a supervisor",
"CREDIT_ASK_FROM_MEMBERS": "Credit requests from your members", "CREDIT_ASK_FROM_MEMBERS": "Credit requests from your members",
"ASK_MEMBERS": "Membership applications", "ASK_MEMBERS": "Membership applications",
"MY_ACCOUNT": "My account", "AMOUNT_LABEL": "Amount",
"WALLET": "Wallet", "AMOUNT_LABEL_DESCRIPTION": "Please enter the amount",
"DESTINATAIRE": "Recipient",
"ERROR_LABEL": "Error",
"NO_BANK_AVAILABLE": "No bank available", "NO_BANK_AVAILABLE": "No bank available",
"BANK_LIST": "Bank list", "BANK_LIST": "Bank list",
"NO_OPERATOR_AVAILABLE": "No operator available", "NO_OPERATOR_AVAILABLE": "No operator available",
"ENTER_VALID_AMOUNT": "Enter a valid amount", "DEPOSIT_SUCCESS": "Deposit done successfully",
"ENTER_AMOUNT_SUPERIOR_ZEROR": "Enter amount superior to zero", "SUCCESS": "Success",
"AMOUNT_SUPERIOR_TO_PRINCIPAL_ACCOUNT": "Amount greater than that of the agent's main account", "ETAT": "State",
"PAYMENT_DONE": "Payment done", "MY_ACCOUNT": "My account",
"PAYMENT_ERROR": "Payment error", "WALLET": "Wallet",
"MAKE_DEPOSIT": "Make a deposit",
"MAKE_WITHDRAWAL": "Make withdrawal",
"WITHDRAWAL_TYPE": "Withdrawal mode",
"DEPOSIT_DESCRIPTION": "Make a deposit",
"ERROR_TRANSFER": "Transfer error",
"SUCCESS_TRANSFER": "Transfer done",
"WITHDRAWAL_SUCCESS": "Withdrawal done",
"WITHDRAWAL_ERROR": "Withdrawal error",
"WALLET_TO_WALLET_SUCCESS_TRANSFER": "Wallet to wallet transfer successfully completed",
"DEPOSIT": "Deposit", "DEPOSIT": "Deposit",
"EN_ATTENTE_DE_VALIDATION": "Waiting for validation", "EN_ATTENTE_DE_VALIDATION": "Waiting for validation",
"REMBOURSE": "Reimbursed", "REMBOURSE": "Reimbursed",
@ -62,8 +56,17 @@
"RETRAIT_ARGENT": "Receive money", "RETRAIT_ARGENT": "Receive money",
"CONFIRM_DEPOSIT": "Confirm deposit", "CONFIRM_DEPOSIT": "Confirm deposit",
"CONFIRM_WITHDRAWAL": "Confirm withdrawal", "CONFIRM_WITHDRAWAL": "Confirm withdrawal",
"CHANGE_SOURCE_CARD": "Change the type of entry number", "ENTER_VALID_AMOUNT": "Enter a valid amount",
"ENTER_AMOUNT_SUPERIOR_ZEROR": "Enter amount superior to zero",
"AMOUNT_SUPERIOR_TO_PRINCIPAL_ACCOUNT": "Amount greater than that of the agent's main account",
"ENTER_VALID_SERIAL_NUMBER": "Please enter the correct serial number",
"MAKE_DEPOSIT": "Make a deposit",
"MAKE_WITHDRAWAL": "Make withdrawal",
"WITHDRAWAL_TYPE": "Withdrawal mode",
"PAYMENT_DONE": "Payment done",
"PAYMENT_ERROR": "Payment error",
"CHOOSE_SOURCE": "Choose source", "CHOOSE_SOURCE": "Choose source",
"CHANGE_SOURCE_CARD": "Change the type of entry number",
"CREDIT_CARD": "Credit card", "CREDIT_CARD": "Credit card",
"CREDIT_ACCOUNT": "Credit account", "CREDIT_ACCOUNT": "Credit account",
"SAVINGS_ACCOUNT": "Saving account", "SAVINGS_ACCOUNT": "Saving account",
@ -77,15 +80,18 @@
"CARD_EXPIRY_LABEL": "Expiry.", "CARD_EXPIRY_LABEL": "Expiry.",
"CARD_CVC_LABEL": "CVC/CCV", "CARD_CVC_LABEL": "CVC/CCV",
"CVC_CARD_ERROR": "CVC card error format", "CVC_CARD_ERROR": "CVC card error format",
"DEPOSIT_DESCRIPTION": "Make a deposit",
"ERROR_TRANSFER": "Transfer error",
"SUCCESS_TRANSFER": "Transfer done",
"WITHDRAWAL_SUCCESS": "Withdrawal done",
"WITHDRAWAL_ERROR": "Withdrawal error",
"WALLET_TO_WALLET_SUCCESS_TRANSFER": "Wallet to wallet transfer successfully completed",
"THIS_FIELD_IS_REQUIRED": "This field is required", "THIS_FIELD_IS_REQUIRED": "This field is required",
"PLEASE_ENTER_THE_AMOUNT": "Please enter the amount", "PLEASE_ENTER_THE_AMOUNT": "Please enter the amount",
"CHOOSE_OPTION": "Please choose an option", "CHOOSE_OPTION": "Please choose an option",
"CHOOSE_OPERATOR": "Please choose an operator", "CHOOSE_OPERATOR": "Please choose an operator",
"EXPIRY_CARD_ERROR": "Date incorrect", "EXPIRY_CARD_ERROR": "Date incorrect",
"CARD_NUMBER_ERROR": "Card number incorrect", "CARD_NUMBER_ERROR": "Card number incorrect",
"AMOUNT_LABEL": "Amount",
"AMOUNT_LABEL_DESCRIPTION": "Please enter the amount",
"DESTINATAIRE": "Recipient",
"WITHDRAWAL": "Withdrawal", "WITHDRAWAL": "Withdrawal",
"LINK_CARD": "Link my card", "LINK_CARD": "Link my card",
"LINK_CARD_REATTACH": "Link | Reattach", "LINK_CARD_REATTACH": "Link | Reattach",
@ -137,16 +143,21 @@
"QUARTIER_COMMUNE": "Neighborhood in the town", "QUARTIER_COMMUNE": "Neighborhood in the town",
"ARRONDISSEMENT": "Borough", "ARRONDISSEMENT": "Borough",
"PATENTE": "Patent", "PATENTE": "Patent",
"TVA": "TVA", "TVA": "VAT",
"IRPP": "IRPP", "IRPP": "IRPP",
"ANNEE_TAXE": "Paid year taxed", "ANNEE_TAXE": "Paid year taxed",
"ANNEE_TAXE_N": "Paid year taxed N", "ANNEE_TAXE_N": "Paid year taxed N",
"ANNEE_TAXE_N_1": "Année taxé payée N-1", "ANNEE_TAXE_N_1": "Année taxé payée N-1",
"ANNEE_TAXE_N_2": "Année taxé payée N-2", "ANNEE_TAXE_N_2": "Année taxé payée N-2",
"TYPE_ACTIVITE": "Type d'activité", "TYPE_ACTIVITE": "Type d'activité",
"TECHNICAL_AGREMENT": "Technical approval or license",
"IMMATRICULATION_DGI": "UIN",
"INFORMATION_FICHE_CIRCUIT": "Identification sheet",
"OTHERS_INFORMATIONS": "Other information",
"SUCCESS_CREATION_GROUP": "Creation information", "SUCCESS_CREATION_GROUP": "Creation information",
"ERROR_CREATION_GROUP": "Creation error", "ERROR_CREATION_GROUP": "Creation error",
"ERROR_JOIN_GROUP": "Join error", "ERROR_JOIN_GROUP": "Join error",
"SUCCES_JOIN_GROUP": "Group join success",
"CREATE_GROUP": "Create group", "CREATE_GROUP": "Create group",
"MANAGE_GROUP": "Manage group", "MANAGE_GROUP": "Manage group",
"VALIDATION_DEMAND": "Validation request", "VALIDATION_DEMAND": "Validation request",
@ -234,7 +245,6 @@
"COMMISSION_TRANSFER_ERROR_EMPTY": "The commission balance is empty", "COMMISSION_TRANSFER_ERROR_EMPTY": "The commission balance is empty",
"CONFIRM": "Confirm", "CONFIRM": "Confirm",
"CONFIRM_TRANSFER_COMMISSION": "Confirm commission transfer", "CONFIRM_TRANSFER_COMMISSION": "Confirm commission transfer",
"CREATION_DATE": "Creation date",
"PRINCIPAL_ACCOUNT_TITLE": "Principal account", "PRINCIPAL_ACCOUNT_TITLE": "Principal account",
"NUMERO_COMPTE": "Account number", "NUMERO_COMPTE": "Account number",
"NO_WALLET_ACTIVED": "No wallet is activated for your account", "NO_WALLET_ACTIVED": "No wallet is activated for your account",
@ -276,6 +286,8 @@
"IMAGE_TAKE": "Image take", "IMAGE_TAKE": "Image take",
"NAME": "Last name(s)", "NAME": "Last name(s)",
"FIRSTNAME": "First name(s) ", "FIRSTNAME": "First name(s) ",
"CIVILITY": "Civility",
"NATIONALITY": "Nationality",
"NAME_EMETTEUR": "Issuer first name(s)", "NAME_EMETTEUR": "Issuer first name(s)",
"EMETTEUR": "Issuer", "EMETTEUR": "Issuer",
"FIRSTNAME_EMETTEUR": "Issuer last name(s) ", "FIRSTNAME_EMETTEUR": "Issuer last name(s) ",
@ -403,10 +415,6 @@
"CANCEL_LABEL": "Cancel", "CANCEL_LABEL": "Cancel",
"SUBMIT_LABEL": "Submit", "SUBMIT_LABEL": "Submit",
"PHISIC_SECURITY": "Physic security", "PHISIC_SECURITY": "Physic security",
"ERROR_LABEL": "Error",
"SUCCESS": "Success",
"ETAT": "State",
"DEPOSIT_SUCCESS": "Deposit done successfully",
"TEXT_GUIDE_USER_1": "You have just connected.\n Your location is marked in the center of the map with the indication \"You are here\" ", "TEXT_GUIDE_USER_1": "You have just connected.\n Your location is marked in the center of the map with the indication \"You are here\" ",
"TEXT_GUIDE_USER_3": "Clicking the '+' button will open the options menu", "TEXT_GUIDE_USER_3": "Clicking the '+' button will open the options menu",
"TEXT_GUIDE_USER_4": "Click on a marker to get the information on a point", "TEXT_GUIDE_USER_4": "Click on a marker to get the information on a point",
@ -450,7 +458,6 @@
"CHOOSE_LANGUAGE": "Choose the language", "CHOOSE_LANGUAGE": "Choose the language",
"MODIFY_PASSWORD": "Forgotten password", "MODIFY_PASSWORD": "Forgotten password",
"CONTACT": "Contact", "CONTACT": "Contact",
"UPDATE": "... update",
"FAQ": "FAQ", "FAQ": "FAQ",
"UPDATE_POSITION_TEXT": "Update my position", "UPDATE_POSITION_TEXT": "Update my position",
"YOU_ARE": "Are you?", "YOU_ARE": "Are you?",
@ -514,11 +521,13 @@
"HISTORY_TYPE": "Type", "HISTORY_TYPE": "Type",
"HISTORY_TYPE_ASK": "Requests", "HISTORY_TYPE_ASK": "Requests",
"REQUEST_RECEIVE": "Requests received", "REQUEST_RECEIVE": "Requests received",
"DEMANDE_RECEIVE": "Request received",
"MY_DEMANDE": "My requests", "MY_DEMANDE": "My requests",
"PHONE_TRANSACTION": "Transaction number", "PHONE_TRANSACTION": "Transaction number",
"DEMAND_TEXT_FIRST_PART": "made a request for", "DEMAND_TEXT_FIRST_PART": "made a request for",
"DEMAND_TEXT_FIRST_PART_YOU": "You made a request for ", "DEMAND_TEXT_FIRST_PART_YOU": "You made a request for ",
"REQUEST_SEND": "Request Sent", "REQUEST_SEND": "Request Sent",
"DEMANDE_SEND": "Request sent",
"DEMAND_RECEIVE": "Requests received", "DEMAND_RECEIVE": "Requests received",
"DEMAND_VALIDATION_GROUP_RECEIVE": "Validation requests", "DEMAND_VALIDATION_GROUP_RECEIVE": "Validation requests",
"DEMAND_DELETE_GROUP_RECEIVE": "Removal requests", "DEMAND_DELETE_GROUP_RECEIVE": "Removal requests",
@ -537,8 +546,8 @@
"MEMBERSHIP_REQUEST": "Membership applications", "MEMBERSHIP_REQUEST": "Membership applications",
"HISTORY_TYPE_REQUEST": "Queries", "HISTORY_TYPE_REQUEST": "Queries",
"TREAT": "Processed", "TREAT": "Processed",
"EXIT_TITLE": "Close iLink World!", "EXIT_TITLE": "Close SIM_ba!",
"EXIT_DESC": "Do you really want to close iLink World?", "EXIT_DESC": "Do you really want to close SIM_ba?",
"NO_TREAT": "Unprocessed", "NO_TREAT": "Unprocessed",
"EXIT": "Close", "EXIT": "Close",
"PERIOD": "Period", "PERIOD": "Period",
@ -551,7 +560,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Your account has been activated successfully!", "ACCOUNT_ACTIVATE_TEXT": "Your account has been activated successfully!",
"HISTORY_END": "End", "HISTORY_END": "End",
"DONT_VALIDATE_ACCOUNT": "Account not validated", "DONT_VALIDATE_ACCOUNT": "Account not validated",
"CONNEXION_SUCCESSFULL_TEXT": "Successful login Welcome to iLink World!", "CONNEXION_SUCCESSFULL_TEXT": "Successful login Welcome to SIM_ba!",
"UNVALIDATE_ACCOUNT_TEXT": "Your hypervisor has not yet verified your account", "UNVALIDATE_ACCOUNT_TEXT": "Your hypervisor has not yet verified your account",
"TEXT_NEED_POSITION": "Please update your location!", "TEXT_NEED_POSITION": "Please update your location!",
"TITLE_NEED_POSITION": "Your location needs to be updated", "TITLE_NEED_POSITION": "Your location needs to be updated",
@ -564,12 +573,12 @@
"TITLE_PROBLE_COME": "A problem has been encountered", "TITLE_PROBLE_COME": "A problem has been encountered",
"TITLE_SUPPRESS_CONFIRM": "Confirm deletion", "TITLE_SUPPRESS_CONFIRM": "Confirm deletion",
"TEXT_SUPPRESS_CONFIRM": "Do you really want to delete this user ?", "TEXT_SUPPRESS_CONFIRM": "Do you really want to delete this user ?",
"TEXT_ERROR_START_APPLICATION": "An error occurred while starting iLink World, please restart iLink World", "TEXT_ERROR_START_APPLICATION": "An error occurred while starting SIM_ba, please restart SIM_ba",
"TEXT_UNABLE_TO_GET_YOUR_POSITION": "Unable to retrieve your location, please make sure your GPS is enabled and restart iLink World", "TEXT_UNABLE_TO_GET_YOUR_POSITION": "Unable to retrieve your location, please make sure your GPS is enabled and restart SIM_ba",
"RESTART": "REPEAT", "RESTART": "REPEAT",
"TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Unable to retrieve information from your country, check your internet connection, click \" Ok \"to try again,", "TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Unable to retrieve information from your country, check your internet connection, click \" Ok \"to try again,",
"TITLE_UNABLE_TO_AUTORISE": "Failed to Authorize", "TITLE_UNABLE_TO_AUTORISE": "Failed to Authorize",
"MISSING_AUTORISATION_LOCATION": "iLink World is not authorized to access your location, please allow iLink World to access your location and restart iLink World", "MISSING_AUTORISATION_LOCATION": "SIM_ba is not authorized to access your location, please allow SIM_ba to access your location and restart SIM_ba",
"TEXT_FORGOTTEN_PASSWORD": "Enter your username, we will send you a new password", "TEXT_FORGOTTEN_PASSWORD": "Enter your username, we will send you a new password",
"TEXT_NETWORK_UNABLE": "Network not available, want to try again?", "TEXT_NETWORK_UNABLE": "Network not available, want to try again?",
"LOADING_TEXT_MARKERS": "More points", "LOADING_TEXT_MARKERS": "More points",
@ -578,7 +587,7 @@
"NO_POINT_FOUND": "No points found ", "NO_POINT_FOUND": "No points found ",
"LAUNCH_POINT_WITH_FILTER": "Do you want to restart the search within a radius of ", "LAUNCH_POINT_WITH_FILTER": "Do you want to restart the search within a radius of ",
"UNABLE_GET_INFORMATION": "Problem of retrieval of information", "UNABLE_GET_INFORMATION": "Problem of retrieval of information",
"UNABLE_GET_INFORMATION_TEXT": "Make sure your GPS is turned on and put in high precision mode and restart iLink World", "UNABLE_GET_INFORMATION_TEXT": "Make sure your GPS is turned on and put in high precision mode and restart SIM_ba",
"TITLE_HELP_SOON": "Help not available!", "TITLE_HELP_SOON": "Help not available!",
"YOUR_NETWORK": "Select your network", "YOUR_NETWORK": "Select your network",
"YOUR_NETWORK_SELECTED": "Your network", "YOUR_NETWORK_SELECTED": "Your network",
@ -605,7 +614,7 @@
"NUMERO_QUITANCE_SUCCES": "Successful receipt number", "NUMERO_QUITANCE_SUCCES": "Successful receipt number",
"ORDRE_RECETTE_MODIFY_SUCCES": "Recipe order number successfully changed", "ORDRE_RECETTE_MODIFY_SUCCES": "Recipe order number successfully changed",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Receipt number changed successfully", "NUMERO_QUITANCE_MODIFY_SUCCES": "Receipt number changed successfully",
"TAXES_SUR_LA_PROPRETE": "Tax on cleanliness", "TAXES_SUR_LA_PROPRETE": "Synthetic general tax *",
"SAVE": "Save", "SAVE": "Save",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Are you sure you want to remove this tax?", "TEXT_SUPPRESS_CONFIRM_TAXE": "Are you sure you want to remove this tax?",
"NUMERO_QUITANCE": "Receipt number", "NUMERO_QUITANCE": "Receipt number",
@ -613,7 +622,6 @@
"ORDRE_DE_RECETTE": "Recipe order", "ORDRE_DE_RECETTE": "Recipe order",
"MODIFY_ORDRE_DE_RECETTE": "Change recipe order", "MODIFY_ORDRE_DE_RECETTE": "Change recipe order",
"ORDRE_DE_RECETTE_NUMBER": "Recipe order number", "ORDRE_DE_RECETTE_NUMBER": "Recipe order number",
"ORDRE_RECETTE_SUCCES": "Recipe order successfully changed",
"RECEIPT_NUMBER": "Receipt number", "RECEIPT_NUMBER": "Receipt number",
"NUMBER": "Number", "NUMBER": "Number",
"ACTION": "Action", "ACTION": "Action",
@ -632,12 +640,10 @@
"PAYMENT_DEADLINE": "Payment deadline", "PAYMENT_DEADLINE": "Payment deadline",
"TAX_NOTICE_CREATED_AT": "Tax notice created at", "TAX_NOTICE_CREATED_AT": "Tax notice created at",
"TOTAL_AMOUNT": "Total amount", "TOTAL_AMOUNT": "Total amount",
"UPDATE_DATE": "Update date",
"YEAR": "Year", "YEAR": "Year",
"TYPE": "Type", "TYPE": "Type",
"CODE_MEMBRE": "Sponsor code", "CODE_MEMBRE": "Sponsor code",
"DISTRICT": "District", "DISTRICT": "District",
"IDENTIFICATION_NUMBER": "Identification number",
"MUNICIPALITY": "Municipality", "MUNICIPALITY": "Municipality",
"ID_PATENTE": "ID patent", "ID_PATENTE": "ID patent",
"NETWORK_ID": "Network ID", "NETWORK_ID": "Network ID",
@ -650,7 +656,7 @@
"PRINCIPAL_AMOUNT": "Principal amount", "PRINCIPAL_AMOUNT": "Principal amount",
"DATE_AVIS_IMPOSITION": "Tax notice date", "DATE_AVIS_IMPOSITION": "Tax notice date",
"TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "This network is inactive, please choose another", "TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "This network is inactive, please choose another",
"ENTER_SPONSOR_CODE": "Renseignez votre code parrain", "ENTER_SPONSOR_CODE": "Enter your hierarchical code or tax",
"NOM_SOCIETE": "Society name", "NOM_SOCIETE": "Society name",
"TAKE_My_POSITION": "Retreive position", "TAKE_My_POSITION": "Retreive position",
"CREATE_ACTIF": "Create asset", "CREATE_ACTIF": "Create asset",
@ -691,6 +697,7 @@
"PENALITE_ON_TAXE": "Penalty on taxes", "PENALITE_ON_TAXE": "Penalty on taxes",
"PENALITE_MANAGE": "Penalty management", "PENALITE_MANAGE": "Penalty management",
"PENALITE": "Penalty", "PENALITE": "Penalty",
"PENALITES": "Penalty",
"NO_PENALITE": "No penality", "NO_PENALITE": "No penality",
"MODIFY_PENALITE": "Modify penality", "MODIFY_PENALITE": "Modify penality",
"DELETE_PENALITE": "Delete penality", "DELETE_PENALITE": "Delete penality",
@ -698,10 +705,12 @@
"TAUX_PENALITE": "Penalty rate (%)", "TAUX_PENALITE": "Penalty rate (%)",
"TAUX": "Rate", "TAUX": "Rate",
"NO_ORDRE_RECETTE_WITH_QUITANCE": "No recipe order with tax notice", "NO_ORDRE_RECETTE_WITH_QUITANCE": "No recipe order with tax notice",
"SAVE_PENALITY": "Penalty saved",
"SAISIE_PENALITY": "Entering penalties", "SAISIE_PENALITY": "Entering penalties",
"MODIFICATION_SAISIE_PENALITY": "Modification/Deletion", "MODIFICATION_SAISIE_PENALITY": "Modification/Deletion",
"YOU_HAVE_DEFINED_PENALITY_FOR_THIS_YEAR": "You have already set a penalty for the following year(s)", "YOU_HAVE_DEFINED_PENALITY_FOR_THIS_YEAR": "You have already set a penalty for the following year(s)",
"AMOUNT_ORDRE_RECETTE": "Revenue order amount", "AMOUNT_ORDRE_RECETTE": "Revenue order amount",
"AMOUNT_TAX_NOTICE": "Tax Notice Amount",
"YOU_CANT_DELETE_LAST_TAX_NOTICE": "A discharge must contain at least one receipt order", "YOU_CANT_DELETE_LAST_TAX_NOTICE": "A discharge must contain at least one receipt order",
"WOULD_YOU_WANT_SEARCH_BY_NAME": "Would you want to make search by name ?", "WOULD_YOU_WANT_SEARCH_BY_NAME": "Would you want to make search by name ?",
"USAGER_NAME": "User name", "USAGER_NAME": "User name",
@ -711,5 +720,45 @@
"BY_QR_CODE": "By QR Code", "BY_QR_CODE": "By QR Code",
"SCAN": "Scan", "SCAN": "Scan",
"BRING_YOUR_CAMERA_CLOSER_TO_SCAN_QR_CODE": "Bring your camera closer to the QR Code to scan it", "BRING_YOUR_CAMERA_CLOSER_TO_SCAN_QR_CODE": "Bring your camera closer to the QR Code to scan it",
"LOADING_CREDIT_TRANSFER": "Credit transfert in progress..." "CLOSE": "Close",
"NUMBER_OF_DAYS": "Number of days",
"NUMBER_OF_DAYS_INCORRECT": "The number of days must be between 1 and 366",
"PENALITE_INCLUSE": "Penalty included",
"SOINS": "Care",
"INVOICE": "Invoice",
"ORDRE_RECETTE_QUITANCE": "Order and receipt",
"ID": "ID",
"CONNEXION_CHOICE": "Choice of connection",
"CONNEXION_CHOICE_DESCRIPTION": "A recharge agent account is associated to your number. Would you like to continue as a recharge agent?",
"AGENTS_RECHARGE": "Refill agents",
"LOADING_CREDIT_TRANSFER": "Credit transfert in progress...",
"MOBILE_MONEY": "Mobile Money",
"PAYMENT_METHOD": "Payment Method",
"PAYMENT": "Payment",
"AVIS_NON_EMIS": "Notice Not Issued",
"PAYMENT_COULD_NOT_MADE": "The payment could not be made",
"CASH": "Cash",
"HIERACHIC_CODE": "Hierachic code",
"HIERACHIC_CODE_DESCRIPTION": "Code entered when creating a tax administrator or registrar",
"TAX_CODE": "Tax code",
"TAX_CODE_DESCRIPTION": "Code entered when creating a taxpayer",
"FIND_A_NEIGHBORHOOD": "Find a neighborhood *",
"WHATS_YOUR_BUSINESS": "What's your business? *",
"ID_CARD_NUMBER": "ID Card Number",
"BIRTH_DATE": "Date of Birth *",
"BIRTH_PLACE": "Place of Birth *",
"BIRTH_COUNTRY": "Country of Birth *",
"NATIONALITY_FORM": "Nationality *",
"MOTHER_LASTNAME": "Mother's Last Name *",
"MOTHER_FIRSTNAME": "Mother's First Name",
"FATHER_LASTNAME": "Father's Last Name *",
"FATHER_FIRSTNAME": "Father's First Name",
"SIGNBOARD": "Acronym *",
"CREATION_DATE": "Creation Date",
"TECHNICAL_APPROVAL": "Technical Approval",
"TRADE_LICENSE": "Business License",
"MERCURIAL_VALUE": "Mercurial Value ",
"CONSTRUCTION_VALUE": "Enter the Construction Value",
"BUILDING_CONSTRUCTED": "Building Constructed",
"PAY": "Pay"
} }

View File

@ -1,5 +1,5 @@
{ {
"WELCOME": "Bienvenue sur iLink City !", "WELCOME": "Bienvenue sur SIM_ba Mobile !",
"WAITING_LONG": "Veuillez patienter un instant", "WAITING_LONG": "Veuillez patienter un instant",
"HELP": "Aide", "HELP": "Aide",
"SIMPLE_USER": "Utilisateur simple", "SIMPLE_USER": "Utilisateur simple",
@ -45,7 +45,7 @@
"SUCCESS": "Succès", "SUCCESS": "Succès",
"ETAT": "Etat", "ETAT": "Etat",
"MY_ACCOUNT": "Mon compte", "MY_ACCOUNT": "Mon compte",
"WALLET": "Wallet", "WALLET": "Portefeuille",
"DEPOSIT": "Dépôt", "DEPOSIT": "Dépôt",
"EN_ATTENTE_DE_VALIDATION": "En attente de validation", "EN_ATTENTE_DE_VALIDATION": "En attente de validation",
"REMBOURSE": "Remboursé", "REMBOURSE": "Remboursé",
@ -134,7 +134,6 @@
"TAXE": "Taxe", "TAXE": "Taxe",
"INTERET": "Intérêt", "INTERET": "Intérêt",
"SOCIETY_TYPE": "Type de société", "SOCIETY_TYPE": "Type de société",
"IDENTIFICATION_NUMBER": "Numéro d'identification",
"REGISTRE_COMMERCE": "Registre de commerce", "REGISTRE_COMMERCE": "Registre de commerce",
"NOM_RESPONSABLE": "Nom du responsable", "NOM_RESPONSABLE": "Nom du responsable",
"COMMUNE_SIEGE_SOCIAL": "Commune du siège social", "COMMUNE_SIEGE_SOCIAL": "Commune du siège social",
@ -148,9 +147,9 @@
"ANNEE_TAXE_N_1": "Année taxé payée N-1", "ANNEE_TAXE_N_1": "Année taxé payée N-1",
"ANNEE_TAXE_N_2": "Année taxé payée N-2", "ANNEE_TAXE_N_2": "Année taxé payée N-2",
"TYPE_ACTIVITE": "Type d'activité", "TYPE_ACTIVITE": "Type d'activité",
"TECHNICAL_AGREMENT": "Agrément technique", "TECHNICAL_AGREMENT": "Agrément technique ou Licence",
"IMMATRICULATION_DGI": "Immatriculation DGI", "IMMATRICULATION_DGI": "NIU",
"INFORMATION_FICHE_CIRCUIT": "Information fiche circuit", "INFORMATION_FICHE_CIRCUIT": "Fiche d'identification",
"OTHERS_INFORMATIONS": "Autres informations", "OTHERS_INFORMATIONS": "Autres informations",
"CREATE_GROUP": "Créer un groupe", "CREATE_GROUP": "Créer un groupe",
"MANAGE_GROUP": "Gérer le groupe", "MANAGE_GROUP": "Gérer le groupe",
@ -258,7 +257,6 @@
"NO_WALLET_ACTIVED": "Aucun wallet n'est activé pour votre compte", "NO_WALLET_ACTIVED": "Aucun wallet n'est activé pour votre compte",
"TRANSFER_TO_PRINCIPAL_ACCOUNT": "Transférer commissions", "TRANSFER_TO_PRINCIPAL_ACCOUNT": "Transférer commissions",
"PRINCIPAL": "Principal", "PRINCIPAL": "Principal",
"CREATION_DATE": "Date de création",
"ENTER_YOUR_CARD_ID": "Entrer vos identifiants bancaires", "ENTER_YOUR_CARD_ID": "Entrer vos identifiants bancaires",
"THE_ACCOUNT": "Le compte ", "THE_ACCOUNT": "Le compte ",
"NO_GEO_POINT_CODE": "Vous n'avez aucun point geolocalisé libre", "NO_GEO_POINT_CODE": "Vous n'avez aucun point geolocalisé libre",
@ -285,6 +283,8 @@
"IMAGE_TAKE": "Prise d'image", "IMAGE_TAKE": "Prise d'image",
"NAME": "Nom(s)", "NAME": "Nom(s)",
"FIRSTNAME": "Prénom(s) ", "FIRSTNAME": "Prénom(s) ",
"CIVILITY": "Civilité",
"NATIONALITY": "Nationalité",
"NAME_EMETTEUR": "Nom(s) émetteur", "NAME_EMETTEUR": "Nom(s) émetteur",
"EMETTEUR": "Emetteur", "EMETTEUR": "Emetteur",
"FIRSTNAME_EMETTEUR": "Prénom(s) émetteur", "FIRSTNAME_EMETTEUR": "Prénom(s) émetteur",
@ -301,15 +301,15 @@
"SUPER_ADMIN": "Super administrateur", "SUPER_ADMIN": "Super administrateur",
"GEOLOCATED": "Agent géo-localisé", "GEOLOCATED": "Agent géo-localisé",
"DELETE_GEOLOCATED_USER": "Supprimer", "DELETE_GEOLOCATED_USER": "Supprimer",
"ADDRESS": "Adresse", "ADDRESS": "Adresse EX:TotalEnergies Bonateki",
"CREDIT": "Crédit", "CREDIT": "Crédit",
"NEXT": "Suivant", "NEXT": "Suivant",
"PREVIOUS": "Précédent", "PREVIOUS": "Précédent",
"SPONSOR_CODE": "Code réseau de taxe", "SPONSOR_CODE": "Code classe de taxes",
"CODE_PARRAIN": "Code parrain", "CODE_PARRAIN": "Code hiérarchique ou taxe",
"CODE_SPONSOR": "Code sponsor", "CODE_SPONSOR": "Code sponsor",
"SOLDE_UNVAIBLE": "solde non disponible", "SOLDE_UNVAIBLE": "solde non disponible",
"TEXT_BIG_CREATE_AGENT_1": "Inscrivez-vous en tant qu'agent", "TEXT_BIG_CREATE_AGENT_1": "Créer un administrateur un régisseur ou un contribuable",
"EMAIL": "Email", "EMAIL": "Email",
"COUNTRY": "Pays", "COUNTRY": "Pays",
"LOADING_INFO": "Chargement des informations...", "LOADING_INFO": "Chargement des informations...",
@ -384,7 +384,7 @@
"OK": "OK", "OK": "OK",
"SIMPLE": "Simple", "SIMPLE": "Simple",
"BLOCKED": "Bloqué", "BLOCKED": "Bloqué",
"APP_FULLNAME": "Ilink City", "APP_FULLNAME": "SIM_ba Mobile",
"GUIDE_TITLE": "Bienvenue dans le Guide de", "GUIDE_TITLE": "Bienvenue dans le Guide de",
"GUIDE_USER_SIMPLE": "Guide pour un utilisateur", "GUIDE_USER_SIMPLE": "Guide pour un utilisateur",
"GUIDE_AGENT": "Guide pour un agent", "GUIDE_AGENT": "Guide pour un agent",
@ -424,9 +424,9 @@
"TEXT_GUIDE_USER_11": "Cliquez sur l'option de profil pour avoir des informations lier à votre compte", "TEXT_GUIDE_USER_11": "Cliquez sur l'option de profil pour avoir des informations lier à votre compte",
"CATEGORY": "Catégorie", "CATEGORY": "Catégorie",
"WAY": "Itinéraire", "WAY": "Itinéraire",
"ADD_NETWORK": "Ajouter réseau de taxe", "ADD_NETWORK": "Ajouter une classe de taxes",
"POINT_NUMBER": "Nombres de points", "POINT_NUMBER": "Nombres de points",
"SUPERIOR_CODE": "Code parrain", "SUPERIOR_CODE": "Code hiérarchique ou taxe",
"ADD_SUCCES": "Ajout reussi", "ADD_SUCCES": "Ajout reussi",
"ADD_SUCCESS_TEXT": "La taxe a été ajoutée avec succès ", "ADD_SUCCESS_TEXT": "La taxe a été ajoutée avec succès ",
"MEMBER_CODE": "Code membre", "MEMBER_CODE": "Code membre",
@ -521,11 +521,13 @@
"HISTORY_TYPE": "Type", "HISTORY_TYPE": "Type",
"INVALID_MONTANT": "Montant invalide", "INVALID_MONTANT": "Montant invalide",
"HISTORY_TYPE_ASK": "Demandes", "HISTORY_TYPE_ASK": "Demandes",
"REQUEST_RECEIVE": "Demande reçue",
"DEMANDE_RECEIVE": "Demandes reçues", "DEMANDE_RECEIVE": "Demandes reçues",
"MY_DEMANDE": "Mes demandes", "MY_DEMANDE": "Mes demandes",
"PHONE_TRANSACTION": "Numéro de transaction", "PHONE_TRANSACTION": "Numéro de transaction",
"DEMAND_TEXT_FIRST_PART": "a effectué une demande de ", "DEMAND_TEXT_FIRST_PART": "a effectué une demande de ",
"DEMAND_TEXT_FIRST_PART_YOU": "Vous avez effectué une demande de ", "DEMAND_TEXT_FIRST_PART_YOU": "Vous avez effectué une demande de ",
"REQUEST_SEND": "Demande envoyée",
"DEMANDE_SEND": " Demande Envoyée", "DEMANDE_SEND": " Demande Envoyée",
"DEMAND_RECEIVE": "Demandes reçues", "DEMAND_RECEIVE": "Demandes reçues",
"DEMAND_VALIDATION_GROUP_RECEIVE": "Demandes de validation", "DEMAND_VALIDATION_GROUP_RECEIVE": "Demandes de validation",
@ -544,8 +546,8 @@
"MEMBERSHIP_REQUEST": "Demandes d'adhésion", "MEMBERSHIP_REQUEST": "Demandes d'adhésion",
"HISTORY_TYPE_REQUEST": "Requêtes", "HISTORY_TYPE_REQUEST": "Requêtes",
"TREAT": "Traité", "TREAT": "Traité",
"EXIT_TITLE": "Fermer iLink City !", "EXIT_TITLE": "Fermer SIM_ba Mobile !",
"EXIT_DESC": "Voulez-vous vraiment fermer iLink City ?", "EXIT_DESC": "Voulez-vous vraiment fermer SIM_ba Mobile ?",
"NO_TREAT": "Non traité", "NO_TREAT": "Non traité",
"EXIT": "Fermer", "EXIT": "Fermer",
"PERIOD": "Période", "PERIOD": "Période",
@ -558,7 +560,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Votre compte a été activé avec succès !", "ACCOUNT_ACTIVATE_TEXT": "Votre compte a été activé avec succès !",
"HISTORY_END": "Fin", "HISTORY_END": "Fin",
"DONT_VALIDATE_ACCOUNT": "Compte non validé", "DONT_VALIDATE_ACCOUNT": "Compte non validé",
"CONNEXION_SUCCESSFULL_TEXT": "Connexion réussie. Bienvenue dans iLink City ! ", "CONNEXION_SUCCESSFULL_TEXT": "Connexion réussie. Bienvenue dans SIM_ba Mobile ! ",
"UNVALIDATE_ACCOUNT_TEXT": "Votre hyperviseur n'a pas encore validé votre compte", "UNVALIDATE_ACCOUNT_TEXT": "Votre hyperviseur n'a pas encore validé votre compte",
"TEXT_NEED_POSITION": "Veuillez mettre à jour votre position !", "TEXT_NEED_POSITION": "Veuillez mettre à jour votre position !",
"TITLE_NEED_POSITION": "Votre position doit être mise à jour", "TITLE_NEED_POSITION": "Votre position doit être mise à jour",
@ -571,12 +573,12 @@
"TITLE_PROBLE_COME": "Un problème a été rencontré", "TITLE_PROBLE_COME": "Un problème a été rencontré",
"TITLE_SUPPRESS_CONFIRM": "Confirmation de suppression", "TITLE_SUPPRESS_CONFIRM": "Confirmation de suppression",
"TEXT_SUPPRESS_CONFIRM": "Voulez vous vraiment supprimer cet utilisateur ?", "TEXT_SUPPRESS_CONFIRM": "Voulez vous vraiment supprimer cet utilisateur ?",
"TEXT_ERROR_START_APPLICATION": "Une erreur est survenue au démarrage de iLink City. Veuillez relancer iLink City", "TEXT_ERROR_START_APPLICATION": "Une erreur est survenue au démarrage de SIM_ba Mobile. Veuillez relancer SIM_ba Mobile",
"TEXT_UNABLE_TO_GET_YOUR_POSITION": "Impossible de recupérez votre position. Veuillez verifier que votre GPS est activé et relancez iLink City", "TEXT_UNABLE_TO_GET_YOUR_POSITION": "Impossible de recupérez votre position. Veuillez verifier que votre GPS est activé et relancez SIM_ba Mobile",
"RESTART": "RECOMMENCER", "RESTART": "RECOMMENCER",
"TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Impossible de recupérer les informations de votre pays. Verifiez votre connexion internet ! cliquez sur \"Ok\" pour reessayer", "TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Impossible de recupérer les informations de votre pays. Verifiez votre connexion internet ! cliquez sur \"Ok\" pour reessayer",
"TITLE_UNABLE_TO_AUTORISE": "Echec de l'autorisation", "TITLE_UNABLE_TO_AUTORISE": "Echec de l'autorisation",
"MISSING_AUTORISATION_LOCATION": "iLink City n'est pas autorisé à acceder à votre position. Veuillez autoriser iLink City à accéder à votre localisation et relancez iLink City", "MISSING_AUTORISATION_LOCATION": "SIM_ba Mobile n'est pas autorisé à acceder à votre position. Veuillez autoriser SIM_ba Mobile à accéder à votre localisation et relancez SIM_ba Mobile",
"TEXT_FORGOTTEN_PASSWORD": "Saisissez votre identifiant,nous vous enverrons un nouveau mot de passe\n", "TEXT_FORGOTTEN_PASSWORD": "Saisissez votre identifiant,nous vous enverrons un nouveau mot de passe\n",
"TEXT_NETWORK_UNABLE": "Réseau non disponible, voulez vous réessayer ?", "TEXT_NETWORK_UNABLE": "Réseau non disponible, voulez vous réessayer ?",
"LOADING_TEXT_MARKERS": "Suite des points ", "LOADING_TEXT_MARKERS": "Suite des points ",
@ -585,10 +587,10 @@
"LAUNCH_POINT_WITH_FILTER": "Voulez-vous relancer la recherche dans un rayon de ", "LAUNCH_POINT_WITH_FILTER": "Voulez-vous relancer la recherche dans un rayon de ",
"LOADING_TEXT_MARKERS_2": "autour", "LOADING_TEXT_MARKERS_2": "autour",
"UNABLE_GET_INFORMATION": "Problème de récuperation des Informations", "UNABLE_GET_INFORMATION": "Problème de récuperation des Informations",
"UNABLE_GET_INFORMATION_TEXT": "Vérifiez que votre GPS est activé et mis en mode haute precision et relancez iLink City", "UNABLE_GET_INFORMATION_TEXT": "Vérifiez que votre GPS est activé et mis en mode haute precision et relancez SIM_ba Mobile",
"TITLE_HELP_SOON": "Aide non disponible !", "TITLE_HELP_SOON": "Aide non disponible !",
"YOUR_NETWORK": "Sélectionner votre réseau", "YOUR_NETWORK": "Sélectionner votre réseau",
"YOUR_NETWORK_SELECTED": "Votre réseau", "YOUR_NETWORK_SELECTED": "Classe de la taxe",
"UNIT_PER_TAXE_UNIT_COUNT": "Taxe par unité", "UNIT_PER_TAXE_UNIT_COUNT": "Taxe par unité",
"HELP_SOON": "Un tutoriel vous aidant dans la compréhension des fonctionnalités de l'application vous sera bientôt mis à disposition.", "HELP_SOON": "Un tutoriel vous aidant dans la compréhension des fonctionnalités de l'application vous sera bientôt mis à disposition.",
"UPLOAD_PHOTO": "Chargement de la photo", "UPLOAD_PHOTO": "Chargement de la photo",
@ -599,24 +601,22 @@
"ORDRE_RECETTE": "Ordre recette", "ORDRE_RECETTE": "Ordre recette",
"NO_ORDRE_RECETTE": "Aucun ordre de recette", "NO_ORDRE_RECETTE": "Aucun ordre de recette",
"MODIFICATION_ORDRE_RECETTE": "Modifier ordre recette", "MODIFICATION_ORDRE_RECETTE": "Modifier ordre recette",
"SAISIE_NUMERO_QUITANCE": "Saisir numéro quitance", "SAISIE_NUMERO_QUITANCE": "Effectuer un paiement",
"MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quitance", "MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quittance",
"SAISIR_QUITANCE": "Saisir quitance", "SAISIR_QUITANCE": "Gestion paiement ou quittance",
"CODE_AGENT": "Code agent ", "CODE_AGENT": "Code agent ",
"AVIS_IMPOSITION": "Déclaration", "AVIS_IMPOSITION": "Déclaration",
"AGENT_INFORMATION": "Informations sur l'agent", "AGENT_INFORMATION": "Informations sur l'agent",
"UPDATE_DATE": "Date de mis à jour",
"ASSIGN_TO_AGENT": "Assigner à un agent", "ASSIGN_TO_AGENT": "Assigner à un agent",
"AVIS_MODIFY_SUCCESS": "Avis modifié avec succès", "AVIS_MODIFY_SUCCESS": "Avis modifié avec succès",
"ORDRE_RECETTE_SUCCES": "Ordre de recette saisi avec succès", "NUMERO_QUITANCE_SUCCES": "Numéro de quittance enregistré avec succès",
"NUMERO_QUITANCE_SUCCES": "Numéro de quitance enregistré avec succès",
"ORDRE_RECETTE_MODIFY_SUCCES": "Numéro ordre de recette modifié avec succès", "ORDRE_RECETTE_MODIFY_SUCCES": "Numéro ordre de recette modifié avec succès",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Numéro de quitance modifié avec succès", "NUMERO_QUITANCE_MODIFY_SUCCES": "Numéro de quittance modifié avec succès",
"TAXES_SUR_LA_PROPRETE": "Taxe sur la propreté", "TAXES_SUR_LA_PROPRETE": "Impôt général synthétique *",
"SAVE": "Enregistrer", "SAVE": "Enregistrer",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Voulez vous vraiment supprimer cette taxe?", "TEXT_SUPPRESS_CONFIRM_TAXE": "Voulez vous vraiment supprimer cette taxe?",
"NUMERO_QUITANCE": "Numéro quitance", "NUMERO_QUITANCE": "Numéro quittance",
"QUITANCE": "Quitance", "QUITANCE": "Quittance",
"ORDRE_DE_RECETTE": "Ordre de recette", "ORDRE_DE_RECETTE": "Ordre de recette",
"MODIFY_ORDRE_DE_RECETTE": "Modifier ordre de recette", "MODIFY_ORDRE_DE_RECETTE": "Modifier ordre de recette",
"ORDRE_DE_RECETTE_NUMBER": "Numéro d'ordre de recette", "ORDRE_DE_RECETTE_NUMBER": "Numéro d'ordre de recette",
@ -624,7 +624,6 @@
"RECEIPT_NUMBER": "Numéro de reçu", "RECEIPT_NUMBER": "Numéro de reçu",
"NUMBER": "Numéro", "NUMBER": "Numéro",
"ACTION": "Action", "ACTION": "Action",
"UPDATE": "Mis à jour",
"ADD": "Ajout", "ADD": "Ajout",
"ID_REVENUE_ORDRE": "ID ordre de recette", "ID_REVENUE_ORDRE": "ID ordre de recette",
"ID_SUPER": "ID superviseur", "ID_SUPER": "ID superviseur",
@ -649,21 +648,21 @@
"ID_PATENTE": "ID patente", "ID_PATENTE": "ID patente",
"NETWORK_ID": "ID du réseau", "NETWORK_ID": "ID du réseau",
"NEIGHTBORHOOD": "Quartier", "NEIGHTBORHOOD": "Quartier",
"ORDRE_RECETTE_RECEIPT": "Recette et quitance", "ORDRE_RECETTE_RECEIPT": "Recette et quittance",
"HISTORY_OF": "Historique des", "HISTORY_OF": "Historique des",
"AVIS_IMPOSITIONS": "déclarations", "AVIS_IMPOSITIONS": "déclarations",
"ORDRE_RECETTES_RECEIPTS": "recettes et quitances", "ORDRE_RECETTES_RECEIPTS": "recettes et quittances",
"QUITANCES": "quitances", "QUITANCES": "quittances",
"PRINCIPAL_AMOUNT": "Montant principal", "PRINCIPAL_AMOUNT": "Montant principal",
"DATE_AVIS_IMPOSITION": "Date avis imposition", "DATE_AVIS_IMPOSITION": "Date avis imposition",
"TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "Ce réseau n'est pas actif, veuillez choisir un autre", "TEXT_NETWORK_UNABLE_CHOOSE_ANOTHER": "Ce réseau n'est pas actif, veuillez choisir un autre",
"ENTER_SPONSOR_CODE": "Renseignez votre code parrain", "ENTER_SPONSOR_CODE": "Renseignez votre code hiérarchique ou taxe",
"NOM_SOCIETE": "Nom de la société", "NOM_SOCIETE": "Nom de la société",
"TAKE_My_POSITION": "Récupération de votre position", "TAKE_My_POSITION": "Récupération de votre position",
"CREATE_ACTIF": "Créer un actif", "CREATE_ACTIF": "Créer un actif",
"IMPOSSIBLE_TO_CONNECT_INTERNET": "Vérifier votre connexion internet. Voulez-vous réessayer ?", "IMPOSSIBLE_TO_CONNECT_INTERNET": "Vérifier votre connexion internet. Voulez-vous réessayer ?",
"REGISTER_OPTIONS": "Options d'enregistrement", "REGISTER_OPTIONS": "Options d'enregistrement",
"WOULD_YOU_WANT_TO_REGISTER_OFFLINE": "Voulez-vous enregistrer un usager en ligne ?", "WOULD_YOU_WANT_TO_REGISTER_OFFLINE": "Voulez-vous enregistrer un contribuable en ligne ?",
"DATA_NOT_SYNCHRONISED_WITH_SERVER": "Les données nécessaires au mode offline n'ont pas été sauvegarder. Voulez-vous vous connecter et réessayez ?", "DATA_NOT_SYNCHRONISED_WITH_SERVER": "Les données nécessaires au mode offline n'ont pas été sauvegarder. Voulez-vous vous connecter et réessayez ?",
"CODE_AGENT_NOT_EXIST": "Ce code agent n'existe pas", "CODE_AGENT_NOT_EXIST": "Ce code agent n'existe pas",
"FOR_THIS_KING_OF_USER_PLEASE_CONNECT": "Pour enregistrer ce type d'agent, veuillez vous connecter", "FOR_THIS_KING_OF_USER_PLEASE_CONNECT": "Pour enregistrer ce type d'agent, veuillez vous connecter",
@ -673,13 +672,13 @@
"HOW_WOULD_YOU_WANT_TO_TAKE_IMAGE": "Comment voulez-vous prendre l'image?", "HOW_WOULD_YOU_WANT_TO_TAKE_IMAGE": "Comment voulez-vous prendre l'image?",
"FROM_GALLERY": "Depuis la galerie", "FROM_GALLERY": "Depuis la galerie",
"FROM_CAMERA": "Depuis la caméra", "FROM_CAMERA": "Depuis la caméra",
"USAGER_SAVED_SUCCESSFULLY": "Usager enregistré avec succès sur votre mobile", "USAGER_SAVED_SUCCESSFULLY": "contribuable enregistré avec succès sur votre mobile",
"ACTIF_SAVED_SUCCESSFULLY": "Actif enregistré avec succès sur votre mobile", "ACTIF_SAVED_SUCCESSFULLY": "Actif enregistré avec succès sur votre mobile",
"SAUVEGARDER_OF_USAGER": "Création des comptes usagers: ", "SAUVEGARDER_OF_USAGER": "Création des contribuables: ",
"SAUVEGARDER_OF_USAGER_LOADING_SAVE": "Création des comptes usagers sauvegardés... ", "SAUVEGARDER_OF_USAGER_LOADING_SAVE": "Création des contribuables sauvegardés... ",
"SAUVEGARDER_OF_ACTIF_LOADING_SAVE": "Création des actifs sauvegardés... ", "SAUVEGARDER_OF_ACTIF_LOADING_SAVE": "Création des actifs sauvegardés... ",
"LIMITE_ACTIF_LOCAL_ATTEINTE": "Vous avez enregistré de nombreux actifs, veuillez les synchroniser avant de réessayer", "LIMITE_ACTIF_LOCAL_ATTEINTE": "Vous avez enregistré de nombreux actifs, veuillez les synchroniser avant de réessayer",
"LIMITE_USAGER_LOCAL_ATTEINTE": "Vous avez enregistré de nombreux usagers, veuillez les synchroniser avant de réessayer", "LIMITE_USAGER_LOCAL_ATTEINTE": "Vous avez enregistré de nombreux contribuables, veuillez les synchroniser avant de réessayer",
"DO_YOU_WANT_TO_ADD_ANOTHER_TAXES": "Voulez-vous rajouter une taxe sur la publicité ?", "DO_YOU_WANT_TO_ADD_ANOTHER_TAXES": "Voulez-vous rajouter une taxe sur la publicité ?",
"TAXES_SUR_LA_PUBLICITE": "Taxes sur la publicité", "TAXES_SUR_LA_PUBLICITE": "Taxes sur la publicité",
"TAXE_REQUIRED_IMAGE": "L'image est requise pour la taxe", "TAXE_REQUIRED_IMAGE": "L'image est requise pour la taxe",
@ -693,7 +692,6 @@
"ACTIF": "actif", "ACTIF": "actif",
"ACTIFS": "actifs", "ACTIFS": "actifs",
"TAXE_INFORMATION": "Informations sur la déclaration", "TAXE_INFORMATION": "Informations sur la déclaration",
"ACTIFS": "actifs",
"NUMERO_AVIS_IMPOSITION": "N° déclaration", "NUMERO_AVIS_IMPOSITION": "N° déclaration",
"ADD_ORDRE_RECETTE": "Ajouter un ordre de recette", "ADD_ORDRE_RECETTE": "Ajouter un ordre de recette",
"PENALITE_ON_TAXE": "Pénalité sur les taxes", "PENALITE_ON_TAXE": "Pénalité sur les taxes",
@ -706,18 +704,18 @@
"DELETE_PENALITE": "Supprimer la pénalité", "DELETE_PENALITE": "Supprimer la pénalité",
"TAUX_PENALITE": "Taux de pénalité (%)", "TAUX_PENALITE": "Taux de pénalité (%)",
"TAUX": "Taux", "TAUX": "Taux",
"NO_ORDRE_RECETTE_WITH_QUITANCE": "Aucun ordre de recette sans quitance", "NO_ORDRE_RECETTE_WITH_QUITANCE": "Aucun ordre de recette sans quittance",
"SAVE_PENALITY": "Taux", "SAVE_PENALITY": "Taux",
"SAISIE_PENALITY": "Saisie des pénalités", "SAISIE_PENALITY": "Saisie des pénalités",
"MODIFICATION_SAISIE_PENALITY": "Modification/Suppression", "MODIFICATION_SAISIE_PENALITY": "Modification/Suppression",
"YOU_HAVE_DEFINED_PENALITY_FOR_THIS_YEAR": "Vous avez déjà définit une pénalité pour les années suivantes:", "YOU_HAVE_DEFINED_PENALITY_FOR_THIS_YEAR": "Vous avez déjà définit une pénalité pour les années suivantes:",
"AMOUNT_ORDRE_RECETTE": "Montant de l'ordre de recette", "AMOUNT_ORDRE_RECETTE": "Montant de l'ordre de recette",
"AMOUNT_TAX_NOTICE": "Montant de la déclaration", "AMOUNT_TAX_NOTICE": "Montant de la déclaration",
"YOU_CANT_DELETE_LAST_TAX_NOTICE": "Une quitance doit contenir au moins un ordre de recette", "YOU_CANT_DELETE_LAST_TAX_NOTICE": "Une quittance doit contenir au moins un ordre de recette",
"WOULD_YOU_WANT_SEARCH_BY_NAME": "Voulez-vous rechercher l'usager par son nom ?", "WOULD_YOU_WANT_SEARCH_BY_NAME": "Voulez-vous rechercher le contribuable par son nom ?",
"USAGER_NAME": "Nom de l'usager", "USAGER_NAME": "Nom du contribuable",
"NO_USAGER_CORRESPONDING_TO_SEARCH": "Aucun usager ne correspond à votre recherche", "NO_USAGER_CORRESPONDING_TO_SEARCH": "Aucun contribuable ne correspond à votre recherche",
"USAGER_SEARCH": "Recherche d'un usager", "USAGER_SEARCH": "Recherche d'un contribuable",
"BY_NAME": "Par nom", "BY_NAME": "Par nom",
"BY_QR_CODE": "Par QR Code", "BY_QR_CODE": "Par QR Code",
"SCAN": "Scanner", "SCAN": "Scanner",
@ -728,7 +726,7 @@
"PENALITE_INCLUSE": "Pénalité incluse", "PENALITE_INCLUSE": "Pénalité incluse",
"SOINS": "Soins", "SOINS": "Soins",
"INVOICE": "Facture", "INVOICE": "Facture",
"ORDRE_RECETTE_QUITANCE": "Ordre et quitance", "ORDRE_RECETTE_QUITANCE": "Ordre et quittance",
"ID": "ID", "ID": "ID",
"CONNEXION_CHOICE": "Choix de connexion", "CONNEXION_CHOICE": "Choix de connexion",
"CONNEXION_CHOICE_DESCRIPTION": "Un compte agent de recharge est associé à votre numéro. Voulez vous continuer en tant que agent recharge ?", "CONNEXION_CHOICE_DESCRIPTION": "Un compte agent de recharge est associé à votre numéro. Voulez vous continuer en tant que agent recharge ?",
@ -739,5 +737,28 @@
"PAYMENT": "Paiement", "PAYMENT": "Paiement",
"AVIS_NON_EMIS": "Avis non émis", "AVIS_NON_EMIS": "Avis non émis",
"PAYMENT_COULD_NOT_MADE": "Le paiement n'a pas pu être effectué", "PAYMENT_COULD_NOT_MADE": "Le paiement n'a pas pu être effectué",
"CASH": "Cash" "CASH": "Cash",
"HIERACHIC_CODE": "Code hiérarchique",
"HIERACHIC_CODE_DESCRIPTION": "Code entré lors de la création d'un administrateur de taxe ou d'un régisseur",
"TAX_CODE": "Code taxe",
"TAX_CODE_DESCRIPTION": "Code entré lors de la création d'un contribuable",
"FIND_A_NEIGHBORHOOD": "Rechercher un quartier *",
"WHATS_YOUR_BUSINESS": "Quelle est votre activité *",
"ID_CARD_NUMBER": "Numéro de la CNI",
"BIRTH_DATE": "Date de naissance *",
"BIRTH_PLACE": "Lieu de naissance *",
"BIRTH_COUNTRY": "Pays de naissance *",
"NATIONALITY_FORM": "Nationalité *",
"MOTHER_LASTNAME": "Nom de la mère *",
"MOTHER_FIRSTNAME": "Prénom de la mère",
"FATHER_LASTNAME": "Nom du père *",
"FATHER_FIRSTNAME": "Prénom du père",
"SIGNBOARD": "Sigle *",
"CREATION_DATE": "Date de création",
"TECHNICAL_APPROVAL": "Agrément technique",
"TRADE_LICENSE": "Patente",
"MERCURIAL_VALUE": "Valeur mercuriale ",
"CONSTRUCTION_VALUE": "Saisir la valeur de la construction",
"BUILDING_CONSTRUCTED": "Immeuble bâti",
"PAY": "Payer"
} }

View File

@ -103,7 +103,9 @@ async function queryData(data, url) {
body: JSON.stringify(data), body: JSON.stringify(data),
}); });
let responseJson = null; let responseJson = null;
console.log("response1===>>",data,response)
let responseText = await response.text() let responseText = await response.text()
console.log("response2===>>",data,responseText)
try { try {
console.warn("SERVER RESPONSE SUCCESS", responseText); console.warn("SERVER RESPONSE SUCCESS", responseText);
responseJson = JSON.parse(responseText) responseJson = JSON.parse(responseText)
@ -395,6 +397,9 @@ export const getTownInformationName = (town) => {
export const getSupervisorInfoCode = () => { export const getSupervisorInfoCode = () => {
return queryData({"type": "all_supervisors_info_code", "tag": "member"}, memberActionUrl); return queryData({"type": "all_supervisors_info_code", "tag": "member"}, memberActionUrl);
} }
export const getSupervisorInfoCodeOffline = () => {
return queryData({"type": "supervisors_infos_off_line", "tag": "member"}, memberActionUrl);
}
export const generateAgentGeo = async (newPhone) => { export const generateAgentGeo = async (newPhone) => {
const user = await readUser(); const user = await readUser();
const items = await queryData({ const items = await queryData({
@ -406,7 +411,7 @@ export const generateAgentGeo = async (newPhone) => {
}, memberActionUrl) }, memberActionUrl)
return items; return items;
} }
export const AssignAgentGeo = async (codeValidation, phone, taxes, id_agent, password, id_tax_notice) => { export const AssignAgentGeo = async (codeValidation, phone, taxes, id_agent, password, id_tax_notice, neighborhood) => {
const user = await readUser(); const user = await readUser();
const items = await queryData({ const items = await queryData({
"type": "assignNetworkAgentToGeo", "type": "assignNetworkAgentToGeo",
@ -418,7 +423,8 @@ export const AssignAgentGeo = async (codeValidation, phone, taxes, id_agent, pas
"lang": I18n.currentLocale(), "lang": I18n.currentLocale(),
agentId: id_agent, agentId: id_agent,
password, password,
id_tax_notice id_tax_notice,
neighborhood
}, memberActionUrl) }, memberActionUrl)
return items; return items;
} }

View File

@ -1,35 +1,17 @@
export const isDebugMode = false export const isDebugMode = false
//base url test
//export const baseUrl = "https://ilink-app.com/mobilebackendbeta"
//base url production
//export const baseUrl = "https://ilink-app.com/mobilebackend";
//export const baseUrl = "https://test.ilink-app.com/mobilebackendtest";
//export const baseUrl = "http://test.ilink-app.com:8080/mobilebackendtest";
//const baseUrl = "https://ilink-app.com/mobilebackendtest2";
/*export const baseUrl = "http://city.ilink-app.com:8080/mobilebackend"; // TODO: Switch from test to prod and vice versa
export const testBaseUrl = "https://city.ilink-app.com:8081";*/
// PROD URL
// export const baseUrl = "https://city-douala3.ilink-app.com:8080/mobilebackend";
// export const testBaseUrl= "https://city-douala3.ilink-app.com:8081";
// TEST URL
export const baseUrl = "https://test-city-douala3.ilink-app.com:9080/mobilebackend"; export const baseUrl = "https://test-city-douala3.ilink-app.com:9080/mobilebackend";
export const testBaseUrl= "https://test-city-douala3.ilink-app.com:9081"; export const testBaseUrl= "https://test-city-douala3.ilink-app.com:9081";
//CUD
// export const baseUrl = "https://test-cud.ilink-app.com:9080/mobilebackend";
// export const testBaseUrl = "https://test-cud.ilink-app.com:9081";
// les derniers api modifiers commune X
// export const baseUrl = "http://test-city.ilink-app.com:8080/mobilebackend";
// export const testBaseUrl = "https://test-city.ilink-app.com:8081";
/* export const baseUrl = "https://preprod.ilink-app.com:8080/mobilebackend";
export const testBaseUrl = "https://preprod.ilink-app.com"; */
//base url agent test
//const baseUrl = "https://ilink-app.com/mobilebackendtest";
export const adhesionUrl = baseUrl + '/interacted/LoginAction.php'; export const adhesionUrl = baseUrl + '/interacted/LoginAction.php';
export const memberActionUrl = baseUrl + '/interacted/MembersAction.php'; export const memberActionUrl = baseUrl + '/interacted/MembersAction.php';

View File

@ -3,9 +3,11 @@ import React, {Component} from 'react';
var db = require('./persistences/db.js'); var db = require('./persistences/db.js');
import I18n from 'react-native-i18n' import I18n from 'react-native-i18n'
import {readUser} from './AuthApi' import {readUser} from './AuthApi'
import {isDebugMode, MARKER_URL, mobileAppVersion, opencageDataApiUrl} from "./IlinkConstants"; import {isDebugMode, MARKER_URL, mobileAppVersion, opencageDataApiUrl, testBaseUrl} from "./IlinkConstants";
let GEOCODDING_URL = "https://test-city.ilink-app.com:8081/geocode"; // let GEOCODDING_URL = "https://city-douala3.ilink-app.com:8081/geocode";
let GEOCODDING_URL = testBaseUrl + "/geocode"
console.log("GEOCODDING_URL===>>",GEOCODDING_URL)
let API_KEY = "AIzaSyAme0ZMQjUynvo6AeSVlMRzUPdcOSuPbZE" let API_KEY = "AIzaSyAme0ZMQjUynvo6AeSVlMRzUPdcOSuPbZE"
export const getLocalMarkers = () => { export const getLocalMarkers = () => {
return db.markers.get_all() return db.markers.get_all()
@ -47,6 +49,7 @@ export const loadNetwork = (network, userid) => {
return queryMap(data) return queryMap(data)
} }
export const getPositionInformation = async (position) => { export const getPositionInformation = async (position) => {
console.log("Messi===>>",position,mobileAppVersion)
let url = GEOCODDING_URL.concat('?latitude=' + position.latitude + "&longitude=" + position.longitude + "&mobile_app_version=" + mobileAppVersion); let url = GEOCODDING_URL.concat('?latitude=' + position.latitude + "&longitude=" + position.longitude + "&mobile_app_version=" + mobileAppVersion);
console.log("GEOCODING", url); console.log("GEOCODING", url);
const data = fetch(url, { const data = fetch(url, {
@ -57,8 +60,9 @@ export const getPositionInformation = async (position) => {
} }
}) })
.then((response) => response.json()) .then((response) => response.json())
.then((responseJson) => .then((responseJson) =>{
responseJson console.log("Messi2===>>",responseJson)
return responseJson}
).catch((error) => { ).catch((error) => {
console.log("error get position") console.log("error get position")
console.log(error) console.log(error)

View File

@ -1,6 +1,7 @@
import {AsyncStorage} from "react-native"; import {AsyncStorage} from "react-native";
export const storeData = async (key, value) => { export const storeData = async (key, value) => {
console.log("Store data ===>>")
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
try { try {
const val = await AsyncStorage.setItem(key, value); const val = await AsyncStorage.setItem(key, value);

View File

@ -245,7 +245,7 @@ export const saveQuitanceAction = (data, pay = false) => {
} }
}) })
.then(response => { .then(response => {
console.log(response); console.log("Reponse Wallet===>>",response);
dispatch(fetchModifyAvisImpositionSuccess(response)); dispatch(fetchModifyAvisImpositionSuccess(response));
}) })
.catch(error => { .catch(error => {
@ -604,6 +604,8 @@ export const savePenalityReset = () => {
}; };
export const searchUserAction = (data, searchFromMap = false) => { export const searchUserAction = (data, searchFromMap = false) => {
console.log("searchUserAction===>>", data, searchFromMap);
console.log("searchUserActionUrl===>>", searchFromMap ? searchUserHomeUrl : `${searchUserUrl}?name=${data}`);
const auth = store.getState().authKeyReducer; const auth = store.getState().authKeyReducer;
const authKey = auth !== null ? `${auth.authKey.token_type} ${auth.authKey.access_token}` : ''; const authKey = auth !== null ? `${auth.authKey.token_type} ${auth.authKey.access_token}` : '';