diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index c36a0f11..00000000 Binary files a/.DS_Store and /dev/null differ diff --git a/claimManagement/.DS_Store b/claimManagement/.DS_Store deleted file mode 100644 index 2473cf23..00000000 Binary files a/claimManagement/.DS_Store and /dev/null differ diff --git a/claimManagement/build.gradle b/claimManagement/build.gradle index f23c9949..c3a245d7 100644 --- a/claimManagement/build.gradle +++ b/claimManagement/build.gradle @@ -27,7 +27,7 @@ android { minSdkVersion 26 targetSdkVersion 32 versionCode 4 - versionName "2.0.5" + versionName "2.0.6" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { diff --git a/claimManagement/src/.DS_Store b/claimManagement/src/.DS_Store deleted file mode 100644 index bc5cf418..00000000 Binary files a/claimManagement/src/.DS_Store and /dev/null differ diff --git a/claimManagement/src/main/graphql/org.openimis.imisclaim/GetMedications.graphql b/claimManagement/src/main/graphql/org.openimis.imisclaim/GetMedications.graphql index 663fbfa9..301f33ae 100644 --- a/claimManagement/src/main/graphql/org.openimis.imisclaim/GetMedications.graphql +++ b/claimManagement/src/main/graphql/org.openimis.imisclaim/GetMedications.graphql @@ -1,5 +1,5 @@ -query GetMedications($offset: Int) { - medicalItems(offset: $offset) { +query GetMedications($offset: Int, $pricelistUuid: UUID, $date: Date) { + medicalItemsStr(offset: $offset, pricelistUuid: $pricelistUuid, date: $date) { pageInfo{ hasNextPage } diff --git a/claimManagement/src/main/graphql/org.openimis.imisclaim/GetPaymentList.graphql b/claimManagement/src/main/graphql/org.openimis.imisclaim/GetPaymentList.graphql index 9f56df1c..664e79bf 100644 --- a/claimManagement/src/main/graphql/org.openimis.imisclaim/GetPaymentList.graphql +++ b/claimManagement/src/main/graphql/org.openimis.imisclaim/GetPaymentList.graphql @@ -6,47 +6,25 @@ query GetPaymentList($claim_administrator_code: String) { healthFacility { code servicesPricelist { + uuid details { edges { node { service { - id code name price - packagetype - type - careType - manualPrice - serviceserviceSet { - service { - id - code - name - } - qtyProvided - priceAsked - } - servicesLinked { - item { - id - code - name - } - qtyProvided - priceAsked - } } } } } } itemsPricelist { + uuid details { edges { node { item { - id code name price diff --git a/claimManagement/src/main/graphql/org.openimis.imisclaim/GetServices.graphql b/claimManagement/src/main/graphql/org.openimis.imisclaim/GetServices.graphql new file mode 100644 index 00000000..56155084 --- /dev/null +++ b/claimManagement/src/main/graphql/org.openimis.imisclaim/GetServices.graphql @@ -0,0 +1,37 @@ +query GetServices ($offset: Int, $pricelistUuid: UUID, $date: Date) { + medicalServicesStr(offset: $offset, pricelistUuid: $pricelistUuid, date: $date) { + pageInfo { + hasNextPage + } + edges { + node { + id + code + name + packagetype + type + price + careType + manualPrice + serviceserviceSet { + service { + id + code + name + } + qtyProvided + priceAsked + } + servicesLinked { + item { + id + code + name + } + qtyProvided + priceAsked + } + } + } + } +} \ No newline at end of file diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java b/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java index 3d4cb8b9..28fd1a39 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java @@ -50,11 +50,15 @@ import org.openimis.imisclaims.usecase.FetchControls; import org.openimis.imisclaims.usecase.FetchDiagnosesServicesItems; import org.openimis.imisclaims.usecase.FetchHealthfacilities; +import org.openimis.imisclaims.usecase.FetchMedications; import org.openimis.imisclaims.usecase.FetchPaymentList; +import org.openimis.imisclaims.usecase.FetchServices; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @@ -584,40 +588,48 @@ public void run() { if (officerCode != null) { PaymentList paymentList = new FetchPaymentList().execute(officerCode); + Date date = Calendar.getInstance().getTime(); + // insert services - for (Service service : paymentList.getServices()) { - sqlHandler.InsertService(service.getId(), - service.getCode(), - service.getName(), "S", - String.valueOf(service.getPrice()), - service.getPackageType(), - service.getManualPrice() - ); - sqlHandler.InsertReferences(service.getCode(), service.getName(), "S", String.valueOf(service.getPrice())); - sqlHandler.InsertMapping(service.getCode(), service.getName(), "S"); - - if (service.getSubServices() != null && !service.getSubServices().isEmpty()) { - List subServices = service.getSubServices(); - for (SubServiceItem subService : subServices) { - sqlHandler.InsertSubServices(subService.getId(), - service.getId(), String.valueOf(subService.getQty()), subService.getPrice()); + if(paymentList.getServicesPricelistUuid() != null && !paymentList.getServicesPricelistUuid().isEmpty()){ + List services = new FetchServices().execute(paymentList.getServicesPricelistUuid(), date); + for (Service service : services) { + sqlHandler.InsertService(service.getId(), + service.getCode(), + service.getName(), "S", + String.valueOf(service.getPrice()), + service.getPackageType(), + service.getManualPrice() + ); + sqlHandler.InsertReferences(service.getCode(), service.getName(), "S", String.valueOf(service.getPrice())); + sqlHandler.InsertMapping(service.getCode(), service.getName(), "S"); + + if (service.getSubServices() != null && !service.getSubServices().isEmpty()) { + List subServices = service.getSubServices(); + for (SubServiceItem subService : subServices) { + sqlHandler.InsertSubServices(subService.getId(), + service.getId(), String.valueOf(subService.getQty()), subService.getPrice()); + } } - } - //insert subItems - if (service.getSubItems() != null && !service.getSubItems().isEmpty()) { - List subItems = service.getSubItems(); - for (SubServiceItem subItem : subItems) { - sqlHandler.InsertSubItems(subItem.getId(), - service.getId(), String.valueOf(subItem.getQty()), subItem.getPrice()); + //insert subItems + if (service.getSubItems() != null && !service.getSubItems().isEmpty()) { + List subItems = service.getSubItems(); + for (SubServiceItem subItem : subItems) { + sqlHandler.InsertSubItems(subItem.getId(), + service.getId(), String.valueOf(subItem.getQty()), subItem.getPrice()); + } } } } //insert Items - for (Medication medication : paymentList.getMedications()) { - sqlHandler.InsertReferences(medication.getCode(), medication.getName(), "I", String.valueOf(medication.getPrice())); - sqlHandler.InsertMapping(medication.getCode(), medication.getName(), "I"); - sqlHandler.InsertItem(medication.getId(),medication.getCode(),medication.getName(), "I", String.valueOf(medication.getPrice())); + if(paymentList.getItemsPricelistUuid() != null && !paymentList.getItemsPricelistUuid().isEmpty()){ + List medications = new FetchMedications().execute(paymentList.getItemsPricelistUuid(), date); + for (Medication medication : medications) { + sqlHandler.InsertReferences(medication.getCode(), medication.getName(), "I", String.valueOf(medication.getPrice())); + sqlHandler.InsertMapping(medication.getCode(), medication.getName(), "I"); + sqlHandler.InsertItem(medication.getId(),medication.getCode(),medication.getName(), "I", String.valueOf(medication.getPrice())); + } } } @@ -660,16 +672,21 @@ private void DownLoadServicesItemsPriceList(@NonNull final String claimAdministr public void run() { try { PaymentList paymentList = new FetchPaymentList().execute(claimAdministratorCode); + String servicesPricelistUuid = paymentList.getServicesPricelistUuid(); + Date date = Calendar.getInstance().getTime(); + List services = new FetchServices().execute(servicesPricelistUuid, date); + String itemsPriceListUuid = paymentList.getItemsPricelistUuid(); + List medications = new FetchMedications().execute(itemsPriceListUuid, date); sqlHandler.ClearMapping("S"); sqlHandler.ClearMapping("I"); //Insert Services - for (Service service : paymentList.getServices()) { + for (Service service : services) { sqlHandler.InsertMapping(service.getCode(), service.getName(), "S"); } //Insert Items - for (Medication medication : paymentList.getMedications()) { + for (Medication medication : medications) { sqlHandler.InsertMapping(medication.getCode(), medication.getName(), "I"); } runOnUiThread(() -> { diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/domain/entity/PaymentList.java b/claimManagement/src/main/java/org/openimis/imisclaims/domain/entity/PaymentList.java index 03fb0929..6833bf7d 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/domain/entity/PaymentList.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/domain/entity/PaymentList.java @@ -4,6 +4,7 @@ import android.os.Parcelable; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.util.List; @@ -15,21 +16,31 @@ public class PaymentList implements Parcelable { private final List services; @NonNull private final List medications; + @Nullable + private final String servicesPricelistUuid; + @Nullable + private final String itemsPricelistUuid; public PaymentList( @NonNull String healthFacilityCode, @NonNull List services, - @NonNull List medications + @NonNull List medications, + @Nullable String servicesPricelistUuid, + @Nullable String itemsPricelistUuid ) { this.healthFacilityCode = healthFacilityCode; this.services = services; this.medications = medications; + this.servicesPricelistUuid = servicesPricelistUuid; + this.itemsPricelistUuid = itemsPricelistUuid; } protected PaymentList(Parcel in) { healthFacilityCode = in.readString(); services = in.createTypedArrayList(Service.CREATOR); medications = in.createTypedArrayList(Medication.CREATOR); + servicesPricelistUuid = in.readString(); + itemsPricelistUuid = in.readString(); } @Override @@ -37,6 +48,8 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeString(healthFacilityCode); dest.writeTypedList(services); dest.writeTypedList(medications); + dest.writeString(servicesPricelistUuid); + dest.writeString(itemsPricelistUuid); } @Override @@ -59,6 +72,12 @@ public List getMedications() { return medications; } + @Nullable + public String getServicesPricelistUuid(){ return servicesPricelistUuid; } + + @Nullable + public String getItemsPricelistUuid(){ return itemsPricelistUuid; } + public static final Creator CREATOR = new Creator<>() { @Override public PaymentList createFromParcel(Parcel in) { diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetMedicationsGraphQLRequest.java b/claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetMedicationsGraphQLRequest.java index 97338515..84e8f72e 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetMedicationsGraphQLRequest.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetMedicationsGraphQLRequest.java @@ -3,11 +3,12 @@ import androidx.annotation.WorkerThread; import com.apollographql.apollo.api.Input; import org.openimis.imisclaims.GetMedicationsQuery; -import java.util.List; + +import java.util.Date; public class GetMedicationsGraphQLRequest extends BaseGraphQLRequest{ @NonNull @WorkerThread - public GetMedicationsQuery.MedicalItems get(int page) throws Exception { - return makeSynchronous(new GetMedicationsQuery(Input.fromNullable(page))).getData().medicalItems(); + public GetMedicationsQuery.MedicalItemsStr get(int page, String pricelistUuid, Date date) throws Exception { + return makeSynchronous(new GetMedicationsQuery(Input.fromNullable(page), Input.fromNullable(pricelistUuid), Input.fromNullable(date))).getData().medicalItemsStr(); } } \ No newline at end of file diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetServicesGraphQLRequest.java b/claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetServicesGraphQLRequest.java new file mode 100644 index 00000000..550601e6 --- /dev/null +++ b/claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetServicesGraphQLRequest.java @@ -0,0 +1,19 @@ +package org.openimis.imisclaims.network.request; + +import androidx.annotation.NonNull; +import androidx.annotation.WorkerThread; + +import com.apollographql.apollo.api.Input; + +import org.openimis.imisclaims.GetServicesQuery; + +import java.util.Date; + +public class GetServicesGraphQLRequest extends BaseGraphQLRequest{ + + @NonNull + @WorkerThread + public GetServicesQuery.MedicalServicesStr get(int page, String pricelistUUID, Date date) throws Exception { + return makeSynchronous(new GetServicesQuery(Input.fromNullable(page), Input.fromNullable(pricelistUUID), Input.fromNullable(date))).getData().medicalServicesStr(); + } +} \ No newline at end of file diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchMedications.java b/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchMedications.java index 51b7b5bc..e30896e4 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchMedications.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchMedications.java @@ -7,6 +7,7 @@ import org.openimis.imisclaims.network.request.GetMedicationsGraphQLRequest; import org.openimis.imisclaims.network.util.Mapper; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Objects; public class FetchMedications { @@ -22,12 +23,12 @@ public FetchMedications( } @WorkerThread @NonNull - public List execute() throws Exception { + public List execute(String pricelistUuid, Date date) throws Exception { List items = new ArrayList<>(); int page = 0; boolean hasNextPage; do{ - GetMedicationsQuery.MedicalItems response = request.get(page); + GetMedicationsQuery.MedicalItemsStr response = request.get(page, pricelistUuid, date); items.addAll( Mapper.map( response.edges(), diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchPaymentList.java b/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchPaymentList.java index 4a97eb59..23398bc4 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchPaymentList.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchPaymentList.java @@ -7,10 +7,8 @@ import org.openimis.imisclaims.domain.entity.Medication; import org.openimis.imisclaims.domain.entity.PaymentList; import org.openimis.imisclaims.domain.entity.Service; -import org.openimis.imisclaims.domain.entity.SubServiceItem; import org.openimis.imisclaims.network.request.GetPaymentListGraphQLRequest; import org.openimis.imisclaims.network.util.Mapper; -import org.openimis.imisclaims.util.IdUtils; import java.util.Collections; import java.util.Objects; @@ -37,60 +35,34 @@ public PaymentList execute(@NonNull String claimAdministratorCode) throws Except GetPaymentListQuery.HealthFacility healthFacility = Objects.requireNonNull(node.healthFacility()); GetPaymentListQuery.ServicesPricelist services = healthFacility.servicesPricelist(); GetPaymentListQuery.ItemsPricelist medications = healthFacility.itemsPricelist(); - Mapper subServiceMapper = new Mapper<>(this::toSubService); - Mapper subItemMapper = new Mapper<>(this::toSubItem); return new PaymentList( /* healthFacilityCode = */ healthFacility.code(), - /* services = */ services != null ? Mapper.map(services.details().edges(), dto -> toService(dto,subServiceMapper, subItemMapper)) : Collections.emptyList(), - /* medications = */ medications != null ? Mapper.map(medications.details().edges(), this::toMedication) : Collections.emptyList() + /* services = */ services != null ? Mapper.map(services.details().edges(), dto -> toService(dto)) : Collections.emptyList(), + /* medications = */ medications != null ? Mapper.map(medications.details().edges(), this::toMedication) : Collections.emptyList(), + /* servicePriceListUuid = */ healthFacility.servicesPricelist() != null ? healthFacility.servicesPricelist().uuid(): "", + /* servicePriceListUuid = */ healthFacility.itemsPricelist() != null ? healthFacility.itemsPricelist().uuid() : "" ); } @NonNull - private Service toService( - @NonNull GetPaymentListQuery.Edge1 edge, - @NonNull Mapper subServiceMapper, - @NonNull Mapper subItemMapper - ) { + private Service toService(@NonNull GetPaymentListQuery.Edge1 edge) { GetPaymentListQuery.Service service = Objects.requireNonNull(edge.node()).service(); return new Service( - /* id = */ String.valueOf(IdUtils.getIdFromGraphQLString(service.id())), /* code = */ service.code(), /* name = */ service.name(), /* price = */ service.price(), - /* currency = */ "$", - /* packageType = */ service.packagetype(), - /* manualPrice = */ service.manualPrice() ? 1 : 0, - /* subServices = */ subServiceMapper.map(service.serviceserviceSet()), - /* subItems = */ subItemMapper.map(service.servicesLinked()) + /* currency = */ "$" ); } @NonNull private Medication toMedication(@NonNull GetPaymentListQuery.Edge2 edge) { - GetPaymentListQuery.Item1 item = Objects.requireNonNull(edge.node()).item(); + GetPaymentListQuery.Item item = Objects.requireNonNull(edge.node()).item(); return new Medication( - /* id = */ String.valueOf(IdUtils.getIdFromGraphQLString(item.id())), /* code = */ item.code(), /* name = */ item.name(), /* price = */ item.price(), /* currency = */ "$" ); } - - private SubServiceItem toSubService(@NonNull GetPaymentListQuery.ServiceserviceSet service) { - return new SubServiceItem( - /* id = */ String.valueOf(IdUtils.getIdFromGraphQLString(service.service().id())), - /* quantity = */ service.qtyProvided(), - /* price = */ service.priceAsked() - ); - } - - private SubServiceItem toSubItem(@NonNull GetPaymentListQuery.ServicesLinked item) { - return new SubServiceItem( - /* id = */ String.valueOf(IdUtils.getIdFromGraphQLString(item.item().id())), - /* quantity = */ item.qtyProvided(), - /* price = */ item.priceAsked() - ); - } } diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchServices.java b/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchServices.java new file mode 100644 index 00000000..a7ae7de9 --- /dev/null +++ b/claimManagement/src/main/java/org/openimis/imisclaims/usecase/FetchServices.java @@ -0,0 +1,83 @@ +package org.openimis.imisclaims.usecase; +import androidx.annotation.NonNull; +import androidx.annotation.WorkerThread; +import org.apache.commons.codec.binary.Base64; +import org.openimis.imisclaims.GetServicesQuery; +import org.openimis.imisclaims.domain.entity.Service; +import org.openimis.imisclaims.domain.entity.SubServiceItem; +import org.openimis.imisclaims.network.request.GetServicesGraphQLRequest; +import org.openimis.imisclaims.network.util.Mapper; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; +public class FetchServices { + @NonNull + private final GetServicesGraphQLRequest request; + public FetchServices() { + this(new GetServicesGraphQLRequest()); + } + public FetchServices( + @NonNull GetServicesGraphQLRequest request + ) { + this.request = request; + } + @WorkerThread + @NonNull + public List execute(String priceListUUId, Date date) throws Exception { + List services = new ArrayList<>(); + int page = 0; + boolean hasNextPage; + Mapper subServiceMapper = new Mapper<>(this::toSubService); + Mapper subItemMapper = new Mapper<>(this::toSubItem); + do{ + GetServicesQuery.MedicalServicesStr response = request.get(page, priceListUUId, date); + services.addAll(Mapper.map( + response.edges(), + dto -> toService(dto,subServiceMapper,subItemMapper) + )); + hasNextPage = response.pageInfo().hasNextPage(); + page = page + 100; + }while (hasNextPage); + return services; + } + private Service toService( + @NonNull GetServicesQuery.Edge dto, + @NonNull Mapper subServiceMapper, + @NonNull Mapper subItemMapper + ){ + GetServicesQuery.Node node = Objects.requireNonNull(dto.node()); + byte[] bytes = node.id().getBytes(); + String id = new String(Base64.decodeBase64(bytes)).split(":")[1]; + return new Service( + /* id = */ id, + /* code = */ node.code(), + /* name = */ node.name(), + /* price = */ node.price(), + "XAF", + /* packageType = */ node.packagetype(), + /* manualPrice = */ node.manualPrice() ? 1 : 0, + /* subServices = */ subServiceMapper.map(node.serviceserviceSet()), + /* subItems = */ subItemMapper.map(node.servicesLinked()) + ); + } + private SubServiceItem toSubService(@NonNull GetServicesQuery.ServiceserviceSet service) { + byte[] bytes = service.service().id().getBytes(); + String id = new String(Base64.decodeBase64(bytes)).split(":")[1]; + return new SubServiceItem( + /* id = */ id, + /* quantity = */ service.qtyProvided(), + /* price = */ service.priceAsked() + ); + } + private SubServiceItem toSubItem(@NonNull GetServicesQuery.ServicesLinked item) { + byte[] bytes = item.item().id().getBytes(); + String id = new String(Base64.decodeBase64(bytes)).split(":")[1]; + return new SubServiceItem( + /* id = */ id, + /* quantity = */ item.qtyProvided(), + /* price = */ item.priceAsked() + ); + } +} \ No newline at end of file