diff --git a/android/app/build.gradle b/android/app/build.gradle
index 646f89e..915f0d4 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -130,10 +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.douala3test"
+ applicationId "com.test_city.douala4"
+ // applicationId "com.test_city.douala4test"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
missingDimensionStrategy 'react-native-camera', 'general'
diff --git a/android/app/src/main/java/com/test/ilinkcity_douala3/MainActivity.java b/android/app/src/main/java/com/test/ilinkcity_douala3/MainActivity.java
index 3f9aa08..48c9598 100644
--- a/android/app/src/main/java/com/test/ilinkcity_douala3/MainActivity.java
+++ b/android/app/src/main/java/com/test/ilinkcity_douala3/MainActivity.java
@@ -13,7 +13,7 @@ public class MainActivity extends ReactActivity {
*/
@Override
protected String getMainComponentName() {
- return "ilinkcity_douala3";
+ return "ilinkcity_douala4";
}
@Override
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index ede7f3c..91ad80e 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index 65386ca..01e58bf 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 06884cf..6360010 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index e9c09ae..5a4b104 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 619ec0c..15755c2 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index e95fb8e..2e7d018 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,4 +1,5 @@
- Test SIM_ba mobile CAD3
-
+
+
+ SIM_ba mobile CAD4
diff --git a/app.json b/app.json
index 9d4c142..7e1f9e3 100644
--- a/app.json
+++ b/app.json
@@ -1,4 +1,4 @@
{
- "name": "ilinkcity_douala3",
- "displayName": "ilinkcity_douala3"
+ "name": "ilinkcity_douala4",
+ "displayName": "ilinkcity_douala4"
}
\ No newline at end of file
diff --git a/app/assets/img/icon3.png b/app/assets/img/icon3.png
index a0b3ca5..073734d 100644
Binary files a/app/assets/img/icon3.png and b/app/assets/img/icon3.png differ
diff --git a/app/assets/img/logo.png b/app/assets/img/logo.png
index 861148a..ebfe0a7 100644
Binary files a/app/assets/img/logo.png and b/app/assets/img/logo.png differ
diff --git a/app/assets/img/png/wallet.png b/app/assets/img/png/wallet.png
index cb1cb71..ebfe0a7 100644
Binary files a/app/assets/img/png/wallet.png and b/app/assets/img/png/wallet.png differ
diff --git a/app/screens/account/AddNetwork.js b/app/screens/account/AddNetwork.js
index a2b4b5a..f867bbb 100644
--- a/app/screens/account/AddNetwork.js
+++ b/app/screens/account/AddNetwork.js
@@ -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 (
<>
@@ -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é' && (
+ <>
+
+
+ {
+ const built = [...this.state.built];
+ built[index] = value === 'Oui';
+ this.setState({built});
+ }}
+ />
+
+
+ {mercurialValue != null && (
+
+ {`${I18n.t('MERCURIAL_VALUE')}: ${mercurialValue}`}
+
+ )}
+ {this.state.built[index] && (
+
+ {
+ const building_value = [...this.state.building_value];
+ building_value[index] = value;
+ this.setState({building_value});
+ }}
+ />
+
+ )}
+ >
+ )
+ }
{
!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 (
:
<>
{this.renderTaxesDropdown(0)}
+ {hasPropertyTax && (
+
+ {
+ this.setState({neighborhood: selectedItem.name});
+ }}
+ />
+
+ )}
{
this.state.tabTaxe.map((element, index) => (
index > 0 &&
@@ -517,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) {
@@ -600,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',
diff --git a/app/screens/login/CreateUserStep.js b/app/screens/login/CreateUserStep.js
index 59454e6..33c6b64 100644
--- a/app/screens/login/CreateUserStep.js
+++ b/app/screens/login/CreateUserStep.js
@@ -4,6 +4,7 @@ import Button from 'apsl-react-native-button';
import axios from 'axios';
import _ from 'lodash';
import isNil from 'lodash/isNil';
+import React from 'react';
import {Component} from 'react';
import {
Alert,
@@ -152,7 +153,7 @@ class CreateUserStep extends Component {
technical_approval: null,
municipality: 'Douala',
neighborhood: null,
- district: 'Douala 3eme',
+ district: 'Douala 4',
id_patente: null,
TVA: false,
IRPP: false,
diff --git a/app/screens/login/createAccount.js b/app/screens/login/createAccount.js
index 37ce805..cb44bbc 100644
--- a/app/screens/login/createAccount.js
+++ b/app/screens/login/createAccount.js
@@ -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')
@@ -515,8 +515,19 @@ export default class CreateAccount extends Component {
}
+ // retreiveSupervisorInfosCode() {
+ // getSupervisorInfoCode().then((result) => {
+ // console.warn("SUPERVISOR INFOS CODE", JSON.stringify(result));
+ // storeData(supervisorCode, JSON.stringify(result)).then(() => {
+ // this.setState({displayLoader: false});
+ // });
+ // }).catch(error => {
+ // //console.log(error);
+ // })
+ // }
+
retreiveSupervisorInfosCode() {
- getSupervisorInfoCode().then((result) => {
+ getSupervisorInfoCodeOffline().then((result) => {
console.warn("SUPERVISOR INFOS CODE", JSON.stringify(result));
storeData(supervisorCode, JSON.stringify(result)).then(() => {
this.setState({displayLoader: false});
@@ -614,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)) {
@@ -627,8 +639,17 @@ 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, {
diff --git a/app/screens/splashscreen/SplashScreen.js b/app/screens/splashscreen/SplashScreen.js
index 18c554a..57d98fd 100644
--- a/app/screens/splashscreen/SplashScreen.js
+++ b/app/screens/splashscreen/SplashScreen.js
@@ -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,10 +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.retreiveSupervisorInfosCode();
+ this.initializeOfflineMode();
+ // this.retreiveSupervisorInfosCode();
try {
this.requestCameraPermission()
} catch (e) {
diff --git a/app/screens/wallet/regisseur/AvisImpositionDetail.js b/app/screens/wallet/regisseur/AvisImpositionDetail.js
index 78a1eb0..c9719f4 100644
--- a/app/screens/wallet/regisseur/AvisImpositionDetail.js
+++ b/app/screens/wallet/regisseur/AvisImpositionDetail.js
@@ -394,7 +394,7 @@ class AvisImpositionDetail extends Component {
marginLeft: 20
}}
/>
- {`${item.lastname} | ${item.email}`}
+ {`${item.lastname} | ${item.email}`}
- {`${item.email} | ${item.phone}`}
+ {`${item.email} | ${item.phone}`}
- {`${item.adresse}`}
+ {`${item.adresse}`}
{/*
{`${this.state.item.amount}`}
+ style={[styles.simpleuser,styles.multiLine]}>{`${this.state.item.amount}`}
{`${I18n.t('CREATION_DATE')}: ${created_at.format(" Do MMMM YYYY à HH:mm")}`}
+ style={[styles.simpleuser,styles.multiLine]}>{`${I18n.t('CREATION_DATE')}: ${created_at.format(" Do MMMM YYYY à HH:mm")}`}
{`${I18n.t('UPDATE_DATE')}: ${updated_at.format(" Do MMMM YYYY à HH:mm")}`}
+ style={[styles.simpleuser,styles.multiLine]}>{`${I18n.t('UPDATE_DATE')}: ${updated_at.format(" Do MMMM YYYY à HH:mm")}`}
-
- {
- this.state.item.is_company === 0 &&
-
-
-
- }
-
+
+ {
+ this.state.item.is_company === 0 &&
+
+
+
+ }
+
+
@@ -667,11 +669,19 @@ const styles = StyleSheet.create({
fontSize: 16,
color: '#3E3E3E'
},
+ multiLine: {
+ flexShrink: 1,
+ flexWrap: 'wrap',
+ },
textbtnstyle: {
color: "white",
fontWeight: "bold",
fontSize: 18
},
+ textbtnPadding: {
+ paddingHorizontal: 4,
+ textAlign: 'center',
+ },
input: {
height: 60,
marginTop: responsiveHeight(2),
diff --git a/app/webservice/AuthApi.js b/app/webservice/AuthApi.js
index 69d0d48..f765953 100644
--- a/app/webservice/AuthApi.js
+++ b/app/webservice/AuthApi.js
@@ -41,6 +41,7 @@ export const getCodeInformationForAddTaxe = (code, id_agent) => {
var data = {
"tag": 'member', "type": "agen_info_code", "code": code,
"lang": I18n.currentLocale(),
+ "isRegistration": false,
id_agent
};
@@ -397,6 +398,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({
@@ -408,7 +412,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",
@@ -420,7 +424,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;
}
diff --git a/app/webservice/IlinkConstants.js b/app/webservice/IlinkConstants.js
index 6527b10..04ea371 100644
--- a/app/webservice/IlinkConstants.js
+++ b/app/webservice/IlinkConstants.js
@@ -1,12 +1,14 @@
export const isDebugMode = false
+// 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";
+export const baseUrl = "https://city-douala4.ilink-app.com:8080/mobilebackend";
+export const testBaseUrl= "https://city-douala4.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";
+// export const baseUrl = "https://test-city-douala4.ilink-app.com:9080/mobilebackend";
+// export const testBaseUrl= "https://test-city-douala4.ilink-app.com:9081";