Skip to content

Commit 98719b5

Browse files
committed
add and delete policy process
1 parent e54c999 commit 98719b5

11 files changed

Lines changed: 775 additions & 23 deletions

File tree

app/src/localeMv/res/values-fr/strings.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
<string name="SelectMonth">Sél. Mois</string>
9191
<string name="EnrolmentDate">Date d\'adhésion</string>
9292
<string name="Product">Paquet de bénéfice</string>
93-
<string name="EffectiveDate">Date d\'entrée en vigueur</string>
93+
<string name="EffectiveDate">Date d\'entrée en vigueur:</string>
9494
<string name="StartDate">Date de début</string>
9595
<string name="ExpireDate">Date d\'expiration</string>
9696
<string name="Officer">Agent</string>
@@ -120,7 +120,7 @@
120120
<string name="Suspended">Suspendu</string>
121121
<string name="ReceiptNotUnique">Le numéro de reçu doit être unique.</string>
122122
<string name="PleaseDeletePremium">Le contrat a une contribution. Veuillez d\'abord supprimer les contributions</string>
123-
<string name="PolicyDeleted">Contrat avec succès</string>
123+
<string name="PolicyDeleted">Contrat supprimé avec succès</string>
124124
<string name="PremiumDeleted">Contribution supprimée avec succès</string>
125125
<string name="InsureeDeleted">Assuré supprimé avec succès</string>
126126
<string name="IsHeadDelete">Vous ne pouvez pas supprimer le chef de famille.</string>
@@ -484,6 +484,7 @@
484484
<string name="pay_type_bank_transfer">Virement banquaire</string>
485485
<string name="tapToUpload">Cliquez pour changer la photo</string>
486486
<string name="SelectBirthDate">Choisir votre date de naissance</string>
487-
<string name="DeleteInsuree">Êtes-vous sure de vouloir supprimer cet assuré ?</string>
487+
<string name="DeleteInsuree">Êtes-vous sûre de vouloir supprimer cet assuré ?</string>
488+
<string name="DeletePolicy">Êtes-vous sûre de vouloir supprimer cette police ?</string>
488489
<string name="Close">Fermer</string>
489490
</resources>

app/src/localeMv/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,5 +478,6 @@
478478
<string name="SystemLanguageNotSupported">Current system language is not supported. The app will use the default language.</string>
479479
<string name="SupportedLanguages">Supported languages:\n%1$s</string>
480480
<string name="DeleteInsuree">Are you sure you want to delete this insuree?</string>
481+
<string name="DeletePolicy">Are you sure you want to delete this policy?</string>
481482
<string name="Close">Close</string>
482483
</resources>

app/src/main/java/org/openimis/imispolicies/ClientAndroidInterface.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,6 +1693,7 @@ public int SavePolicy(String PolicyData, int FamilyId, int PolicyId) throws Exce
16931693
if (IsBulkCNUsed()) {
16941694
sqlHandler.assignCnToPolicy(rtPolicyId, controlNumber);
16951695
}
1696+
Log.e("familyId", String.valueOf(FamilyId));
16961697
InsertRecordedPolicies("new", String.valueOf(FamilyId), data.get("ddlProduct"), data.get("hfPolicyValue"), MaxPolicyId);
16971698
} else {
16981699
int Online = 2;

app/src/main/java/org/openimis/imispolicies/FamilyInsurees.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@
3232

3333
public class FamilyInsurees extends AppCompatActivity {
3434

35-
private int familyId;
35+
public static int familyId;
3636
TextView regionName, districtName, wardName, villageName;
3737
ClientAndroidInterface ca;
3838
private ViewPager2 viewPager;
3939
private TabLayout tabLayout;
40+
public static int regionId;
41+
public static int districtId;
4042

4143

4244
@Override
@@ -78,6 +80,8 @@ private void bindDataFromDatafield(String data){
7880
try {
7981
JSONArray array = new JSONArray(data);
8082
JSONObject object = array.getJSONObject(0);
83+
regionId = object.getInt("RegionId");
84+
districtId = object.getInt("DistrictId");
8185
regionName.setText(object.getString("RegionName"));
8286
districtName.setText(object.getString("DistrictName"));
8387
wardName.setText(object.getString("WardName"));

app/src/main/java/org/openimis/imispolicies/PoliciesFragment.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
public class PoliciesFragment extends Fragment {
2121

2222
FloatingActionButton btnAddPolicy;
23-
private int familyId = 0;
23+
private int familyId;
2424
RecyclerView recyclerPolicies;
2525
private ClientAndroidInterface ca;
2626

@@ -30,6 +30,13 @@ public PoliciesFragment() {}
3030
public View onCreateView(LayoutInflater inflater, ViewGroup container,
3131
Bundle savedInstanceState) {
3232
View view = inflater.inflate(R.layout.policies_fragment, container, false);
33+
getParentFragmentManager().setFragmentResultListener("requestKey", this, (requestKey, bundle) -> {
34+
boolean refresh = bundle.getBoolean("refresh");
35+
if (refresh) {
36+
loadPolicies();
37+
}
38+
});
39+
familyId = FamilyInsurees.familyId;
3340
btnAddPolicy = view.findViewById(R.id.btnNewPolicy);
3441
recyclerPolicies = view.findViewById(R.id.recyclerPolicies);
3542
ca = new ClientAndroidInterface(getActivity());
@@ -39,12 +46,13 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
3946
btnAddPolicy.setOnClickListener(v -> {
4047
Intent intent = new Intent(getActivity(), PolicyActivity.class);
4148
intent.putExtra("FamilyId", familyId);
49+
intent.putExtra("RegionId", FamilyInsurees.regionId);
50+
intent.putExtra("DistrictId", FamilyInsurees.districtId);
4251
startActivity(intent);
4352
});
4453

4554
return view;
4655

47-
4856
}
4957

5058
@Override
@@ -57,7 +65,7 @@ private void loadPolicies(){
5765
try {
5866
String policies = ca.getFamilyPolicies(familyId);
5967
JSONArray policiesArray = new JSONArray(policies);
60-
InsureeAdapter adapter = new PolicyAdapter(getContext(),policiesArray, familyId);
68+
PolicyAdapter adapter = new PolicyAdapter(getContext(),policiesArray, familyId);
6169
recyclerPolicies.setAdapter(adapter);
6270
} catch (JSONException e) {
6371
throw new RuntimeException(e);
Lines changed: 246 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,265 @@
11
package org.openimis.imispolicies;
22

3+
import android.content.Intent;
34
import android.os.Bundle;
5+
import android.view.MenuItem;
6+
import android.view.View;
7+
import android.widget.Button;
8+
import android.widget.TextView;
49

510
import androidx.activity.EdgeToEdge;
11+
import androidx.annotation.NonNull;
612
import androidx.appcompat.app.AppCompatActivity;
713
import androidx.core.graphics.Insets;
814
import androidx.core.view.ViewCompat;
915
import androidx.core.view.WindowInsetsCompat;
16+
import androidx.fragment.app.FragmentActivity;
17+
import androidx.fragment.app.FragmentManager;
18+
19+
import com.google.android.material.button.MaterialButton;
20+
import com.google.android.material.datepicker.MaterialDatePicker;
21+
import com.google.android.material.textfield.MaterialAutoCompleteTextView;
22+
import com.google.android.material.textfield.TextInputEditText;
23+
import com.google.android.material.textfield.TextInputLayout;
24+
25+
import org.json.JSONArray;
26+
import org.json.JSONException;
27+
import org.json.JSONObject;
28+
import org.openimis.imispolicies.tools.Log;
29+
import org.openimis.imispolicies.util.JsonDropdownHelper;
30+
31+
import java.text.ParseException;
32+
import java.text.SimpleDateFormat;
33+
import java.util.Calendar;
34+
import java.util.Date;
35+
import java.util.Locale;
1036

1137
public class PolicyActivity extends AppCompatActivity {
1238

39+
private TextInputLayout layoutEnrolmentDate, layoutProduct, layoutEffectiveDate, layoutStartDate, layoutExpiryDate, layoutControlNumber;
40+
private TextView txtPolicyStatus, spPolicyValue, spContribution, spBalance;
41+
private MaterialButton btnSave;
42+
private MaterialAutoCompleteTextView ddlProduct;
43+
private TextInputEditText txtEnrolmentDate, txtEffectiveDate, txtStartDate, txtExpiryDate, AssignedControlNumber;
44+
private JSONObject policyObject;
45+
private int policyId = 0;
46+
private int familyId;
47+
ClientAndroidInterface ca;
48+
boolean hasCycle;
49+
private int officerId, regionId, districtId, productId;
50+
private MaterialDatePicker<Long> datePicker;
51+
private int isOffline = 1;
52+
53+
1354
@Override
1455
protected void onCreate(Bundle savedInstanceState) {
1556
super.onCreate(savedInstanceState);
16-
EdgeToEdge.enable(this);
1757
setContentView(R.layout.activity_policy);
18-
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
19-
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
20-
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
21-
return insets;
58+
setTitle(getResources().getString(R.string.AddEditPolicy));
59+
if (getSupportActionBar() != null) {
60+
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
61+
}
62+
initViews();
63+
setupListeners();
64+
setupDatePicker();
65+
defineRequiredField();
66+
canSave();
67+
policyObject = new JSONObject();
68+
ca = new ClientAndroidInterface(this);
69+
policyId = getIntent().getIntExtra("PolicyId", 0);
70+
familyId = getIntent().getIntExtra("FamilyId", 0);
71+
regionId = getIntent().getIntExtra("RegionId", 0);
72+
districtId = getIntent().getIntExtra("DistrictId", 0);
73+
74+
if(!ca.IsBulkCNUsed()){
75+
layoutControlNumber.setVisibility(View.GONE);
76+
}
77+
layoutEffectiveDate.setEnabled(false);
78+
txtExpiryDate.setEnabled(false);
79+
officerId = ca.getOfficerId();
80+
81+
loadProducts(regionId, districtId, null);
82+
}
83+
84+
private void initViews(){
85+
layoutEnrolmentDate = findViewById(R.id.layoutEnrolmentDate);
86+
layoutProduct = findViewById(R.id.layoutProduct);
87+
layoutEffectiveDate = findViewById(R.id.layoutEffectiveDate);
88+
layoutStartDate = findViewById(R.id.layoutStartDate);
89+
layoutExpiryDate = findViewById(R.id.layoutExpiryDate);
90+
layoutControlNumber = findViewById(R.id.layoutControlNumber);
91+
txtPolicyStatus = findViewById(R.id.txtPolicyStatus);
92+
spPolicyValue = findViewById(R.id.spPolicyValue);
93+
spContribution = findViewById(R.id.spContribution);
94+
spBalance = findViewById(R.id.spBalance);
95+
btnSave = findViewById(R.id.btnSavePolicy);
96+
ddlProduct = findViewById(R.id.ddlProduct);
97+
txtEnrolmentDate = findViewById(R.id.txtEnrolmentDate);
98+
txtEffectiveDate = findViewById(R.id.txtEffectiveDate);
99+
txtStartDate = findViewById(R.id.txtStartDate);
100+
txtExpiryDate = findViewById(R.id.txtExpiryDate);
101+
AssignedControlNumber = findViewById(R.id.AssignedControlNumber);
102+
}
103+
104+
private void setupListeners(){
105+
txtEnrolmentDate.setOnClickListener(v -> {
106+
datePicker.show(getSupportFragmentManager(), "DATE_PICKER");
107+
});
108+
109+
btnSave.setOnClickListener(new View.OnClickListener() {
110+
@Override
111+
public void onClick(View view) {
112+
savePolicy();
113+
}
114+
});
115+
}
116+
117+
private void defineRequiredField(){
118+
layoutEnrolmentDate.setError(" ");
119+
layoutProduct.setError(" ");
120+
layoutStartDate.setError(" ");
121+
layoutExpiryDate.setError(" ");
122+
}
123+
124+
private void canSave(){
125+
if(txtEnrolmentDate.getText().toString().isEmpty() ||
126+
txtStartDate.getText().toString().isEmpty() ||
127+
txtExpiryDate.getText().toString().isEmpty() ||
128+
ddlProduct.getText().toString().isEmpty()
129+
){
130+
btnSave.setEnabled(false);
131+
} else {
132+
btnSave.setEnabled(true);
133+
}
134+
}
135+
136+
private void loadProducts(int regionId, int districtId, String enrolmentDate){
137+
try {
138+
String products = ca.getProducts(regionId, districtId, enrolmentDate);
139+
JSONArray productsArray = new JSONArray(products);
140+
JsonDropdownHelper.bindDropdown(
141+
this,
142+
ddlProduct,
143+
productsArray,
144+
"ProductNameCombined",
145+
null,
146+
new JsonDropdownHelper.OnJsonItemSelectedListener() {
147+
@Override
148+
public void onItemSelected(JSONObject selectedItem, int position) {
149+
if (selectedItem != null) {
150+
try {
151+
productId = selectedItem.getInt("ProdId");
152+
String enrolDate = txtEnrolmentDate.getText().toString().trim();
153+
policyObject.put("ddlProduct", productId);
154+
getPolicyPeriod(enrolDate, productId, familyId, policyId);
155+
canSave();
156+
157+
if(ca.IsBulkCNUsed()) {
158+
if(productId == 0) {
159+
AssignedControlNumber.setText("");
160+
}
161+
String controlNumber = ca.GetNextBulkCn(String.valueOf(productId));
162+
if(controlNumber.equals("undefined")) {
163+
ca.ShowDialog(getResources().getString(R.string.noBulkCNAvailable));
164+
AssignedControlNumber.setText("");
165+
} else {
166+
AssignedControlNumber.setText("");
167+
}
168+
}
169+
} catch (JSONException e) {
170+
e.printStackTrace();
171+
}
172+
}
173+
}
174+
}
175+
);
176+
} catch (JSONException e) {
177+
throw new RuntimeException(e);
178+
}
179+
}
180+
181+
private void setupDatePicker() {
182+
// Create Material Date Picker
183+
MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
184+
builder.setTitleText(getResources().getString(R.string.EnrolmentDate));
185+
builder.setSelection(MaterialDatePicker.todayInUtcMilliseconds());
186+
187+
datePicker = builder.build();
188+
189+
datePicker.addOnPositiveButtonClickListener(selection -> {
190+
Calendar calendar = Calendar.getInstance();
191+
calendar.setTimeInMillis(selection);
192+
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
193+
txtEnrolmentDate.setText(format.format(calendar.getTime()));
194+
String enrolDate = txtEnrolmentDate.getText().toString().trim();
195+
loadProducts(regionId, districtId, enrolDate);
196+
if(productId != 0){
197+
getPolicyPeriod(format.format(calendar.getTime()), productId, familyId, policyId);
198+
}
199+
canSave();
200+
});
201+
202+
txtEnrolmentDate.setOnClickListener(v -> {
203+
datePicker.show(getSupportFragmentManager(), "DATE_PICKER");
22204
});
23205
}
206+
207+
private void getPolicyPeriod(String EnrolmentDate, int ProdId, int FamilyId, int policyId){
208+
if(EnrolmentDate.length() == 0 || ProdId == 0){
209+
return;
210+
}
211+
try {
212+
String period = ca.getPolicyPeriod(ProdId, EnrolmentDate);
213+
JSONArray periodArray = new JSONArray(period);
214+
String startDate = periodArray.getJSONObject(0).getString("StartDate");
215+
String expiryDate = periodArray.getJSONObject(0).getString("ExpiryDate");
216+
hasCycle = periodArray.getJSONObject(0).getBoolean("HasCycle");
217+
218+
txtStartDate.setText(startDate);
219+
txtExpiryDate.setText(expiryDate);
220+
221+
txtStartDate.setEnabled(hasCycle);
222+
223+
double PolicyValue = ca.getPolicyValue(EnrolmentDate, ProdId, FamilyId, startDate, hasCycle, 0, "N", isOffline);
224+
spPolicyValue.setText(String.valueOf(PolicyValue));
225+
} catch (ParseException e) {
226+
throw new RuntimeException(e);
227+
} catch (JSONException e) {
228+
throw new RuntimeException(e);
229+
}
230+
}
231+
232+
private void savePolicy(){
233+
try {
234+
policyObject.put("ddlOfficer",officerId);
235+
policyObject.put("AssignedControlNumber", AssignedControlNumber.getText());
236+
policyObject.put("hfPolicyValue", spPolicyValue.getText());
237+
policyObject.put("hfPolicyStatus", txtPolicyStatus.getText());
238+
policyObject.put("txtExpiryDate", txtExpiryDate.getText());
239+
policyObject.put("txtEnrolmentDate", txtEnrolmentDate.getText());
240+
policyObject.put("txtStartDate", txtStartDate.getText());
241+
policyObject.put("txtEffectiveDate", txtEffectiveDate.getText());
242+
243+
policyId = ca.SavePolicy(policyObject.toString(), familyId, policyId);
244+
if(policyId > 0){
245+
FragmentActivity activity = (FragmentActivity) this;
246+
FragmentManager fm = activity.getSupportFragmentManager();
247+
Bundle result = new Bundle();
248+
result.putBoolean("refresh", true);
249+
fm.setFragmentResult("requestKey", result);
250+
finish();
251+
}
252+
} catch (Exception e) {
253+
throw new RuntimeException(e);
254+
}
255+
}
256+
257+
@Override
258+
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
259+
if (item.getItemId() == android.R.id.home) {
260+
finish();
261+
return true;
262+
}
263+
return super.onOptionsItemSelected(item);
264+
}
24265
}

0 commit comments

Comments
 (0)