Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ jobs:
- name: run gradle tests
run: ./gradlew testCsuDevDebugUnitTest --stacktrace

- name: Publish test results
if: always()
uses: dorny/test-reporter@v1
with:
name: Unit Test Results
path: claimManagement/build/test-results/testCsuDevDebugUnitTest/*.xml
reporter: java-junit

# - name: build
# run: |
# ./gradlew assembleCsuDevDebug --stacktrace
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,5 @@ fastlane/readme.md
.DS_Store
./.DS_Store
./git/.DS_Store
*.hprof
*.hprof
11 changes: 10 additions & 1 deletion claimManagement/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ android {
resValue "string", "app_name_claims", "Claims CSU"
resValue "string", "release_tag", "csu"
buildConfigField "String", "API_BASE_URL", '"https://csuapps.minsante.cm/"'
buildConfigField "String", "MASTER_DATA_URL", '"https://csureport.minsante.cm/"'
buildConfigField "String", "RAR_PASSWORD", '"xc3-ed@/dfr;nJ3R"'
dimension 'std'
resValue "string", "sentry_dsn", '"https://54612a80b36c47e78722b9779410e3d1@glitchtip-csuapps.minsante.cm/9"'
Expand Down Expand Up @@ -192,6 +193,12 @@ android {
exclude 'META-INF/DEPENDENCIES'
}
namespace 'org.openimis.imisclaims'

testOptions {
unitTests {
includeAndroidResources = true // ← doit être présent pour Robolectric
}
}
}

apollo {
Expand Down Expand Up @@ -228,7 +235,9 @@ dependencies {
implementation ('com.apollographql.apollo:apollo-android-support:2.5.14'){
because("Apollo 3+ only works with Kotlin coroutines")
}
testImplementation 'junit:junit:4.12'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:5.5.0'
testImplementation 'org.robolectric:robolectric:4.11.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
implementation group: 'com.squareup.picasso', name: 'picasso', version: '2.71828'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
query GetConfigs($layer: String) {
moduleConfigurations(layer: $layer) {
config,
module
}
}
112 changes: 101 additions & 11 deletions claimManagement/src/main/java/org/openimis/imisclaims/ClaimActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
import android.database.Cursor;
import android.inputmethodservice.Keyboard;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
Expand Down Expand Up @@ -93,7 +95,11 @@ public static Intent newIntent(@NonNull Context context, @NonNull String claimUU
RadioButton rbEmergency, rbReferral, rbOther, rbPositive, rbNegative;
ImageButton btnScan;
LinearLayout llFagepFields;
TextInputLayout ettClaimPrefix, ettGuaranteeNo;
TextInputLayout ettClaimPrefix, ettGuaranteeNo, tilCHFID;
JSONObject insureeConfig;
JSONObject policyConfig;
JSONObject claimConfig;
int minChequeNumber = 6, minChfId = 12, maxChfId = 20, codeMaxLength = 6;

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand Down Expand Up @@ -140,6 +146,9 @@ protected void onCreate(Bundle savedInstanceState) {
etVisitType = findViewById(R.id.etVisitType);
ettClaimPrefix = findViewById(R.id.ettClaimPrefix);
ettGuaranteeNo = findViewById(R.id.ettGuaranteeNo);
tilCHFID = findViewById(R.id.tilCHFID);

initConfigurations();

String[] visitTypes = getResources().getStringArray(R.array.visitType);
ArrayAdapter<String> visitTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, visitTypes);
Expand Down Expand Up @@ -178,12 +187,14 @@ public void onItemClick(AdapterView<?> adapterView, View view, int position, lon
String hfId = sqlHandler.getClaimAdminInfo(global.getOfficerCode(), "HFId");
String hfPrograms = sqlHandler.getHealthFacilityPrograms(hfId);
String userPrograms = sqlHandler.getClaimAdminInfo(global.getOfficerCode(),"Programs");
JSONArray arrayHfPrograms = new JSONArray(hfPrograms);
JSONArray arrayAdminPrograms = new JSONArray(userPrograms);
for (int i = 0 ; i< arrayHfPrograms.length(); i++){
for (int j = 0 ; j < arrayAdminPrograms.length() ; j++){
if(arrayHfPrograms.get(i).toString().equals(arrayAdminPrograms.get(j).toString())){
filterPrograms.add(arrayHfPrograms.get(i).toString());
if(hfPrograms != null){
JSONArray arrayHfPrograms = new JSONArray(hfPrograms);
JSONArray arrayAdminPrograms = new JSONArray(userPrograms);
for (int i = 0 ; i< arrayHfPrograms.length(); i++){
for (int j = 0 ; j < arrayAdminPrograms.length() ; j++){
if(arrayHfPrograms.get(i).toString().equals(arrayAdminPrograms.get(j).toString())){
filterPrograms.add(arrayHfPrograms.get(i).toString());
}
}
}
}
Expand Down Expand Up @@ -340,6 +351,69 @@ public void onItemClick(AdapterView<?> adapterView, View view, int position, lon
}
});
}

etInsureeNumber.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}

@Override
public void afterTextChanged(Editable s) {
int length = s != null ? s.length() : 0;
if (length > 0 && length < minChfId) {
tilCHFID.setError(getResources().getString(R.string.minCharactersRequired, minChfId));
}
if(length > maxChfId){
tilCHFID.setError(getResources().getString(R.string.maxCharactersRequired, maxChfId));
}
if (length == 0 || (length >= minChfId && length <= maxChfId)) {
tilCHFID.setError(null);
}
}
});

etClaimPrefix.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

@Override
public void afterTextChanged(Editable s) {
String program = etProgram.getText().toString();
if(program.equals("Cheque Santé") || program.equals("Chèque Santé")){
int length = s != null ? s.length() : 0;
if (length > 0 && length < minChequeNumber) {
ettClaimPrefix.setError(getResources().getString(R.string.minCharactersRequired, minChequeNumber));
}
if (length == 0 || length >= minChequeNumber) {
ettClaimPrefix.setError(null);
}
}
}
});
}

private void initConfigurations(){
try {
insureeConfig = sqlHandler.getModuleConfig("fe-insuree");
policyConfig = sqlHandler.getModuleConfig("fe-policy");
claimConfig = sqlHandler.getModuleConfig("fe-claim");
if(policyConfig.has("minChequeNumberRequired")){
minChequeNumber = policyConfig.getInt("minChequeNumberRequired");
}
if(insureeConfig.has("insureeForm.chfIdMinLength")){
minChfId = insureeConfig.getInt("insureeForm.chfIdMinLength");
}
if(insureeConfig.has("insureeForm.chfIdMaxLength")){
codeMaxLength = claimConfig.getInt("claimForm.codeMaxLength");
}
} catch (JSONException e) {
e.printStackTrace();
}
}

private boolean isIntentReadonly() {
Expand Down Expand Up @@ -756,7 +830,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}

private boolean isValidData() {
protected boolean isValidData() {

if (etHealthFacility.getText().length() == 0) {
showValidationDialog(etHealthFacility, getResources().getString(R.string.MissingHealthFacility));
Expand All @@ -778,6 +852,16 @@ private boolean isValidData() {
return false;
}

if(etInsureeNumber.getText().length() > 0 && etInsureeNumber.getText().length() < minChfId){
showValidationDialog(etInsureeNumber, getResources().getString(R.string.minCharactersRequired, minChfId));
return false;
}

if(etInsureeNumber.getText().length() > 0 && etInsureeNumber.getText().length() > maxChfId) {
showValidationDialog(etInsureeNumber, getResources().getString(R.string.maxCharactersRequired, maxChfId));
return false;
}

/*if (!etProgram.getText().toString().equals("VIH")) {
boolean isNumeric = StringUtils.isNumeric(etInsureeNumber.getText().toString());
if(!isNumeric){
Expand Down Expand Up @@ -832,13 +916,19 @@ private boolean isValidData() {
return false;
}

String program = etProgram.getText().toString();
if(etClaimPrefix.getText().length() == 0){
showValidationDialog(etClaimPrefix, getResources().getString(R.string.MissingChequeNumber));
return false;
}

if(etClaimCode.getText().length() > 7){
showValidationDialog(etClaimPrefix, getResources().getString(R.string.InvalidClaimCode));
if(etClaimPrefix.getText().length() > 0 && (program.equals("Cheque Santé") || program.equals("Chèque Santé")) && etClaimPrefix.length() < minChequeNumber){
showValidationDialog(etClaimPrefix, getResources().getString(R.string.minCharactersRequired, minChequeNumber));
return false;
}

if(etClaimCode.getText().length() > codeMaxLength){
showValidationDialog(etClaimPrefix, getResources().getString(R.string.InvalidClaimCode, codeMaxLength));
return false;
}

Expand Down Expand Up @@ -888,7 +978,7 @@ protected void confirmNewDialog(String msg) {
runOnUiThread(() -> showDialog(msg, (dialog, which) -> ClearForm(), (dialog, which) -> dialog.dismiss()));
}

private boolean saveClaim() {
protected boolean saveClaim() {
Intent intent = getIntent();
String claimUUID;
if (intent.hasExtra(EXTRA_CLAIM_UUID)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@
import org.openimis.imisclaims.domain.entity.Diagnosis;
import org.openimis.imisclaims.domain.entity.HealthFacility;
import org.openimis.imisclaims.domain.entity.Medication;
import org.openimis.imisclaims.domain.entity.ModuleConfig;
import org.openimis.imisclaims.domain.entity.PaymentList;
import org.openimis.imisclaims.domain.entity.Program;
import org.openimis.imisclaims.domain.entity.Service;
import org.openimis.imisclaims.domain.entity.SubServiceItem;
import org.openimis.imisclaims.network.exception.HttpException;
import org.openimis.imisclaims.tools.Log;
import org.openimis.imisclaims.usecase.FetchClaimAdmins;
import org.openimis.imisclaims.usecase.FetchConfigs;
import org.openimis.imisclaims.usecase.FetchControls;
import org.openimis.imisclaims.usecase.FetchDiagnosesServicesItems;
import org.openimis.imisclaims.usecase.FetchDiagnosis;
Expand Down Expand Up @@ -847,6 +849,7 @@ public void run() {
runOnUiThread(() -> {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, getResources().getString(R.string.MapSuccessful), Toast.LENGTH_LONG).show();
downloadConfigs();
});
} catch (Exception e) {
e.printStackTrace();
Expand All @@ -870,6 +873,45 @@ public void run() {

}

public void downloadConfigs (){
if (global.isNetworkAvailable()){
String progress_message = getResources().getString(R.string.getConfig) + "...";
progressDialog = ProgressDialog.show(this, getResources().getString(R.string.download), progress_message);
Thread thread = new Thread() {
public void run() {
try {
List<ModuleConfig> configs = new FetchConfigs().execute();
if(!configs.isEmpty()){
sqlHandler.ClearAll("tblConfig");
for (int i = 0; i < configs.size(); i++) {
sqlHandler.InsertConfig(i+1,configs.get(i).getModule(), configs.get(i).getConfig());
}
}
runOnUiThread(() -> {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, getResources().getString(R.string.downloaded_config), Toast.LENGTH_LONG).show();
});
} catch (Exception e) {
e.printStackTrace();
Sentry.captureException(e);
runOnUiThread(() -> {
progressDialog.dismiss();
if(!global.isNetworkAvailable()){
Toast.makeText(MainActivity.this, getResources().getString(R.string.CheckConnection), Toast.LENGTH_LONG).show();
}else {
Toast.makeText(MainActivity.this, e.getMessage() + "-" + getResources().getString(R.string.AccessDenied), Toast.LENGTH_LONG).show();
}
});
}
};
};
thread.start();
} else {
runOnUiThread(() -> progressDialog.dismiss());
ErrorDialogBox(getResources().getString(R.string.CheckInternet));
}
}

public void saveLastUpdateDate(String lastUpdateDate) {
if (global.getSDCardStatus().equals(Environment.MEDIA_MOUNTED)) {
String dir = global.getSubdirectory("Authentications");
Expand Down Expand Up @@ -927,6 +969,8 @@ public boolean checkRequirements() {
}

return false;
} else {
sqlHandler.updateTables();
}

return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public class SQLHandler extends SQLiteOpenHelper {
private static final String createTableClaimItems = "CREATE TABLE IF NOT EXISTS tblClaimItems(ClaimUUID TEXT, ItemCode TEXT, ItemPrice TEXT, ItemQuantity TEXT);";
private static final String createTableClaimServices = "CREATE TABLE IF NOT EXISTS tblClaimServices(ClaimUUID TEXT, ServiceCode TEXT, ServicePrice TEXT, ServiceQuantity TEXT, ServicePackageType TEXT, SubServicesItems TEXT);";
private static final String createTableClaimUploadStatus = "CREATE TABLE IF NOT EXISTS tblClaimUploadStatus(ClaimUUID TEXT, UploadDate TEXT, UploadStatus TEXT, UploadMessage TEXT);";
private static final String createTableModuleConfig = "CREATE TABLE IF NOT EXISTS tblConfig(Id INTEGER, Module TEXT, Config TEXT);";

public final String REFERENCE_UNKNOWN;

Expand Down Expand Up @@ -893,7 +894,8 @@ public JSONObject getItem(String itemId) {
public void createTables() {
String[] commands = {CreateTableControls, CreateTableReferences, CreateTableClaimAdmins,CreateTablePrograms,CreateTableDiagnosis,
createTablePolicyInquiry, createTableClaimDetails, createTableClaimItems, createTableClaimServices,CreateTableSubItems,
CreateTableSubServices,CreateTableItems,CreateTableServices, createTableClaimUploadStatus, CreateTableHealthFacilities};
CreateTableSubServices,CreateTableItems,CreateTableServices, createTableClaimUploadStatus, CreateTableHealthFacilities,
createTableModuleConfig};
for (String command : commands) {
try {
db.execSQL(command);
Expand All @@ -903,6 +905,10 @@ public void createTables() {
}
}

public void updateTables(){
db.execSQL(createTableModuleConfig);
}

public void createMappingTables() {
String[] commandsMapping = {CreateTableMapping};
for (String command : commandsMapping) {
Expand Down Expand Up @@ -1274,4 +1280,34 @@ public String getReferenceName(@NonNull String referenceCode) {
return REFERENCE_UNKNOWN;
}
}

public void InsertConfig(int id, String module, String config) {
try {
ContentValues cv = new ContentValues();
cv.put("Id", id);
cv.put("Module", module);
cv.put("Config", config);

db.insert("tblConfig", null, cv);
} catch (Exception e) {
e.printStackTrace();
}
}

public JSONObject getModuleConfig(String module){
JSONObject config = new JSONObject();
try {
String query = "SELECT Config FROM tblConfig WHERE Module = \"" + module + "\"";
Cursor cursor1 = db.rawQuery(query, null);
// looping through all rows
if (cursor1.moveToFirst()) {
do {
config = new JSONObject(cursor1.getString(0));
} while (cursor1.moveToNext());
}
} catch (Exception e) {
e.printStackTrace();
}
return config;
}
}
Loading
Loading