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
// TODO: Switch from test to prod and vice versa
defaultConfig {
applicationId "com.test_city.douala3"
// applicationId "com.test_city.douala3"
applicationId "com.test_city.douala3test"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
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",
"HELP": "Help",
"SIMPLE_USER": "Simple User",
@ -136,7 +136,7 @@
"QUARTIER_COMMUNE": "Neighborhood in the town",
"ARRONDISSEMENT": "Borough",
"PATENTE": "Patent",
"TVA": "TVA",
"TVA": "VAT",
"IRPP": "IRPP",
"ANNEE_TAXE": "Paid year taxed",
"ANNEE_TAXE_N": "Paid year taxed N",
@ -275,6 +275,8 @@
"IMAGE_TAKE": "Image take",
"NAME": "Last name(s)",
"FIRSTNAME": "First name(s) ",
"CIVILITY": "Civility",
"NATIONALITY": "Nationality",
"NAME_EMETTEUR": "Issuer first name(s)",
"EMETTEUR": "Issuer",
"FIRSTNAME_EMETTEUR": "Issuer last name(s) ",
@ -449,7 +451,6 @@
"CHOOSE_LANGUAGE": "Choose the language",
"MODIFY_PASSWORD": "Forgotten password",
"CONTACT": "Contact",
"UPDATE": "... update",
"FAQ": "FAQ",
"UPDATE_POSITION_TEXT": "Update my position",
"YOU_ARE": "Are you?",
@ -536,8 +537,8 @@
"MEMBERSHIP_REQUEST": "Membership applications",
"HISTORY_TYPE_REQUEST": "Queries",
"TREAT": "Processed",
"EXIT_TITLE": "Close iLink World!",
"EXIT_DESC": "Do you really want to close iLink World?",
"EXIT_TITLE": "Close SIM_ba!",
"EXIT_DESC": "Do you really want to close SIM_ba?",
"NO_TREAT": "Unprocessed",
"EXIT": "Close",
"PERIOD": "Period",
@ -550,7 +551,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Your account has been activated successfully!",
"HISTORY_END": "End",
"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",
"TEXT_NEED_POSITION": "Please update your location!",
"TITLE_NEED_POSITION": "Your location needs to be updated",
@ -563,12 +564,12 @@
"TITLE_PROBLE_COME": "A problem has been encountered",
"TITLE_SUPPRESS_CONFIRM": "Confirm deletion",
"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_UNABLE_TO_GET_YOUR_POSITION": "Unable to retrieve your location, please make sure your GPS is enabled and 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 SIM_ba",
"RESTART": "REPEAT",
"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",
"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_NETWORK_UNABLE": "Network not available, want to try again?",
"LOADING_TEXT_MARKERS": "More points",
@ -577,7 +578,7 @@
"NO_POINT_FOUND": "No points found ",
"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_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!",
"YOUR_NETWORK": "Select your network",
"YOUR_NETWORK_SELECTED": "Your network",
@ -600,11 +601,10 @@
"UPDATE_DATE": "Date updated",
"ASSIGN_TO_AGENT": "Assign to an agent",
"AVIS_MODIFY_SUCCESS": "Notice successfully amended",
"ORDRE_RECETTE_SUCCES": "Recipe order entered successfully",
"NUMERO_QUITANCE_SUCCES": "Successful receipt number",
"ORDRE_RECETTE_MODIFY_SUCCES": "Recipe order number successfully changed",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Receipt number changed successfully",
"TAXES_SUR_LA_PROPRETE": "Tax on cleanliness",
"TAXES_SUR_LA_PROPRETE": "Synthetic general tax *",
"SAVE": "Save",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Are you sure you want to remove this tax?",
"NUMERO_QUITANCE": "Receipt number",
@ -631,12 +631,10 @@
"PAYMENT_DEADLINE": "Payment deadline",
"TAX_NOTICE_CREATED_AT": "Tax notice created at",
"TOTAL_AMOUNT": "Total amount",
"UPDATE_DATE": "Update date",
"YEAR": "Year",
"TYPE": "Type",
"CODE_MEMBRE": "Sponsor code",
"DISTRICT": "District",
"IDENTIFICATION_NUMBER": "Identification number",
"MUNICIPALITY": "Municipality",
"ID_PATENTE": "ID patent",
"NETWORK_ID": "Network ID",
@ -649,7 +647,7 @@
"PRINCIPAL_AMOUNT": "Principal amount",
"DATE_AVIS_IMPOSITION": "Tax notice date",
"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",
"TAKE_My_POSITION": "Retreive position",
"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",
"HELP": "Aide",
"SIMPLE_USER": "Utilisateur simple",
@ -148,9 +148,9 @@
"ANNEE_TAXE_N_1": "Année taxé payée N-1",
"ANNEE_TAXE_N_2": "Année taxé payée N-2",
"TYPE_ACTIVITE": "Type d'activité",
"TECHNICAL_AGREMENT": "Agrément technique",
"IMMATRICULATION_DGI": "Immatriculation DGI",
"INFORMATION_FICHE_CIRCUIT": "Information fiche circuit",
"TECHNICAL_AGREMENT": "Agrément technique ou Licence",
"IMMATRICULATION_DGI": "NIU",
"INFORMATION_FICHE_CIRCUIT": "Fiche d'identification",
"OTHERS_INFORMATIONS": "Autres informations",
"CREATE_GROUP": "Créer un groupe",
"MANAGE_GROUP": "Gérer le groupe",
@ -285,6 +285,8 @@
"IMAGE_TAKE": "Prise d'image",
"NAME": "Nom(s)",
"FIRSTNAME": "Prénom(s) ",
"CIVILITY": "Civilité",
"NATIONALITY": "Nationalité",
"NAME_EMETTEUR": "Nom(s) émetteur",
"EMETTEUR": "Emetteur",
"FIRSTNAME_EMETTEUR": "Prénom(s) émetteur",
@ -301,15 +303,15 @@
"SUPER_ADMIN": "Super administrateur",
"GEOLOCATED": "Agent géo-localisé",
"DELETE_GEOLOCATED_USER": "Supprimer",
"ADDRESS": "Adresse",
"ADDRESS": "Adresse EX:TotalEnergies Bonateki",
"CREDIT": "Crédit",
"NEXT": "Suivant",
"PREVIOUS": "Précédent",
"SPONSOR_CODE": "Code réseau de taxe",
"CODE_PARRAIN": "Code parrain",
"SPONSOR_CODE": "Code classe de taxes",
"CODE_PARRAIN": "Code hiérarchique ou taxe",
"CODE_SPONSOR": "Code sponsor",
"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",
"COUNTRY": "Pays",
"LOADING_INFO": "Chargement des informations...",
@ -384,7 +386,7 @@
"OK": "OK",
"SIMPLE": "Simple",
"BLOCKED": "Bloqué",
"APP_FULLNAME": "Ilink City",
"APP_FULLNAME": "SIM_ba Mobile",
"GUIDE_TITLE": "Bienvenue dans le Guide de",
"GUIDE_USER_SIMPLE": "Guide pour un utilisateur",
"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",
"CATEGORY": "Catégorie",
"WAY": "Itinéraire",
"ADD_NETWORK": "Ajouter réseau de taxe",
"ADD_NETWORK": "Ajouter une classe de taxes",
"POINT_NUMBER": "Nombres de points",
"SUPERIOR_CODE": "Code parrain",
"SUPERIOR_CODE": "Code hiérarchique ou taxe",
"ADD_SUCCES": "Ajout reussi",
"ADD_SUCCESS_TEXT": "La taxe a été ajoutée avec succès ",
"MEMBER_CODE": "Code membre",
@ -457,7 +459,6 @@
"CHOOSE_LANGUAGE": "Choisir la langue",
"MODIFY_PASSWORD": "Mot de passe oublié",
"CONTACT": "Contact",
"UPDATE": "... mise à jour",
"FAQ": "FAQ",
"UPDATE_POSITION_TEXT": "Mettre à jour ma position",
"YOU_ARE": "Vous êtes ?",
@ -543,8 +544,8 @@
"MEMBERSHIP_REQUEST": "Demandes d'adhésion",
"HISTORY_TYPE_REQUEST": "Requêtes",
"TREAT": "Traité",
"EXIT_TITLE": "Fermer iLink City !",
"EXIT_DESC": "Voulez-vous vraiment fermer iLink City ?",
"EXIT_TITLE": "Fermer SIM_ba Mobile !",
"EXIT_DESC": "Voulez-vous vraiment fermer SIM_ba Mobile ?",
"NO_TREAT": "Non traité",
"EXIT": "Fermer",
"PERIOD": "Période",
@ -557,7 +558,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Votre compte a été activé avec succès !",
"HISTORY_END": "Fin",
"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",
"TEXT_NEED_POSITION": "Veuillez mettre à jour votre position !",
"TITLE_NEED_POSITION": "Votre position doit être mise à jour",
@ -570,12 +571,12 @@
"TITLE_PROBLE_COME": "Un problème a été rencontré",
"TITLE_SUPPRESS_CONFIRM": "Confirmation de suppression",
"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_UNABLE_TO_GET_YOUR_POSITION": "Impossible de recupérez votre position. Veuillez verifier que votre GPS est activé et relancez 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 SIM_ba Mobile",
"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",
"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_NETWORK_UNABLE": "Réseau non disponible, voulez vous réessayer ?",
"LOADING_TEXT_MARKERS": "Suite des points ",
@ -584,10 +585,10 @@
"LAUNCH_POINT_WITH_FILTER": "Voulez-vous relancer la recherche dans un rayon de ",
"LOADING_TEXT_MARKERS_2": "autour",
"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 !",
"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é",
"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",
@ -598,23 +599,21 @@
"ORDRE_RECETTE": "Ordre recette",
"NO_ORDRE_RECETTE": "Aucun ordre de recette",
"MODIFICATION_ORDRE_RECETTE": "Modifier ordre recette",
"SAISIE_NUMERO_QUITANCE": "Saisir numéro quitance",
"MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quitance",
"SAISIR_QUITANCE": "Saisir quitance",
"SAISIE_NUMERO_QUITANCE": "Saisir numéro quittance",
"MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quittance",
"SAISIR_QUITANCE": "Saisir paiement ou quittance",
"CODE_AGENT": "Code agent ",
"AVIS_IMPOSITION": "Déclaration",
"AGENT_INFORMATION": "Informations sur l'agent",
"UPDATE_DATE": "Date de mis à jour",
"ASSIGN_TO_AGENT": "Assigner à un agent",
"AVIS_MODIFY_SUCCESS": "Avis modifié avec succès",
"ORDRE_RECETTE_SUCCES": "Ordre de recette saisi avec succès",
"NUMERO_QUITANCE_SUCCES": "Numéro de quitance enregistré avec succès",
"NUMERO_QUITANCE_SUCCES": "Numéro de quittance enregistré 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",
"TAXES_SUR_LA_PROPRETE": "Taxe sur la propreté",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Numéro de quittance modifié avec succès",
"TAXES_SUR_LA_PROPRETE": "Impôt général synthétique *",
"SAVE": "Enregistrer",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Voulez vous vraiment supprimer cette taxe?",
"NUMERO_QUITANCE": "Numéro quitance",
"NUMERO_QUITANCE": "Numéro quittance",
"QUITANCE": "Quitance",
"ORDRE_DE_RECETTE": "Ordre de recette",
"MODIFY_ORDRE_DE_RECETTE": "Modifier ordre de recette",
@ -643,12 +642,11 @@
"TYPE": "Type",
"CODE_MEMBRE": "Code sponsor",
"DISTRICT": "District",
"IDENTIFICATION_NUMBER": "Numéro d'identification",
"MUNICIPALITY": "Municipalité",
"ID_PATENTE": "ID patente",
"NETWORK_ID": "ID du réseau",
"NEIGHTBORHOOD": "Quartier",
"ORDRE_RECETTE_RECEIPT": "Recette et quitance",
"ORDRE_RECETTE_RECEIPT": "Recette et quittance",
"HISTORY_OF": "Historique des",
"AVIS_IMPOSITIONS": "déclarations",
"ORDRE_RECETTES_RECEIPTS": "recettes et quitances",
@ -656,7 +654,7 @@
"PRINCIPAL_AMOUNT": "Montant principal",
"DATE_AVIS_IMPOSITION": "Date avis imposition",
"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é",
"TAKE_My_POSITION": "Récupération de votre position",
"CREATE_ACTIF": "Créer un actif",
@ -692,7 +690,6 @@
"ACTIF": "actif",
"ACTIFS": "actifs",
"TAXE_INFORMATION": "Informations sur la déclaration",
"ACTIFS": "actifs",
"NUMERO_AVIS_IMPOSITION": "N° déclaration",
"ADD_ORDRE_RECETTE": "Ajouter un ordre de recette",
"PENALITE_ON_TAXE": "Pénalité sur les taxes",
@ -705,14 +702,14 @@
"DELETE_PENALITE": "Supprimer la pénalité",
"TAUX_PENALITE": "Taux de pénalité (%)",
"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",
"SAISIE_PENALITY": "Saisie des pénalités",
"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:",
"AMOUNT_ORDRE_RECETTE": "Montant de l'ordre de recette",
"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 ?",
"USAGER_NAME": "Nom de l'usager",
"NO_USAGER_CORRESPONDING_TO_SEARCH": "Aucun usager ne correspond à votre recherche",
@ -727,9 +724,8 @@
"PENALITE_INCLUSE": "Pénalité incluse",
"SOINS": "Soins",
"INVOICE": "Facture",
"ORDRE_RECETTE_QUITANCE": "Ordre et quitance",
"ORDRE_RECETTE_QUITANCE": "Ordre et quittance",
"ID": "ID",
"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 ?"
}

View File

@ -1,3 +1,5 @@
<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>

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);
let transaction_id = '';
let token = '';
let token = null;
const keys = Object.keys(params);
keys.forEach(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 {uploadImage} from "../../webservice/IlinkConstants";
import Dialog from "react-native-dialog";
import FilteredList from "../login/FilteredList ";
let theme = require('./../../utils/theme.json');
@ -115,7 +116,10 @@ export default class AddNetwork extends Component {
displayImage: false,
loadingUpload: false,
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) => {
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 (
<>
<Animatable.View key={index}>
@ -348,6 +360,65 @@ export default class AddNetwork extends Component {
</> :
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]) ?
this.state.taxes_selected[index].billing_period === 'jour' &&
@ -408,6 +479,9 @@ export default class AddNetwork extends Component {
render() {
const hasPropertyTax = this.state.taxes_selected.some(
t => t && t.name?.toLowerCase() === 'taxe sur la propriété'
);
return (
<View style={style.container}>
<StatusBar
@ -419,8 +493,11 @@ export default class AddNetwork extends Component {
{this.state.loadingUpload && this.renderLoader()}
<ScrollView style={{flex: 1, paddingTop: 30}}>
<View style={style.appContainer}>
<Image source={require('../../assets/img/icon3.png')}
style={{width: responsiveWidth(90), resizeMode: "contain"}}/>
<Image source={require('../../assets/img/icon3.png')}
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>
<Text style={style.title}>{I18n.t('ADD_NETWORK')}</Text>
@ -440,6 +517,17 @@ export default class AddNetwork extends Component {
</> :
<>
{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) => (
index > 0 &&
@ -493,6 +581,7 @@ export default class AddNetwork extends Component {
this.setState({isLoading: false});
});
} else {
console.log("ICI===>")
if (this.ckeckIfFieldIsOK(this.state.password))
this.passwordAnim.shake(800);
else
@ -513,26 +602,38 @@ export default class AddNetwork extends Component {
for (let i = 0; i < this.state.tabTaxe.length; i++) {
if (this.state.taxes_selected[i].hasOwnProperty("id")) {
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,
image: this.state.taxes_selected[i].image,
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],
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],
});
};
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 {
taxes_to_send.push({
let taxe = {
has_image_capture: this.state.taxes_selected[i].has_image_capture,
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],
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],
});
};
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});
if (res) {
if (res['success'] !== undefined) {
@ -596,8 +697,8 @@ const style = StyleSheet.create({
marginTop: 20,
borderColor: 'transparent',
backgroundColor: theme.primaryDarkAdvanced,
height: responsiveHeight(8)
height: responsiveHeight(8),
marginBottom: responsiveHeight(8) // espace ajouté en bas
},
appContainer: {
flexDirection: 'row',

View File

@ -52,7 +52,10 @@ export default class About extends React.Component {
<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(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>
</View>

View File

@ -105,6 +105,7 @@ const styles = StyleSheet.create({
},
img_style: {
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) => {
console.log("createGeolocatedAccounts===>>",JSON.stringify(usagers));
createGeolocatedAccounts(usagers).then((result) => {
console.log("result", result);
console.log("resultcreateGeolocatedAccounts===>>", result);
this.setState({displaySynchronizeLoader: false});
if (!_.isNil(result)) {
@ -556,6 +557,7 @@ class Home extends BaseScreen {
}
createActifsAccounts = (actifs) => {
console.log("createActifsAccounts===>>",actifs)
saveActifsSociety(actifs).then((result) => {
console.log("result", result);
this.setState({displaySynchronizeLoader: false});
@ -634,6 +636,7 @@ class Home extends BaseScreen {
usagersToSend.push(usagersToSave[index].data);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
console.log("Isco2===>>", usagersToSend);
this.createUsagerAccounts(usagersToSend);
}
console.warn("USAGERS FORMATE", usagersToSave);
@ -663,6 +666,7 @@ class Home extends BaseScreen {
usagersToSend.push(usagersToSave[index].data);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
console.log("Isco3===>>", usagersToSend);
this.createUsagerAccounts(usagersToSend);
}
console.warn("USAGERS FORMATE", usagersToSave);
@ -673,9 +677,10 @@ class Home extends BaseScreen {
} else
usagersToSend.push(usagersToSave[index].data);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
this.createUsagerAccounts(usagersToSend);
}
// if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
// 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);
if (usagersToSend.length === (usagersToSave.filter((usager) => !usager.isSaved)).length) {
console.log("Isco5===>>", usagersToSend);
this.createUsagerAccounts(usagersToSend);
}
}
@ -720,6 +726,8 @@ class Home extends BaseScreen {
actif.data.taxes.map((taxe, indexTaxe) => {
console.log("Usagers to send length", actifsToSend.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") {
this.createFormData(taxe.image);
this.uploadImage().then((response) => {
@ -738,6 +746,8 @@ class Home extends BaseScreen {
});
} else {
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)
this.createActifsAccounts(actifsToSend);
}
@ -2423,109 +2433,130 @@ class Home extends BaseScreen {
)
}
renderSearchUser() {
renderSearchUser() {
return (
<MaterialDialog
title={I18n.t("SEARCH")}
visible={this.state.dialogSearchUser}
onCancel={() => this.setState({dialogSearchUser: false})}
onOk={result => {
if(this.state.isPhoneAssureSearch) {
this.props.searchUserAction({
dial_code: this.state.indicatif,
phone: this.state.userName,
}, true);
} else {
this.props.searchUserAction({
dial_code: this.state.indicatif,
name: this.state.userName,
}, true);
}
this.setState({dialogSearchUser: false});
}}
title={I18n.t("SEARCH")}
visible={this.state.dialogSearchUser}
onCancel={() => this.setState({ dialogSearchUser: false })}
onOk={() => {
console.log(
"On ok search user===>>",
this.state.userName,
this.state.indicatif,
this.state.isPhoneAssureSearch,
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 {
payload.name = this.state.userName;
}
// Lance l'action
this.props.searchUserAction(payload, true);
this.setState({ dialogSearchUser: false });
}}
>
<View>
<TextInput
style={{marginTop: 10, height: 46, borderRadius: 5, borderWidth: 1, borderColor: "#ccc"}}
placeholder={this.state.isPhoneAssureSearch ? I18n.t('PHONE') : I18n.t('NAME')}
value={this.state.userName}
keyboardType={this.state.isPhoneAssureSearch ? 'numeric' : 'default'}
onChangeText={(userName) => {
this.setState({userName});
}}
icon={
<FontAwesome
style={{zIndex: 10}}
name={this.state.isPhoneAssureSearch ? 'phone' : 'user'}
size={20}
/>
}
/>
<View>
<TextInput
style={{
marginTop: 10, height: 46, borderRadius: 5, borderWidth: 1, borderColor: "#ccc"
}}
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={
<FontAwesome
style={{ zIndex: 10 }}
name={
this.state.isPhoneAssureSearch
? "phone"
: this.state.isNumeroAssureSearch
? "id-card" // icône FontAwesome5 pour le NIU
: "user"
}
size={20}
/>
}
/>
<View style={{
flexDirection: 'row',
position: 'absolute',
top: 22,
right: 50,
justifyContent: 'space-between',
width: 50
}}>
<FontAwesomeIcon
style={{paddingRight: 5}}
name='phone'
size={20}
color={Color.primaryColor}
onPress={() => {
this.setState({
isNumeroAssureSearch: false,
isPhoneAssureSearch: true
});
}}
/>
<FontAwesomeIcon
style={{paddingRight: 5}}
name='user'
size={20}
color={Color.primaryColor}
onPress={() => {
this.setState({
isNumeroAssureSearch: false,
isPhoneAssureSearch: false
});
}}
/>
<FontAwesomeIcon
style={{paddingRight: 5}}
name="qrcode"
size={20}
color={Color.primaryColor}
onPress={() => {
this.setState({
showQRCodeScanner: true
});
}}
/>
</View>
</View>
{/* <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}
<View
style={{
flexDirection: "row",
position: "absolute",
top: 22,
right: 20,
}}
>
</Fumi>*/}
{/* Mode téléphone */}
<FontAwesomeIcon
name="phone"
size={20}
color={this.state.isPhoneAssureSearch ? Color.primaryColor : "#888"}
onPress={() =>
this.setState({
isPhoneAssureSearch: true,
isNumeroAssureSearch: false
})
}
style={{ marginHorizontal: 5 }}
/>
</MaterialDialog>)
{/* 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
name="qrcode"
size={20}
color={Color.primaryColor}
onPress={() => this.setState({ showQRCodeScanner: true })}
style={{ marginHorizontal: 5 }}
/>
</View>
</View>
</MaterialDialog>
);
}
renderDialogResultSearchUser() {

View File

@ -125,8 +125,10 @@ export default class ActivateAccount extends Component {
justifyContent: 'center',
alignItems: 'center',
}}>
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}>
<Image style={{width: responsiveWidth(90), resizeMode: 'contain',}}
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'center'}}>
<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')}/>
</View>
@ -177,7 +179,9 @@ export default class ActivateAccount extends Component {
alignItems: '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')}/>
</View>
@ -284,7 +288,9 @@ export default class ActivateAccount extends Component {
alignItems: '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')}/>
</View>

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -95,7 +95,8 @@ const log = StyleSheet.create({
img: {
width: responsiveWidth(90),
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: {
color: "white",

View File

@ -17,7 +17,7 @@ import {responsiveHeight, responsiveWidth, responsiveFontSize} from 'react-nativ
import {Fumi, Kaede} from 'react-native-textinput-effects'
import * as Animatable from 'react-native-animatable'
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 route = require('./../../route.json')
@ -147,7 +147,18 @@ export default class CreateAccount extends Component {
this.checkCodeParrain()
}}>
{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>
);
}
@ -504,8 +515,19 @@ export default class CreateAccount extends Component {
}
retreiveSupervisorInfosCode() {
getSupervisorInfoCode().then((result) => {
// 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() {
getSupervisorInfoCodeOffline().then((result) => {
console.warn("SUPERVISOR INFOS CODE", JSON.stringify(result));
storeData(supervisorCode, JSON.stringify(result)).then(() => {
this.setState({displayLoader: false});
@ -603,7 +625,8 @@ export default class CreateAccount extends Component {
} else {
let codeSupervisorsData = JSON.parse(codeSupervisor);
let codeSupervisors = Object.keys(codeSupervisorsData);
let codeSupervisorsDataCodes = codeSupervisorsData.codes;
let codeSupervisors = Object.keys(codeSupervisorsData.codes);
this.setState({codeSupervisorsData});
if (!codeSupervisors.includes(user.member)) {
@ -616,9 +639,18 @@ export default class CreateAccount extends Component {
}], {cancelable: false});
} else {
this.setState({isLoging: false});
let resultInfosCode = codeSupervisorsData[user.member];
this.setState({codeSupervisorData: resultInfosCode});
let resultInfosCode = codeSupervisorsDataCodes[user.member];
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") {
this.props.navigation.push(route.createUserStep, {
type: this.type,
@ -746,6 +778,19 @@ const styles = StyleSheet.create({
textAlign: 'center',
margin: 5,
},
indication: {
color: 'white',
fontSize: 14,
marginLeft: 20,
marginRight: 20,
marginBottom: 10,
},
indicationTitle: {
color: 'white',
fontSize: 14,
marginLeft: 20,
fontWeight: '600',
},
btnvalide: {
marginTop: 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 {
Alert,
BackHandler,
@ -13,20 +18,22 @@ import {
TouchableOpacity,
View
} 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 Button from 'apsl-react-native-button';
import MapView, {Marker} from 'react-native-maps';
import {Dropdown} from 'react-native-material-dropdown-v2';
import isEqual from 'lodash/isEqual';
import isNil from 'lodash/isNil';
import {getPositionInformation} from './../../webservice/MapService';
import I18n from 'react-native-i18n'
import {material} from 'react-native-typography';
import Dialog from "react-native-dialog";
import Geolocation from 'react-native-geolocation-service';
import I18n from 'react-native-i18n';
import MapView, { Marker } from 'react-native-maps';
import { MaterialDialog } from "react-native-material-dialog";
import { Dropdown } from 'react-native-material-dropdown-v2';
import { responsiveHeight, responsiveWidth } from 'react-native-responsive-dimensions';
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 { store } from "../../redux/store";
import { getDefaultTown } from "../../webservice/AuthApi";
import { uploadImage } from "../../webservice/IlinkConstants";
import {
createGeolocatedAccount,
createUserAccount,
@ -35,17 +42,7 @@ import {
getListCountriesActive,
getTownInformationName
} from './../../webservice/AuthApi';
import {MaterialDialog} from "react-native-material-dialog";
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";
import { getPositionInformation } from './../../webservice/MapService';
const GEOLOCATION_OPTIONS = {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000, useSignificantChanges: true};
@ -123,7 +120,8 @@ export default class CreateUserStep2 extends Component {
isLoging: false,
countries: '',
selectedCountry: null,
indicatif: '',
indicatif: '+237',
country: "Cameroon",
snackVisible: false,
snackText: '',
disableNetwork: false,
@ -162,6 +160,17 @@ export default class CreateUserStep2 extends Component {
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) => {
this.dataToSendTemp.append("image", {
name: photo.path.split('/').pop(),
@ -177,6 +186,7 @@ export default class CreateUserStep2 extends Component {
return new Promise(async (resolve, reject) => {
try {
let datas = await getCodeInformation(membre);
console.log("ICI datas===>>",datas)
// Assuming the API returns country and dial_code
const { country, dial_code, ...otherData } = datas;
resolve({ country, dial_code, ...otherData });
@ -219,7 +229,7 @@ export default class CreateUserStep2 extends Component {
try {
const result = await this.retreiveCodeInformation();
console.log("RESULTAT ", result);
console.log("RESULTAT===>> ", result);
if (!result) {
throw new Error("Aucun résultat obtenu");
@ -229,8 +239,8 @@ export default class CreateUserStep2 extends Component {
this.setState({
result,
country,
indicatif: dial_code
// country,
// indicatif: dial_code
});
if (child) {
@ -246,10 +256,10 @@ export default class CreateUserStep2 extends Component {
} : {})
});
} 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 {
const networks = await getCountryNetwork(indicatif);
const networks = await getCountryNetwork("+237");
const reseaux = Object.values(networks).filter(network => network !== "");
this.setState({
networks: reseaux,
@ -260,7 +270,7 @@ export default class CreateUserStep2 extends Component {
console.error("Erreur dans getNetworks:", error);
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, [{
text: "Revenir",
onPress: () => this.props.navigation.pop()
@ -313,6 +323,8 @@ export default class CreateUserStep2 extends Component {
if (jsonMatch) {
countriesData = JSON.parse(jsonMatch[0]);
}
}else{
countriesData = response;
}
const formattedCountries = countriesData.map(country => ({
@ -323,11 +335,11 @@ export default class CreateUserStep2 extends Component {
}));
this.setState({
country: formattedCountries,
// country: formattedCountries,
countries: formattedCountries[0],
isLoading: false,
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);
} catch (error) {
@ -339,7 +351,7 @@ export default class CreateUserStep2 extends Component {
onSelectCountry = (country) => {
this.setState({
selectedCountry: country,
indicatif: country.code_dial,
// indicatif: country.code_dial,
modalVisible: false
});
this.getNetworks(country.code_dial);
@ -387,7 +399,7 @@ export default class CreateUserStep2 extends Component {
const selectedCountry = this.state.countries[index];
this.setState({
selectedCountry: selectedCountry,
indicatif: selectedCountry.code_dial,
// indicatif: selectedCountry.code_dial,
network: null
});
this.getNetworks(selectedCountry.code_dial);
@ -511,7 +523,11 @@ export default class CreateUserStep2 extends Component {
town = result[0];
} else
town = result;
this.setState({town: town});
this.setState({town: {
name: "Douala",
id: "2",
indicatif: "+237"
}});
})
} else {
getDefaultTown().then(result => {
@ -521,7 +537,11 @@ export default class CreateUserStep2 extends Component {
town = resultTowwn[0];
} else
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) {
if (i.code_country === shortcountry) {
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);
}
}
@ -686,7 +709,7 @@ export default class CreateUserStep2 extends Component {
paddingRight: 20,
backgroundColor: 'white'
}}>
<Fumi
{/* <Fumi
iconClass={FontAwesomeIcon}
label={I18n.t('COUNTRY_CHOICE')}
// 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>
<Fumi iconClass={FontAwesomeIcon} iconName={'phone'}
placeholder={I18n.t('PHONE')}
@ -797,15 +800,15 @@ export default class CreateUserStep2 extends Component {
}}
iconSize={20}
onChangeText={(text) => {
let phonenumber = text
this.setState({phone: phonenumber, contact: text})
this.setState({phone: text.trim(), contact: text.trim()})
}}
style={{
marginTop: responsiveHeight(2),
marginRight: responsiveWidth(5),
marginLeft: responsiveWidth(5),
width: responsiveWidth(55),
width: responsiveWidth(90),
borderRadius: 5,
}}
>
@ -818,15 +821,15 @@ export default class CreateUserStep2 extends Component {
}}
iconSize={20}
onChangeText={(text) => {
let phonenumber = text
this.setState({phoneTransaction: phonenumber, contactTransaction: text})
this.setState({phoneTransaction: text.trim(), contactTransaction: text.trim()})
}}
style={{
marginTop: responsiveHeight(2),
marginRight: responsiveWidth(5),
width: responsiveWidth(55),
marginLeft: responsiveWidth(5),
width: responsiveWidth(90),
borderRadius: 5,
}}
>
@ -1043,21 +1046,24 @@ export default class CreateUserStep2 extends Component {
>
<Dropdown
label={I18n.t('COUNTRY_CHOICE')}
data={this.state.countries}
data={[{"code_country": "CM", "code_dial": "+237", "label": "Cameroon", "value": "Cameroon"}]}
useNativeDriver={true}
value={this.state.country === null ? "" :
this.state.country}
// value={this.state.country === null ? "" :
// this.state.country}
value={this.state.country}
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)
}}
valueExtractor={(value) => {
return value
}}
labelExtractor={(value) => {
return value.name
}}
// valueExtractor={(value) => {
// return value
// }}
// labelExtractor={(value) => {
// return value.name
// }}
/>
</View>
<Animatable.View ref={(comp) => {
@ -1070,7 +1076,7 @@ export default class CreateUserStep2 extends Component {
onChangeText={(text) => {
this.setState({indicatif: text})
// this.setState({indicatif: text})
}}
style={{
width: responsiveWidth(30),
@ -1159,7 +1165,12 @@ export default class CreateUserStep2 extends Component {
data['type'] = "create_user"
data['phone'] = indicatif + phone;
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['longitude'] = myPosition.longitude;
for (let i in user) {
@ -1188,7 +1199,7 @@ export default class CreateUserStep2 extends Component {
break;
default:
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})
}
@ -1210,7 +1221,16 @@ export default class CreateUserStep2 extends Component {
checkUserGeolocated() {
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 (this.checkOrShake(phone, this.numanim)) {
if (this.checkOrShake(network, this.networkanim)) {

View File

@ -518,6 +518,9 @@ export class LoginUi extends Component {
</View>
</ScrollView>
<View style={style.logoContaner}>
<Image style={style.byIlinkLogo} source={require('../../../assets/img/by-ilink-world.png')}/>
</View>
</Animated.View>
@ -810,6 +813,12 @@ const style = StyleSheet.create({
},
logo: {
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"
},
title: {

View File

@ -14,7 +14,8 @@ import {
getPasObject,
getPubActiveObject,
getSupervisorInfoCode,
getAppVersion
getAppVersion,
getSupervisorInfoCodeOffline
} from '../../webservice/AuthApi';
import {Bubbles, DoubleBounce, Bars, Pulse} from 'react-native-loader';
import Configuration from "../../webservice/persistences/Configuration";
@ -58,7 +59,7 @@ export default class SplashScreen extends Component {
//
constructor(props) {
super(props);
this.retreiveSupervisorInfosCode();
// this.retreiveSupervisorInfosCode();
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() {
console.log("ComponentDidMount===>>")
this.initializeOfflineMode();
// this.retreiveSupervisorInfosCode();
try {
this.requestCameraPermission()
} catch (e) {
@ -197,15 +219,16 @@ export default class SplashScreen extends Component {
}
retreiveSupervisorInfosCode() {
console.log("RETRIEVE SUPERVISOR INFOS CODE");
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(() => {
getData(supervisorCode).then(resultGet => {
console.log("DATA FROM ASYNC STORAGE", resultGet);
});
});
}).catch(error => {
console.log(error);
console.log("errorGetSupervisorInfoCode", error);
})
}

View File

@ -240,7 +240,8 @@ const styles=StyleSheet.create({
},
logo:{
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: {
width: 48

View File

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

View File

@ -74,8 +74,8 @@ class NumeroQuitanceDetail extends Component {
return {
drawerLabel: () => null,
title: navigation.getParam("isModify", false) ? I18n.t('QUITANCE')
: I18n.t('QUITANCE'),
title: navigation.getParam("isModify", false) ? I18n.t('PAYMENT')
: I18n.t('PAYMENT'),
headerTintColor: 'white',
headerStyle: {
backgroundColor: Color.primaryColor,
@ -119,15 +119,16 @@ class NumeroQuitanceDetail extends Component {
added_revenue_orders_items: [],
displayAddOrdreRecette: false,
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: [
{
title: I18n.t('WALLET'),
value: 'wallet'
},
{
title: I18n.t('CASH'),
value: 'cash'
},
// {
// title: I18n.t('WALLET'),
// value: 'wallet'
// },
// {
// title: I18n.t('CASH'),
// value: 'cash'
// },
],
paymentMethod: 'wallet',
paymentUrl: '',
@ -285,15 +286,16 @@ class NumeroQuitanceDetail extends Component {
if (nextProps.paymentMethod !== null) {
if (nextProps.paymentMethod.result !== null) {
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 = [
{
title: I18n.t('WALLET'),
value: 'wallet'
},
{
title: I18n.t('CASH'),
value: 'cash'
},
// {
// title: I18n.t('WALLET'),
// value: 'wallet'
// },
// {
// title: I18n.t('CASH'),
// value: 'cash'
// },
]
this.setState({
paymentMethods: [...paymentsMethods, ...nextProps.paymentMethod.result.response.methods]
@ -947,7 +949,7 @@ class NumeroQuitanceDetail extends Component {
disabled={true}
textStyle={styles.textbtnstyle}
>
{this.state.isModify ? I18n.t('MODIFY') : I18n.t('SAVE')}
{this.state.isModify ? I18n.t('MODIFY') : I18n.t('PAY')}
</Button>
</View>

View File

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

View File

@ -1,5 +1,5 @@
{
"WELCOME": "Welcome to iLink World !",
"WELCOME": "Welcome to SIM_ba !",
"WAITING_LONG": "Waiting for a moment",
"HELP": "Help",
"SIMPLE_USER": "Simple User",
@ -13,6 +13,7 @@
"THE_AGENT": "Agent",
"USER": "User",
"HYPERVISOR": "Hypervisor",
"YOU_HAVE": "You have",
"OPEN": "Open",
"POSITION": "My position",
"TAKE_MY_PLACE": "Take my position",
@ -34,25 +35,18 @@
"ASK_FOR_SUPERVISOR1": "Ask to become a supervisor",
"CREDIT_ASK_FROM_MEMBERS": "Credit requests from your members",
"ASK_MEMBERS": "Membership applications",
"MY_ACCOUNT": "My account",
"WALLET": "Wallet",
"AMOUNT_LABEL": "Amount",
"AMOUNT_LABEL_DESCRIPTION": "Please enter the amount",
"DESTINATAIRE": "Recipient",
"ERROR_LABEL": "Error",
"NO_BANK_AVAILABLE": "No bank available",
"BANK_LIST": "Bank list",
"NO_OPERATOR_AVAILABLE": "No operator available",
"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",
"PAYMENT_DONE": "Payment done",
"PAYMENT_ERROR": "Payment error",
"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_SUCCESS": "Deposit done successfully",
"SUCCESS": "Success",
"ETAT": "State",
"MY_ACCOUNT": "My account",
"WALLET": "Wallet",
"DEPOSIT": "Deposit",
"EN_ATTENTE_DE_VALIDATION": "Waiting for validation",
"REMBOURSE": "Reimbursed",
@ -62,8 +56,17 @@
"RETRAIT_ARGENT": "Receive money",
"CONFIRM_DEPOSIT": "Confirm deposit",
"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",
"CHANGE_SOURCE_CARD": "Change the type of entry number",
"CREDIT_CARD": "Credit card",
"CREDIT_ACCOUNT": "Credit account",
"SAVINGS_ACCOUNT": "Saving account",
@ -77,15 +80,18 @@
"CARD_EXPIRY_LABEL": "Expiry.",
"CARD_CVC_LABEL": "CVC/CCV",
"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",
"PLEASE_ENTER_THE_AMOUNT": "Please enter the amount",
"CHOOSE_OPTION": "Please choose an option",
"CHOOSE_OPERATOR": "Please choose an operator",
"EXPIRY_CARD_ERROR": "Date incorrect",
"CARD_NUMBER_ERROR": "Card number incorrect",
"AMOUNT_LABEL": "Amount",
"AMOUNT_LABEL_DESCRIPTION": "Please enter the amount",
"DESTINATAIRE": "Recipient",
"WITHDRAWAL": "Withdrawal",
"LINK_CARD": "Link my card",
"LINK_CARD_REATTACH": "Link | Reattach",
@ -137,16 +143,21 @@
"QUARTIER_COMMUNE": "Neighborhood in the town",
"ARRONDISSEMENT": "Borough",
"PATENTE": "Patent",
"TVA": "TVA",
"TVA": "VAT",
"IRPP": "IRPP",
"ANNEE_TAXE": "Paid year taxed",
"ANNEE_TAXE_N": "Paid year taxed N",
"ANNEE_TAXE_N_1": "Année taxé payée N-1",
"ANNEE_TAXE_N_2": "Année taxé payée N-2",
"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",
"ERROR_CREATION_GROUP": "Creation error",
"ERROR_JOIN_GROUP": "Join error",
"SUCCES_JOIN_GROUP": "Group join success",
"CREATE_GROUP": "Create group",
"MANAGE_GROUP": "Manage group",
"VALIDATION_DEMAND": "Validation request",
@ -234,7 +245,6 @@
"COMMISSION_TRANSFER_ERROR_EMPTY": "The commission balance is empty",
"CONFIRM": "Confirm",
"CONFIRM_TRANSFER_COMMISSION": "Confirm commission transfer",
"CREATION_DATE": "Creation date",
"PRINCIPAL_ACCOUNT_TITLE": "Principal account",
"NUMERO_COMPTE": "Account number",
"NO_WALLET_ACTIVED": "No wallet is activated for your account",
@ -276,6 +286,8 @@
"IMAGE_TAKE": "Image take",
"NAME": "Last name(s)",
"FIRSTNAME": "First name(s) ",
"CIVILITY": "Civility",
"NATIONALITY": "Nationality",
"NAME_EMETTEUR": "Issuer first name(s)",
"EMETTEUR": "Issuer",
"FIRSTNAME_EMETTEUR": "Issuer last name(s) ",
@ -403,10 +415,6 @@
"CANCEL_LABEL": "Cancel",
"SUBMIT_LABEL": "Submit",
"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_3": "Clicking the '+' button will open the options menu",
"TEXT_GUIDE_USER_4": "Click on a marker to get the information on a point",
@ -450,7 +458,6 @@
"CHOOSE_LANGUAGE": "Choose the language",
"MODIFY_PASSWORD": "Forgotten password",
"CONTACT": "Contact",
"UPDATE": "... update",
"FAQ": "FAQ",
"UPDATE_POSITION_TEXT": "Update my position",
"YOU_ARE": "Are you?",
@ -514,11 +521,13 @@
"HISTORY_TYPE": "Type",
"HISTORY_TYPE_ASK": "Requests",
"REQUEST_RECEIVE": "Requests received",
"DEMANDE_RECEIVE": "Request received",
"MY_DEMANDE": "My requests",
"PHONE_TRANSACTION": "Transaction number",
"DEMAND_TEXT_FIRST_PART": "made a request for",
"DEMAND_TEXT_FIRST_PART_YOU": "You made a request for ",
"REQUEST_SEND": "Request Sent",
"DEMANDE_SEND": "Request sent",
"DEMAND_RECEIVE": "Requests received",
"DEMAND_VALIDATION_GROUP_RECEIVE": "Validation requests",
"DEMAND_DELETE_GROUP_RECEIVE": "Removal requests",
@ -537,8 +546,8 @@
"MEMBERSHIP_REQUEST": "Membership applications",
"HISTORY_TYPE_REQUEST": "Queries",
"TREAT": "Processed",
"EXIT_TITLE": "Close iLink World!",
"EXIT_DESC": "Do you really want to close iLink World?",
"EXIT_TITLE": "Close SIM_ba!",
"EXIT_DESC": "Do you really want to close SIM_ba?",
"NO_TREAT": "Unprocessed",
"EXIT": "Close",
"PERIOD": "Period",
@ -551,7 +560,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Your account has been activated successfully!",
"HISTORY_END": "End",
"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",
"TEXT_NEED_POSITION": "Please update your location!",
"TITLE_NEED_POSITION": "Your location needs to be updated",
@ -564,12 +573,12 @@
"TITLE_PROBLE_COME": "A problem has been encountered",
"TITLE_SUPPRESS_CONFIRM": "Confirm deletion",
"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_UNABLE_TO_GET_YOUR_POSITION": "Unable to retrieve your location, please make sure your GPS is enabled and 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 SIM_ba",
"RESTART": "REPEAT",
"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",
"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_NETWORK_UNABLE": "Network not available, want to try again?",
"LOADING_TEXT_MARKERS": "More points",
@ -578,7 +587,7 @@
"NO_POINT_FOUND": "No points found ",
"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_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!",
"YOUR_NETWORK": "Select your network",
"YOUR_NETWORK_SELECTED": "Your network",
@ -605,7 +614,7 @@
"NUMERO_QUITANCE_SUCCES": "Successful receipt number",
"ORDRE_RECETTE_MODIFY_SUCCES": "Recipe order number successfully changed",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Receipt number changed successfully",
"TAXES_SUR_LA_PROPRETE": "Tax on cleanliness",
"TAXES_SUR_LA_PROPRETE": "Synthetic general tax *",
"SAVE": "Save",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Are you sure you want to remove this tax?",
"NUMERO_QUITANCE": "Receipt number",
@ -613,7 +622,6 @@
"ORDRE_DE_RECETTE": "Recipe order",
"MODIFY_ORDRE_DE_RECETTE": "Change recipe order",
"ORDRE_DE_RECETTE_NUMBER": "Recipe order number",
"ORDRE_RECETTE_SUCCES": "Recipe order successfully changed",
"RECEIPT_NUMBER": "Receipt number",
"NUMBER": "Number",
"ACTION": "Action",
@ -632,12 +640,10 @@
"PAYMENT_DEADLINE": "Payment deadline",
"TAX_NOTICE_CREATED_AT": "Tax notice created at",
"TOTAL_AMOUNT": "Total amount",
"UPDATE_DATE": "Update date",
"YEAR": "Year",
"TYPE": "Type",
"CODE_MEMBRE": "Sponsor code",
"DISTRICT": "District",
"IDENTIFICATION_NUMBER": "Identification number",
"MUNICIPALITY": "Municipality",
"ID_PATENTE": "ID patent",
"NETWORK_ID": "Network ID",
@ -650,7 +656,7 @@
"PRINCIPAL_AMOUNT": "Principal amount",
"DATE_AVIS_IMPOSITION": "Tax notice date",
"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",
"TAKE_My_POSITION": "Retreive position",
"CREATE_ACTIF": "Create asset",
@ -691,6 +697,7 @@
"PENALITE_ON_TAXE": "Penalty on taxes",
"PENALITE_MANAGE": "Penalty management",
"PENALITE": "Penalty",
"PENALITES": "Penalty",
"NO_PENALITE": "No penality",
"MODIFY_PENALITE": "Modify penality",
"DELETE_PENALITE": "Delete penality",
@ -698,10 +705,12 @@
"TAUX_PENALITE": "Penalty rate (%)",
"TAUX": "Rate",
"NO_ORDRE_RECETTE_WITH_QUITANCE": "No recipe order with tax notice",
"SAVE_PENALITY": "Penalty saved",
"SAISIE_PENALITY": "Entering penalties",
"MODIFICATION_SAISIE_PENALITY": "Modification/Deletion",
"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_TAX_NOTICE": "Tax Notice Amount",
"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 ?",
"USAGER_NAME": "User name",
@ -711,5 +720,45 @@
"BY_QR_CODE": "By QR Code",
"SCAN": "Scan",
"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",
"HELP": "Aide",
"SIMPLE_USER": "Utilisateur simple",
@ -45,7 +45,7 @@
"SUCCESS": "Succès",
"ETAT": "Etat",
"MY_ACCOUNT": "Mon compte",
"WALLET": "Wallet",
"WALLET": "Portefeuille",
"DEPOSIT": "Dépôt",
"EN_ATTENTE_DE_VALIDATION": "En attente de validation",
"REMBOURSE": "Remboursé",
@ -134,7 +134,6 @@
"TAXE": "Taxe",
"INTERET": "Intérêt",
"SOCIETY_TYPE": "Type de société",
"IDENTIFICATION_NUMBER": "Numéro d'identification",
"REGISTRE_COMMERCE": "Registre de commerce",
"NOM_RESPONSABLE": "Nom du responsable",
"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_2": "Année taxé payée N-2",
"TYPE_ACTIVITE": "Type d'activité",
"TECHNICAL_AGREMENT": "Agrément technique",
"IMMATRICULATION_DGI": "Immatriculation DGI",
"INFORMATION_FICHE_CIRCUIT": "Information fiche circuit",
"TECHNICAL_AGREMENT": "Agrément technique ou Licence",
"IMMATRICULATION_DGI": "NIU",
"INFORMATION_FICHE_CIRCUIT": "Fiche d'identification",
"OTHERS_INFORMATIONS": "Autres informations",
"CREATE_GROUP": "Créer un groupe",
"MANAGE_GROUP": "Gérer le groupe",
@ -258,7 +257,6 @@
"NO_WALLET_ACTIVED": "Aucun wallet n'est activé pour votre compte",
"TRANSFER_TO_PRINCIPAL_ACCOUNT": "Transférer commissions",
"PRINCIPAL": "Principal",
"CREATION_DATE": "Date de création",
"ENTER_YOUR_CARD_ID": "Entrer vos identifiants bancaires",
"THE_ACCOUNT": "Le compte ",
"NO_GEO_POINT_CODE": "Vous n'avez aucun point geolocalisé libre",
@ -285,6 +283,8 @@
"IMAGE_TAKE": "Prise d'image",
"NAME": "Nom(s)",
"FIRSTNAME": "Prénom(s) ",
"CIVILITY": "Civilité",
"NATIONALITY": "Nationalité",
"NAME_EMETTEUR": "Nom(s) émetteur",
"EMETTEUR": "Emetteur",
"FIRSTNAME_EMETTEUR": "Prénom(s) émetteur",
@ -301,15 +301,15 @@
"SUPER_ADMIN": "Super administrateur",
"GEOLOCATED": "Agent géo-localisé",
"DELETE_GEOLOCATED_USER": "Supprimer",
"ADDRESS": "Adresse",
"ADDRESS": "Adresse EX:TotalEnergies Bonateki",
"CREDIT": "Crédit",
"NEXT": "Suivant",
"PREVIOUS": "Précédent",
"SPONSOR_CODE": "Code réseau de taxe",
"CODE_PARRAIN": "Code parrain",
"SPONSOR_CODE": "Code classe de taxes",
"CODE_PARRAIN": "Code hiérarchique ou taxe",
"CODE_SPONSOR": "Code sponsor",
"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",
"COUNTRY": "Pays",
"LOADING_INFO": "Chargement des informations...",
@ -384,7 +384,7 @@
"OK": "OK",
"SIMPLE": "Simple",
"BLOCKED": "Bloqué",
"APP_FULLNAME": "Ilink City",
"APP_FULLNAME": "SIM_ba Mobile",
"GUIDE_TITLE": "Bienvenue dans le Guide de",
"GUIDE_USER_SIMPLE": "Guide pour un utilisateur",
"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",
"CATEGORY": "Catégorie",
"WAY": "Itinéraire",
"ADD_NETWORK": "Ajouter réseau de taxe",
"ADD_NETWORK": "Ajouter une classe de taxes",
"POINT_NUMBER": "Nombres de points",
"SUPERIOR_CODE": "Code parrain",
"SUPERIOR_CODE": "Code hiérarchique ou taxe",
"ADD_SUCCES": "Ajout reussi",
"ADD_SUCCESS_TEXT": "La taxe a été ajoutée avec succès ",
"MEMBER_CODE": "Code membre",
@ -521,11 +521,13 @@
"HISTORY_TYPE": "Type",
"INVALID_MONTANT": "Montant invalide",
"HISTORY_TYPE_ASK": "Demandes",
"REQUEST_RECEIVE": "Demande reçue",
"DEMANDE_RECEIVE": "Demandes reçues",
"MY_DEMANDE": "Mes demandes",
"PHONE_TRANSACTION": "Numéro de transaction",
"DEMAND_TEXT_FIRST_PART": "a 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",
"DEMAND_RECEIVE": "Demandes reçues",
"DEMAND_VALIDATION_GROUP_RECEIVE": "Demandes de validation",
@ -544,8 +546,8 @@
"MEMBERSHIP_REQUEST": "Demandes d'adhésion",
"HISTORY_TYPE_REQUEST": "Requêtes",
"TREAT": "Traité",
"EXIT_TITLE": "Fermer iLink City !",
"EXIT_DESC": "Voulez-vous vraiment fermer iLink City ?",
"EXIT_TITLE": "Fermer SIM_ba Mobile !",
"EXIT_DESC": "Voulez-vous vraiment fermer SIM_ba Mobile ?",
"NO_TREAT": "Non traité",
"EXIT": "Fermer",
"PERIOD": "Période",
@ -558,7 +560,7 @@
"ACCOUNT_ACTIVATE_TEXT": "Votre compte a été activé avec succès !",
"HISTORY_END": "Fin",
"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",
"TEXT_NEED_POSITION": "Veuillez mettre à jour votre position !",
"TITLE_NEED_POSITION": "Votre position doit être mise à jour",
@ -571,12 +573,12 @@
"TITLE_PROBLE_COME": "Un problème a été rencontré",
"TITLE_SUPPRESS_CONFIRM": "Confirmation de suppression",
"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_UNABLE_TO_GET_YOUR_POSITION": "Impossible de recupérez votre position. Veuillez verifier que votre GPS est activé et relancez 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 SIM_ba Mobile",
"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",
"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_NETWORK_UNABLE": "Réseau non disponible, voulez vous réessayer ?",
"LOADING_TEXT_MARKERS": "Suite des points ",
@ -585,10 +587,10 @@
"LAUNCH_POINT_WITH_FILTER": "Voulez-vous relancer la recherche dans un rayon de ",
"LOADING_TEXT_MARKERS_2": "autour",
"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 !",
"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é",
"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",
@ -599,24 +601,22 @@
"ORDRE_RECETTE": "Ordre recette",
"NO_ORDRE_RECETTE": "Aucun ordre de recette",
"MODIFICATION_ORDRE_RECETTE": "Modifier ordre recette",
"SAISIE_NUMERO_QUITANCE": "Saisir numéro quitance",
"MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quitance",
"SAISIR_QUITANCE": "Saisir quitance",
"SAISIE_NUMERO_QUITANCE": "Effectuer un paiement",
"MODIFICATION_NUMERO_QUITANCE": "Modifier numéro quittance",
"SAISIR_QUITANCE": "Gestion paiement ou quittance",
"CODE_AGENT": "Code agent ",
"AVIS_IMPOSITION": "Déclaration",
"AGENT_INFORMATION": "Informations sur l'agent",
"UPDATE_DATE": "Date de mis à jour",
"ASSIGN_TO_AGENT": "Assigner à un agent",
"AVIS_MODIFY_SUCCESS": "Avis modifié avec succès",
"ORDRE_RECETTE_SUCCES": "Ordre de recette saisi avec succès",
"NUMERO_QUITANCE_SUCCES": "Numéro de quitance enregistré avec succès",
"NUMERO_QUITANCE_SUCCES": "Numéro de quittance enregistré 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",
"TAXES_SUR_LA_PROPRETE": "Taxe sur la propreté",
"NUMERO_QUITANCE_MODIFY_SUCCES": "Numéro de quittance modifié avec succès",
"TAXES_SUR_LA_PROPRETE": "Impôt général synthétique *",
"SAVE": "Enregistrer",
"TEXT_SUPPRESS_CONFIRM_TAXE": "Voulez vous vraiment supprimer cette taxe?",
"NUMERO_QUITANCE": "Numéro quitance",
"QUITANCE": "Quitance",
"NUMERO_QUITANCE": "Numéro quittance",
"QUITANCE": "Quittance",
"ORDRE_DE_RECETTE": "Ordre de recette",
"MODIFY_ORDRE_DE_RECETTE": "Modifier ordre de recette",
"ORDRE_DE_RECETTE_NUMBER": "Numéro d'ordre de recette",
@ -624,7 +624,6 @@
"RECEIPT_NUMBER": "Numéro de reçu",
"NUMBER": "Numéro",
"ACTION": "Action",
"UPDATE": "Mis à jour",
"ADD": "Ajout",
"ID_REVENUE_ORDRE": "ID ordre de recette",
"ID_SUPER": "ID superviseur",
@ -649,21 +648,21 @@
"ID_PATENTE": "ID patente",
"NETWORK_ID": "ID du réseau",
"NEIGHTBORHOOD": "Quartier",
"ORDRE_RECETTE_RECEIPT": "Recette et quitance",
"ORDRE_RECETTE_RECEIPT": "Recette et quittance",
"HISTORY_OF": "Historique des",
"AVIS_IMPOSITIONS": "déclarations",
"ORDRE_RECETTES_RECEIPTS": "recettes et quitances",
"QUITANCES": "quitances",
"ORDRE_RECETTES_RECEIPTS": "recettes et quittances",
"QUITANCES": "quittances",
"PRINCIPAL_AMOUNT": "Montant principal",
"DATE_AVIS_IMPOSITION": "Date avis imposition",
"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é",
"TAKE_My_POSITION": "Récupération de votre position",
"CREATE_ACTIF": "Créer un actif",
"IMPOSSIBLE_TO_CONNECT_INTERNET": "Vérifier votre connexion internet. Voulez-vous réessayer ?",
"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 ?",
"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",
@ -673,13 +672,13 @@
"HOW_WOULD_YOU_WANT_TO_TAKE_IMAGE": "Comment voulez-vous prendre l'image?",
"FROM_GALLERY": "Depuis la galerie",
"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",
"SAUVEGARDER_OF_USAGER": "Création des comptes usagers: ",
"SAUVEGARDER_OF_USAGER_LOADING_SAVE": "Création des comptes usagers sauvegardés... ",
"SAUVEGARDER_OF_USAGER": "Création des contribuables: ",
"SAUVEGARDER_OF_USAGER_LOADING_SAVE": "Création des contribuables 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_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é ?",
"TAXES_SUR_LA_PUBLICITE": "Taxes sur la publicité",
"TAXE_REQUIRED_IMAGE": "L'image est requise pour la taxe",
@ -693,7 +692,6 @@
"ACTIF": "actif",
"ACTIFS": "actifs",
"TAXE_INFORMATION": "Informations sur la déclaration",
"ACTIFS": "actifs",
"NUMERO_AVIS_IMPOSITION": "N° déclaration",
"ADD_ORDRE_RECETTE": "Ajouter un ordre de recette",
"PENALITE_ON_TAXE": "Pénalité sur les taxes",
@ -706,18 +704,18 @@
"DELETE_PENALITE": "Supprimer la pénalité",
"TAUX_PENALITE": "Taux de pénalité (%)",
"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",
"SAISIE_PENALITY": "Saisie des pénalités",
"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:",
"AMOUNT_ORDRE_RECETTE": "Montant de l'ordre de recette",
"AMOUNT_TAX_NOTICE": "Montant de la déclaration",
"YOU_CANT_DELETE_LAST_TAX_NOTICE": "Une quitance doit contenir au moins un ordre de recette",
"WOULD_YOU_WANT_SEARCH_BY_NAME": "Voulez-vous rechercher l'usager par son nom ?",
"USAGER_NAME": "Nom de l'usager",
"NO_USAGER_CORRESPONDING_TO_SEARCH": "Aucun usager ne correspond à votre recherche",
"USAGER_SEARCH": "Recherche d'un usager",
"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 le contribuable par son nom ?",
"USAGER_NAME": "Nom du contribuable",
"NO_USAGER_CORRESPONDING_TO_SEARCH": "Aucun contribuable ne correspond à votre recherche",
"USAGER_SEARCH": "Recherche d'un contribuable",
"BY_NAME": "Par nom",
"BY_QR_CODE": "Par QR Code",
"SCAN": "Scanner",
@ -728,7 +726,7 @@
"PENALITE_INCLUSE": "Pénalité incluse",
"SOINS": "Soins",
"INVOICE": "Facture",
"ORDRE_RECETTE_QUITANCE": "Ordre et quitance",
"ORDRE_RECETTE_QUITANCE": "Ordre et quittance",
"ID": "ID",
"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 ?",
@ -739,5 +737,28 @@
"PAYMENT": "Paiement",
"AVIS_NON_EMIS": "Avis non émis",
"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),
});
let responseJson = null;
console.log("response1===>>",data,response)
let responseText = await response.text()
console.log("response2===>>",data,responseText)
try {
console.warn("SERVER RESPONSE SUCCESS", responseText);
responseJson = JSON.parse(responseText)
@ -395,6 +397,9 @@ export const getTownInformationName = (town) => {
export const getSupervisorInfoCode = () => {
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) => {
const user = await readUser();
const items = await queryData({
@ -406,7 +411,7 @@ export const generateAgentGeo = async (newPhone) => {
}, memberActionUrl)
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 items = await queryData({
"type": "assignNetworkAgentToGeo",
@ -418,7 +423,8 @@ export const AssignAgentGeo = async (codeValidation, phone, taxes, id_agent, pas
"lang": I18n.currentLocale(),
agentId: id_agent,
password,
id_tax_notice
id_tax_notice,
neighborhood
}, memberActionUrl)
return items;
}

View File

@ -1,35 +1,17 @@
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";
export const testBaseUrl = "https://city.ilink-app.com:8081";*/
// TODO: Switch from test to prod and vice versa
// 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 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 memberActionUrl = baseUrl + '/interacted/MembersAction.php';

View File

@ -3,9 +3,11 @@ import React, {Component} from 'react';
var db = require('./persistences/db.js');
import I18n from 'react-native-i18n'
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"
export const getLocalMarkers = () => {
return db.markers.get_all()
@ -47,6 +49,7 @@ export const loadNetwork = (network, userid) => {
return queryMap(data)
}
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);
console.log("GEOCODING", url);
const data = fetch(url, {
@ -57,8 +60,9 @@ export const getPositionInformation = async (position) => {
}
})
.then((response) => response.json())
.then((responseJson) =>
responseJson
.then((responseJson) =>{
console.log("Messi2===>>",responseJson)
return responseJson}
).catch((error) => {
console.log("error get position")
console.log(error)

View File

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

View File

@ -245,7 +245,7 @@ export const saveQuitanceAction = (data, pay = false) => {
}
})
.then(response => {
console.log(response);
console.log("Reponse Wallet===>>",response);
dispatch(fetchModifyAvisImpositionSuccess(response));
})
.catch(error => {
@ -604,6 +604,8 @@ export const savePenalityReset = () => {
};
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 authKey = auth !== null ? `${auth.authKey.token_type} ${auth.authKey.access_token}` : '';