diff --git a/assets/images/pharmacy/Redheart.svg b/assets/images/pharmacy/Redheart.svg new file mode 100644 index 00000000..3bba67fa --- /dev/null +++ b/assets/images/pharmacy/Redheart.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/pharmacy/heart-empty.svg b/assets/images/pharmacy/heart-empty.svg new file mode 100644 index 00000000..a682a44e --- /dev/null +++ b/assets/images/pharmacy/heart-empty.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/pharmacy/sort.png b/assets/images/pharmacy/sort.png new file mode 100644 index 00000000..0143d915 Binary files /dev/null and b/assets/images/pharmacy/sort.png differ diff --git a/lib/config/config.dart b/lib/config/config.dart index a4f701de..d7529454 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -225,7 +225,7 @@ const GET_PATIENT_HEALTH_STATS = 'Services/Patients.svc/REST/Med_GetTransactions const CHANNEL = 3; const GENERAL_ID = 'Cs2020@2016\$2958'; const IP_ADDRESS = '10.20.10.20'; -const VERSION_ID = 5.8; +const VERSION_ID = 8.8; const SETUP_ID = '91877'; const LANGUAGE = 2; const PATIENT_OUT_SA = 0; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 9ba405e7..23308d16 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1115,6 +1115,7 @@ const Map localizedValues = { "calculate": {"en": "calculate", "ar": "حساب"}, "enterReadingValue": {"en": "Enter the reading value", "ar": "ادخل القيمة"}, "result": {"en": "Result", "ar": "النتيجة"}, + "sort": {"en": "Sort", "ar": "فرز"}, "bloodSugarConversion": {"en": "Blood Sugar Conversion", "ar": "السكر في الدم"}, "convertBloodSugarStatement": { "en": "Convert blood sugar/glucose from mmol/l (UK standard) to mg/dlt (US standard) and vice versa.", diff --git a/lib/core/model/pharmacies/order_model.dart b/lib/core/model/pharmacies/order_model.dart index 8872aaf8..0866420c 100644 --- a/lib/core/model/pharmacies/order_model.dart +++ b/lib/core/model/pharmacies/order_model.dart @@ -79,10 +79,10 @@ class OrderModel { dynamic storeId; String orderGuid; bool pickUpInStore; - PaymentMethodSystemName paymentMethodSystemName; - PaymentName paymentName; - PaymentName paymentNamen; - CustomerCurrencyCode customerCurrencyCode; + dynamic paymentMethodSystemName; + dynamic paymentName; + dynamic paymentNamen; + dynamic customerCurrencyCode; dynamic currencyRate; dynamic customerTaxDisplayTypeId; dynamic vatNumber; @@ -102,42 +102,42 @@ class OrderModel { dynamic refundedAmount; dynamic rewardPointsWereAdded; String rxAttachments; - CheckoutAttributeDescription checkoutAttributeDescription; + dynamic checkoutAttributeDescription; dynamic customerLanguageId; dynamic affiliateId; - CustomerIp customerIp; + dynamic customerIp; String authorizationTransactionId; dynamic authorizationTransactionCode; dynamic authorizationTransactionResult; dynamic captureTransactionId; dynamic captureTransactionResult; dynamic subscriptionTransactionId; - DateTime paidDateUtc; - ShippingMethod shippingMethod; - ShippingRateComputationMethodSystemName shippingRateComputationMethodSystemName; + dynamic paidDateUtc; + dynamic shippingMethod; + dynamic shippingRateComputationMethodSystemName; String customValuesXml; bool deleted; - DateTime createdOnUtc; - OrderModelCustomer customer; + dynamic createdOnUtc; + dynamic customer; dynamic customerId; - IngAddress billingAddress; - IngAddress shippingAddress; + dynamic billingAddress; + dynamic shippingAddress; List orderItems; dynamic orderStatusId; - OrderStatus orderStatus; - OrderStatusn orderStatusn; + dynamic orderStatus; + dynamic orderStatusn; dynamic paymentStatusId; - PaymentStatus paymentStatus; - PaymentStatusn paymentStatusn; - ShippingStatus shippingStatus; - ShippingStatusn shippingStatusn; - CustomerTaxDisplayType customerTaxDisplayType; + dynamic paymentStatus; + dynamic paymentStatusn; + dynamic shippingStatus; + dynamic shippingStatusn; + dynamic customerTaxDisplayType; bool canCancel; bool canRefund; dynamic lakumAmount; - DateTime preferDeliveryDate; - PreferDeliveryTime preferDeliveryTime; - PreferDeliveryTimen preferDeliveryTimen; + dynamic preferDeliveryDate; + dynamic preferDeliveryTime; + dynamic preferDeliveryTimen; factory OrderModel.fromJson(Map json) => OrderModel( id: json["id"], @@ -311,7 +311,7 @@ class IngAddress { DateTime createdOnUtc; dynamic province; String latLong; - + LatLng getLocation(){ if(latLong.contains(',')){ var parts = latLong.trim().split(','); @@ -476,10 +476,10 @@ class OrderModelCustomer { }); String id; - Username username; - BillingAddressEmail email; - FirstName firstName; - LastName lastName; + dynamic username; + dynamic email; + dynamic firstName; + dynamic lastName; String languageId; dynamic adminComment; bool isTaxExempt; @@ -488,10 +488,10 @@ class OrderModelCustomer { bool deleted; bool isSystemAccount; dynamic systemName; - LastIpAddress lastIpAddress; - DateTime createdOnUtc; - DateTime lastLoginDateUtc; - DateTime lastActivityDateUtc; + dynamic lastIpAddress; + dynamic createdOnUtc; + dynamic lastLoginDateUtc; + dynamic lastActivityDateUtc; dynamic registeredInStoreId; List roleIds; @@ -577,6 +577,7 @@ final customerTaxDisplayTypeValues = EnumValues({ "ExcludingTax": CustomerTaxDisplayType.EXCLUDING_TAX }); + class OrderItem { OrderItem({ this.quantity, @@ -867,9 +868,9 @@ class Product { dynamic displayOrder; bool published; bool deleted; - DateTime createdOnUtc; - DateTime updatedOnUtc; - ProductType productType; + dynamic createdOnUtc; + dynamic updatedOnUtc; + dynamic productType; dynamic parentGroupedProductId; dynamic roleIds; dynamic discountIds; @@ -1146,14 +1147,14 @@ class Review { dynamic productId; dynamic storeId; bool isApproved; - Title title; - ReviewText reviewText; + dynamic title; + dynamic reviewText; dynamic replyText; dynamic rating; dynamic helpfulYesTotal; dynamic helpfulNoTotal; - DateTime createdOnUtc; - ReviewCustomer customer; + dynamic createdOnUtc; + dynamic customer; dynamic product; factory Review.fromJson(Map json) => Review( @@ -1235,7 +1236,7 @@ class ReviewCustomer { dynamic isOutSa; dynamic patientType; dynamic gender; - DateTime birthDate; + dynamic birthDate; dynamic phone; dynamic countryCode; dynamic yahalaAccountno; @@ -1244,7 +1245,7 @@ class ReviewCustomer { List addresses; String id; String username; - PurpleEmail email; + dynamic email; dynamic firstName; dynamic lastName; dynamic languageId; diff --git a/lib/core/model/pharmacies/orders_model.dart b/lib/core/model/pharmacies/orders_model.dart index a97bda98..0ad94767 100644 --- a/lib/core/model/pharmacies/orders_model.dart +++ b/lib/core/model/pharmacies/orders_model.dart @@ -32,6 +32,10 @@ class Orders { bool canCancel; bool canRefund; dynamic customerId; + double orderSubtotalExclTax; + dynamic orderShippingExclTax; + double orderTax; + Orders( {this.id, @@ -43,7 +47,10 @@ class Orders { this.orderStatusn, this.canCancel, this.canRefund, - this.customerId,}); + this.customerId, + this.orderShippingExclTax, + this.orderSubtotalExclTax, + this.orderTax,}); Orders.fromJson(Map json) { try { @@ -57,6 +64,9 @@ class Orders { canCancel = json['can_cancel']; canRefund = json['can_refund']; customerId = json['customer_id']; + orderSubtotalExclTax= json["order_subtotal_excl_tax"].toDouble(); + orderShippingExclTax= json["order_shipping_excl_tax"]; + orderTax= json["order_tax"].toDouble(); }catch(e){ print(e); } @@ -72,6 +82,9 @@ class Orders { data['order_status_id'] = this.orderStatusId; data['order_status'] = this.orderStatus; data['order_statusn'] = this.orderStatusn; + data ["order_subtotal_excl_tax"] = this.orderSubtotalExclTax; + data ["order_shipping_excl_tax"]= this.orderShippingExclTax; + data ["order_tax"]= this.orderTax; return data; } } diff --git a/lib/core/model/pharmacies/recommendedProduct_model.dart b/lib/core/model/pharmacies/recommendedProduct_model.dart index ce17e2a8..e1e88cd8 100644 --- a/lib/core/model/pharmacies/recommendedProduct_model.dart +++ b/lib/core/model/pharmacies/recommendedProduct_model.dart @@ -1,11 +1,9 @@ class RecommendedProductModel { - String messageStatus; List products; - RecommendedProductModel({this.messageStatus, this.products}); + RecommendedProductModel({this.products}); RecommendedProductModel.fromJson(Map json) { - messageStatus = json['MessageStatus']; if (json['products'] != null) { products = new List(); json['products'].forEach((v) { @@ -16,7 +14,6 @@ class RecommendedProductModel { Map toJson() { final Map data = new Map(); - data['MessageStatus'] = this.messageStatus; if (this.products != null) { data['products'] = this.products.map((v) => v.toJson()).toList(); } @@ -29,238 +26,213 @@ class Products { bool visibleIndividually; String name; String namen; - List localizedNames; String shortDescription; String shortDescriptionn; String fullDescription; String fullDescriptionn; bool markasNew; bool showOnHomePage; - Null metaKeywords; - Null metaDescription; - Null metaTitle; + dynamic metaKeywords; + dynamic metaDescription; + dynamic metaTitle; bool allowCustomerReviews; - int approvedRatingSum; - int notApprovedRatingSum; - int approvedTotalReviews; - int notApprovedTotalReviews; + dynamic approvedRatingSum; + dynamic notApprovedRatingSum; + dynamic approvedTotalReviews; + dynamic notApprovedTotalReviews; String sku; bool isRx; bool prescriptionRequired; - Null rxMessage; - Null rxMessagen; - Null manufacturerPartNumber; - Null gtin; + dynamic rxMessage; + dynamic rxMessagen; + dynamic manufacturerPartNumber; + dynamic gtin; bool isGiftCard; bool requireOtherProducts; bool automaticallyAddRequiredProducts; bool isDownload; bool unlimitedDownloads; - int maxNumberOfDownloads; - Null downloadExpirationDays; + dynamic maxNumberOfDownloads; + dynamic downloadExpirationDays; bool hasSampleDownload; bool hasUserAgreement; bool isRecurring; - int recurringCycleLength; - int recurringTotalCycles; + dynamic recurringCycleLength; + dynamic recurringTotalCycles; bool isRental; - int rentalPriceLength; + dynamic rentalPriceLength; bool isShipEnabled; bool isFreeShipping; bool shipSeparately; - int additionalShippingCharge; + dynamic additionalShippingCharge; bool isTaxExempt; bool isTelecommunicationsOrBroadcastingOrElectronicServices; bool useMultipleWarehouses; - int manageInventoryMethodId; - int stockQuantity; + dynamic manageInventoryMethodId; + dynamic stockQuantity; String stockAvailability; String stockAvailabilityn; bool displayStockAvailability; bool displayStockQuantity; - int minStockQuantity; - int notifyAdminForQuantityBelow; + dynamic minStockQuantity; + dynamic notifyAdminForQuantityBelow; bool allowBackInStockSubscriptions; - int orderMinimumQuantity; - int orderMaximumQuantity; - Null allowedQuantities; + dynamic orderMinimumQuantity; + dynamic orderMaximumQuantity; + dynamic allowedQuantities; bool allowAddingOnlyExistingAttributeCombinations; bool disableBuyButton; bool disableWishlistButton; bool availableForPreOrder; - Null preOrderAvailabilityStartDateTimeUtc; + dynamic preOrderAvailabilityStartDateTimeUtc; bool callForPrice; - double price; - int oldPrice; - double productCost; - Null specialPrice; - Null specialPriceStartDateTimeUtc; - Null specialPriceEndDateTimeUtc; + dynamic price; + dynamic oldPrice; + dynamic productCost; + dynamic specialPrice; + dynamic specialPriceStartDateTimeUtc; + dynamic specialPriceEndDateTimeUtc; bool customerEntersPrice; - int minimumCustomerEnteredPrice; - int maximumCustomerEnteredPrice; + dynamic minimumCustomerEnteredPrice; + dynamic maximumCustomerEnteredPrice; bool basepriceEnabled; - int basepriceAmount; - int basepriceBaseAmount; + dynamic basepriceAmount; + dynamic basepriceBaseAmount; bool hasTierPrices; bool hasDiscountsApplied; - Null discountName; - Null discountNamen; - Null discountDescription; - Null discountDescriptionn; - Null discountPercentage; + dynamic discountName; + dynamic discountNamen; + dynamic discountDescription; + dynamic discountDescriptionn; + dynamic discountPercentage; String currency; String currencyn; double weight; - int length; - int width; - int height; - Null availableStartDateTimeUtc; - Null availableEndDateTimeUtc; - int displayOrder; + dynamic length; + dynamic width; + dynamic height; + dynamic availableStartDateTimeUtc; + dynamic availableEndDateTimeUtc; + dynamic displayOrder; bool published; bool deleted; String createdOnUtc; String updatedOnUtc; String productType; - int parentGroupedProductId; - List roleIds; - List discountIds; - List storeIds; - List manufacturerIds; - List reviews; - List images; - List attributes; - List specifications; - List associatedProductIds; - List tags; - int vendorId; + dynamic parentGroupedProductId; + dynamic vendorId; String seName; + List images; - Products( - {this.id, - this.visibleIndividually, - this.name, - this.namen, - this.localizedNames, - this.shortDescription, - this.shortDescriptionn, - this.fullDescription, - this.fullDescriptionn, - this.markasNew, - this.showOnHomePage, - this.metaKeywords, - this.metaDescription, - this.metaTitle, - this.allowCustomerReviews, - this.approvedRatingSum, - this.notApprovedRatingSum, - this.approvedTotalReviews, - this.notApprovedTotalReviews, - this.sku, - this.isRx, - this.prescriptionRequired, - this.rxMessage, - this.rxMessagen, - this.manufacturerPartNumber, - this.gtin, - this.isGiftCard, - this.requireOtherProducts, - this.automaticallyAddRequiredProducts, - this.isDownload, - this.unlimitedDownloads, - this.maxNumberOfDownloads, - this.downloadExpirationDays, - this.hasSampleDownload, - this.hasUserAgreement, - this.isRecurring, - this.recurringCycleLength, - this.recurringTotalCycles, - this.isRental, - this.rentalPriceLength, - this.isShipEnabled, - this.isFreeShipping, - this.shipSeparately, - this.additionalShippingCharge, - this.isTaxExempt, - this.isTelecommunicationsOrBroadcastingOrElectronicServices, - this.useMultipleWarehouses, - this.manageInventoryMethodId, - this.stockQuantity, - this.stockAvailability, - this.stockAvailabilityn, - this.displayStockAvailability, - this.displayStockQuantity, - this.minStockQuantity, - this.notifyAdminForQuantityBelow, - this.allowBackInStockSubscriptions, - this.orderMinimumQuantity, - this.orderMaximumQuantity, - this.allowedQuantities, - this.allowAddingOnlyExistingAttributeCombinations, - this.disableBuyButton, - this.disableWishlistButton, - this.availableForPreOrder, - this.preOrderAvailabilityStartDateTimeUtc, - this.callForPrice, - this.price, - this.oldPrice, - this.productCost, - this.specialPrice, - this.specialPriceStartDateTimeUtc, - this.specialPriceEndDateTimeUtc, - this.customerEntersPrice, - this.minimumCustomerEnteredPrice, - this.maximumCustomerEnteredPrice, - this.basepriceEnabled, - this.basepriceAmount, - this.basepriceBaseAmount, - this.hasTierPrices, - this.hasDiscountsApplied, - this.discountName, - this.discountNamen, - this.discountDescription, - this.discountDescriptionn, - this.discountPercentage, - this.currency, - this.currencyn, - this.weight, - this.length, - this.width, - this.height, - this.availableStartDateTimeUtc, - this.availableEndDateTimeUtc, - this.displayOrder, - this.published, - this.deleted, - this.createdOnUtc, - this.updatedOnUtc, - this.productType, - this.parentGroupedProductId, - this.roleIds, - this.discountIds, - this.storeIds, - this.manufacturerIds, - this.reviews, - this.images, - this.attributes, - this.specifications, - this.associatedProductIds, - this.tags, - this.vendorId, - this.seName}); + Products({ + this.id, + this.visibleIndividually, + this.name, + this.namen, + this.shortDescription, + this.shortDescriptionn, + this.fullDescription, + this.fullDescriptionn, + this.markasNew, + this.showOnHomePage, + this.metaKeywords, + this.metaDescription, + this.metaTitle, + this.allowCustomerReviews, + this.approvedRatingSum, + this.notApprovedRatingSum, + this.approvedTotalReviews, + this.notApprovedTotalReviews, + this.sku, + this.isRx, + this.prescriptionRequired, + this.rxMessage, + this.rxMessagen, + this.manufacturerPartNumber, + this.gtin, + this.isGiftCard, + this.requireOtherProducts, + this.automaticallyAddRequiredProducts, + this.isDownload, + this.unlimitedDownloads, + this.maxNumberOfDownloads, + this.downloadExpirationDays, + this.hasSampleDownload, + this.hasUserAgreement, + this.isRecurring, + this.recurringCycleLength, + this.recurringTotalCycles, + this.isRental, + this.rentalPriceLength, + this.isShipEnabled, + this.isFreeShipping, + this.shipSeparately, + this.additionalShippingCharge, + this.isTaxExempt, + this.isTelecommunicationsOrBroadcastingOrElectronicServices, + this.useMultipleWarehouses, + this.manageInventoryMethodId, + this.stockQuantity, + this.stockAvailability, + this.stockAvailabilityn, + this.displayStockAvailability, + this.displayStockQuantity, + this.minStockQuantity, + this.notifyAdminForQuantityBelow, + this.allowBackInStockSubscriptions, + this.orderMinimumQuantity, + this.orderMaximumQuantity, + this.allowedQuantities, + this.allowAddingOnlyExistingAttributeCombinations, + this.disableBuyButton, + this.disableWishlistButton, + this.availableForPreOrder, + this.preOrderAvailabilityStartDateTimeUtc, + this.callForPrice, + this.price, + this.oldPrice, + this.productCost, + this.specialPrice, + this.specialPriceStartDateTimeUtc, + this.specialPriceEndDateTimeUtc, + this.customerEntersPrice, + this.minimumCustomerEnteredPrice, + this.maximumCustomerEnteredPrice, + this.basepriceEnabled, + this.basepriceAmount, + this.basepriceBaseAmount, + this.hasTierPrices, + this.hasDiscountsApplied, + this.discountName, + this.discountNamen, + this.discountDescription, + this.discountDescriptionn, + this.discountPercentage, + this.currency, + this.currencyn, + this.weight, + this.length, + this.width, + this.height, + this.availableStartDateTimeUtc, + this.availableEndDateTimeUtc, + this.displayOrder, + this.published, + this.deleted, + this.createdOnUtc, + this.updatedOnUtc, + this.productType, + this.parentGroupedProductId, + this.vendorId, + this.seName, + this.images, + }); Products.fromJson(Map json) { id = json['id']; visibleIndividually = json['visible_individually']; name = json['name']; namen = json['namen']; - if (json['localized_names'] != null) { - localizedNames = new List(); - json['localized_names'].forEach((v) { - localizedNames.add(new LocalizedNames.fromJson(v)); - }); - } shortDescription = json['short_description']; shortDescriptionn = json['short_descriptionn']; fullDescription = json['full_description']; @@ -285,7 +257,7 @@ class Products { isGiftCard = json['is_gift_card']; requireOtherProducts = json['require_other_products']; automaticallyAddRequiredProducts = - json['automatically_add_required_products']; + json['automatically_add_required_products']; isDownload = json['is_download']; unlimitedDownloads = json['unlimited_downloads']; maxNumberOfDownloads = json['max_number_of_downloads']; @@ -303,7 +275,7 @@ class Products { additionalShippingCharge = json['additional_shipping_charge']; isTaxExempt = json['is_tax_exempt']; isTelecommunicationsOrBroadcastingOrElectronicServices = - json['is_telecommunications_or_broadcasting_or_electronic_services']; + json['is_telecommunications_or_broadcasting_or_electronic_services']; useMultipleWarehouses = json['use_multiple_warehouses']; manageInventoryMethodId = json['manage_inventory_method_id']; stockQuantity = json['stock_quantity']; @@ -318,12 +290,12 @@ class Products { orderMaximumQuantity = json['order_maximum_quantity']; allowedQuantities = json['allowed_quantities']; allowAddingOnlyExistingAttributeCombinations = - json['allow_adding_only_existing_attribute_combinations']; + json['allow_adding_only_existing_attribute_combinations']; disableBuyButton = json['disable_buy_button']; disableWishlistButton = json['disable_wishlist_button']; availableForPreOrder = json['available_for_pre_order']; preOrderAvailabilityStartDateTimeUtc = - json['pre_order_availability_start_date_time_utc']; + json['pre_order_availability_start_date_time_utc']; callForPrice = json['call_for_price']; price = json['price']; oldPrice = json['old_price']; @@ -359,63 +331,14 @@ class Products { updatedOnUtc = json['updated_on_utc']; productType = json['product_type']; parentGroupedProductId = json['parent_grouped_product_id']; - if (json['role_ids'] != null) { - roleIds = new List(); - json['role_ids'].forEach((v) { - roleIds.add(null); - }); - } - if (json['discount_ids'] != null) { - discountIds = new List(); - json['discount_ids'].forEach((v) { - discountIds.add(null); - }); - } - if (json['store_ids'] != null) { - storeIds = new List(); - json['store_ids'].forEach((v) { - storeIds.add(null); - }); - } - manufacturerIds = json['manufacturer_ids'].cast(); - if (json['reviews'] != null) { - reviews = new List(); - json['reviews'].forEach((v) { - reviews.add(new Reviews.fromJson(v)); - }); - } + vendorId = json['vendor_id']; + seName = json['se_name']; if (json['images'] != null) { images = new List(); json['images'].forEach((v) { images.add(new Images.fromJson(v)); }); } - if (json['attributes'] != null) { - attributes = new List(); - json['attributes'].forEach((v) { - attributes.add(v); - }); - } - if (json['specifications'] != null) { - specifications = new List(); - json['specifications'].forEach((v) { - specifications.add(new Specifications.fromJson(v)); - }); - } - if (json['associated_product_ids'] != null) { - associatedProductIds = new List(); - json['associated_product_ids'].forEach((v) { - associatedProductIds.add(v); - }); - } - if (json['tags'] != null) { - tags = new List(); - json['tags'].forEach((v) { - tags.add(v); - }); - } - vendorId = json['vendor_id']; - seName = json['se_name']; } Map toJson() { @@ -424,10 +347,6 @@ class Products { data['visible_individually'] = this.visibleIndividually; data['name'] = this.name; data['namen'] = this.namen; - if (this.localizedNames != null) { - data['localized_names'] = - this.localizedNames.map((v) => v.toJson()).toList(); - } data['short_description'] = this.shortDescription; data['short_descriptionn'] = this.shortDescriptionn; data['full_description'] = this.fullDescription; @@ -528,289 +447,12 @@ class Products { data['updated_on_utc'] = this.updatedOnUtc; data['product_type'] = this.productType; data['parent_grouped_product_id'] = this.parentGroupedProductId; - if (this.roleIds != null) { - data['role_ids'] = this.roleIds.map((v) => v); - } - if (this.discountIds != null) { - data['discount_ids'] = this.discountIds.map((v) => v); - } - if (this.storeIds != null) { - data['store_ids'] = this.storeIds.map((v) => v); - } - data['manufacturer_ids'] = this.manufacturerIds; - if (this.reviews != null) { - data['reviews'] = this.reviews.map((v) => v.toJson()).toList(); - } - if (this.images != null) { - data['images'] = this.images.map((v) => v.toJson()).toList(); - } - if (this.attributes != null) { - data['attributes'] = this.attributes.map((v) => v); - } - if (this.specifications != null) { - data['specifications'] = - this.specifications.map((v) => v.toJson()).toList(); - } - if (this.associatedProductIds != null) { - data['associated_product_ids'] = - this.associatedProductIds.map((v) => v); - } - if (this.tags != null) { - data['tags'] = this.tags.map((v) => v); - } data['vendor_id'] = this.vendorId; data['se_name'] = this.seName; - return data; - } -} - -class LocalizedNames { - int languageId; - String localizedName; - - LocalizedNames({this.languageId, this.localizedName}); - - LocalizedNames.fromJson(Map json) { - languageId = json['language_id']; - localizedName = json['localized_name']; - } - - Map toJson() { - final Map data = new Map(); - data['language_id'] = this.languageId; - data['localized_name'] = this.localizedName; - return data; - } -} - -class Reviews { - int id; - int position; - int reviewId; - int customerId; - int productId; - int storeId; - bool isApproved; - String title; - String reviewText; - Null replyText; - int rating; - int helpfulYesTotal; - int helpfulNoTotal; - String createdOnUtc; - Customer customer; - Null product; - - Reviews( - {this.id, - this.position, - this.reviewId, - this.customerId, - this.productId, - this.storeId, - this.isApproved, - this.title, - this.reviewText, - this.replyText, - this.rating, - this.helpfulYesTotal, - this.helpfulNoTotal, - this.createdOnUtc, - this.customer, - this.product}); - - Reviews.fromJson(Map json) { - id = json['id']; - position = json['position']; - reviewId = json['review_id']; - customerId = json['customer_id']; - productId = json['product_id']; - storeId = json['store_id']; - isApproved = json['is_approved']; - title = json['title']; - reviewText = json['review_text']; - replyText = json['reply_text']; - rating = json['rating']; - helpfulYesTotal = json['helpful_yes_total']; - helpfulNoTotal = json['helpful_no_total']; - createdOnUtc = json['created_on_utc']; - customer = json['customer'] != null - ? new Customer.fromJson(json['customer']) - : null; - product = json['product']; - } - - Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['position'] = this.position; - data['review_id'] = this.reviewId; - data['customer_id'] = this.customerId; - data['product_id'] = this.productId; - data['store_id'] = this.storeId; - data['is_approved'] = this.isApproved; - data['title'] = this.title; - data['review_text'] = this.reviewText; - data['reply_text'] = this.replyText; - data['rating'] = this.rating; - data['helpful_yes_total'] = this.helpfulYesTotal; - data['helpful_no_total'] = this.helpfulNoTotal; - data['created_on_utc'] = this.createdOnUtc; - if (this.customer != null) { - data['customer'] = this.customer.toJson(); - } - data['product'] = this.product; - return data; - } -} - -class Customer { - Null fileNumber; - Null iqamaNumber; - int isOutSa; - int patientType; - Null gender; - String birthDate; - Null phone; - Null countryCode; - Null yahalaAccountno; - Null billingAddress; - Null shippingAddress; - List addresses; - String id; - String username; - String email; - Null firstName; - Null lastName; - Null languageId; - Null adminComment; - Null isTaxExempt; - Null hasShoppingCartItems; - Null active; - Null deleted; - Null isSystemAccount; - Null systemName; - Null lastIpAddress; - Null createdOnUtc; - Null lastLoginDateUtc; - Null lastActivityDateUtc; - Null registeredInStoreId; - List roleIds; - - Customer( - {this.fileNumber, - this.iqamaNumber, - this.isOutSa, - this.patientType, - this.gender, - this.birthDate, - this.phone, - this.countryCode, - this.yahalaAccountno, - this.billingAddress, - this.shippingAddress, - this.addresses, - this.id, - this.username, - this.email, - this.firstName, - this.lastName, - this.languageId, - this.adminComment, - this.isTaxExempt, - this.hasShoppingCartItems, - this.active, - this.deleted, - this.isSystemAccount, - this.systemName, - this.lastIpAddress, - this.createdOnUtc, - this.lastLoginDateUtc, - this.lastActivityDateUtc, - this.registeredInStoreId, - this.roleIds}); - - Customer.fromJson(Map json) { - fileNumber = json['file_number']; - iqamaNumber = json['iqama_number']; - isOutSa = json['is_out_sa']; - patientType = json['patient_type']; - gender = json['gender']; - birthDate = json['birth_date']; - phone = json['phone']; - countryCode = json['country_code']; - yahalaAccountno = json['yahala_accountno']; - billingAddress = json['billing_address']; - shippingAddress = json['shipping_address']; - if (json['addresses'] != null) { - addresses = new List(); - json['addresses'].forEach((v) { - addresses.add(v); - }); - } - id = json['id']; - username = json['username']; - email = json['email']; - firstName = json['first_name']; - lastName = json['last_name']; - languageId = json['language_id']; - adminComment = json['admin_comment']; - isTaxExempt = json['is_tax_exempt']; - hasShoppingCartItems = json['has_shopping_cart_items']; - active = json['active']; - deleted = json['deleted']; - isSystemAccount = json['is_system_account']; - systemName = json['system_name']; - lastIpAddress = json['last_ip_address']; - createdOnUtc = json['created_on_utc']; - lastLoginDateUtc = json['last_login_date_utc']; - lastActivityDateUtc = json['last_activity_date_utc']; - registeredInStoreId = json['registered_in_store_id']; - if (json['role_ids'] != null) { - roleIds = new List(); - json['role_ids'].forEach((v) { - roleIds.add(null); - }); + if (this.images != null) { + data['images'] = this.images.map((v) => v.toJson()).toList(); } - } - Map toJson() { - final Map data = new Map(); - data['file_number'] = this.fileNumber; - data['iqama_number'] = this.iqamaNumber; - data['is_out_sa'] = this.isOutSa; - data['patient_type'] = this.patientType; - data['gender'] = this.gender; - data['birth_date'] = this.birthDate; - data['phone'] = this.phone; - data['country_code'] = this.countryCode; - data['yahala_accountno'] = this.yahalaAccountno; - data['billing_address'] = this.billingAddress; - data['shipping_address'] = this.shippingAddress; - if (this.addresses != null) { - data['addresses'] = this.addresses.map((v) => v); - } - data['id'] = this.id; - data['username'] = this.username; - data['email'] = this.email; - data['first_name'] = this.firstName; - data['last_name'] = this.lastName; - data['language_id'] = this.languageId; - data['admin_comment'] = this.adminComment; - data['is_tax_exempt'] = this.isTaxExempt; - data['has_shopping_cart_items'] = this.hasShoppingCartItems; - data['active'] = this.active; - data['deleted'] = this.deleted; - data['is_system_account'] = this.isSystemAccount; - data['system_name'] = this.systemName; - data['last_ip_address'] = this.lastIpAddress; - data['created_on_utc'] = this.createdOnUtc; - data['last_login_date_utc'] = this.lastLoginDateUtc; - data['last_activity_date_utc'] = this.lastActivityDateUtc; - data['registered_in_store_id'] = this.registeredInStoreId; - if (this.roleIds != null) { - data['role_ids'] = this.roleIds.map((v) => v); - } return data; } } @@ -842,40 +484,3 @@ class Images { return data; } } - -class Specifications { - int id; - int displayOrder; - String defaultValue; - String defaultValuen; - String name; - String nameN; - - Specifications( - {this.id, - this.displayOrder, - this.defaultValue, - this.defaultValuen, - this.name, - this.nameN}); - - Specifications.fromJson(Map json) { - id = json['id']; - displayOrder = json['display_order']; - defaultValue = json['default_value']; - defaultValuen = json['default_valuen']; - name = json['name']; - nameN = json['nameN']; - } - - Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['display_order'] = this.displayOrder; - data['default_value'] = this.defaultValue; - data['default_valuen'] = this.defaultValuen; - data['name'] = this.name; - data['nameN'] = this.nameN; - return data; - } -} \ No newline at end of file diff --git a/lib/core/service/parmacyModule/prescription_service.dart b/lib/core/service/parmacyModule/prescription_service.dart index ce931812..ddeaef20 100644 --- a/lib/core/service/parmacyModule/prescription_service.dart +++ b/lib/core/service/parmacyModule/prescription_service.dart @@ -1,11 +1,9 @@ - import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/Prescriptions.dart'; - class PrescriptionService extends BaseService { final AppSharedPreferences sharedPref = AppSharedPreferences(); bool isFinished = true; @@ -16,7 +14,6 @@ class PrescriptionService extends BaseService { List _prescriptionsList = List(); List get prescriptionsList => _prescriptionsList; - // Future getPrescription() async { // hasError = false; // url = PRESCRIPTION; @@ -35,29 +32,23 @@ class PrescriptionService extends BaseService { // }); // } Future getPrescription() async { - url = PRESCRIPTION; - print("Print PRESCRIPTION url" + url); + url = PRESCRIPTION; + print("Print PRESCRIPTION url" + url); hasError = false; -<<<<<<< HEAD Map body = Map(); body['isDentalAllowedBackend'] = false; - await baseAppClient.post(PRESCRIPTION, -======= - url = PRESCRIPTION; print("Print PRESCRIPTION url" + url); await baseAppClient.post(url, ->>>>>>> development onSuccess: (dynamic response, int statusCode) { - _prescriptionsList.clear(); - response['PatientPrescriptionList'].forEach((prescriptions) { - _prescriptionsList.add(Prescriptions.fromJson(prescriptions)); - }); - print(_prescriptionsList.length); - print(response); - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, body: body); + _prescriptionsList.clear(); + response['PatientPrescriptionList'].forEach((prescriptions) { + _prescriptionsList.add(Prescriptions.fromJson(prescriptions)); + }); + print(_prescriptionsList.length); + print("response is -------------"+response); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: body); } - -} \ No newline at end of file +} diff --git a/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart b/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart index ddb10f4e..b3f581db 100644 --- a/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart +++ b/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart @@ -34,13 +34,13 @@ class PharmacyModuleViewModel extends BaseViewModel { _pharmacyService.lastVisitedProducts; - List get recommendedProduct => - _recommendedProductService.recommendedProductList; + List get recommendedProductList => + _recommendedProductService.recommendedList; List get prescriptionsList => _prescriptionService.prescriptionsList; - + bool hasError = false; // List get pharmacyPrescriptionsList => PharmacyProduct.pharmacyPrescriptionsList ; Future getPharmacyHomeData() async { @@ -136,10 +136,10 @@ class PharmacyModuleViewModel extends BaseViewModel { } /////////////RecommendedProducts - getRecommendedProducts(ProductId) async { - print("_____________________________________"); - print(ProductId); - await _recommendedProductService.getRecommendedProducts(ProductId.toString()); + getRecommendedProducts(productId) async { + hasError = false; + setState(ViewState.Busy); + await _recommendedProductService.getRecommendedProducts(productId.toString()); if (_recommendedProductService.hasError) { error = _recommendedProductService.error; setState(ViewState.Error); diff --git a/lib/pages/pharmacies/product_detail.dart b/lib/pages/pharmacies/product_detail.dart index 73157d85..41daef80 100644 --- a/lib/pages/pharmacies/product_detail.dart +++ b/lib/pages/pharmacies/product_detail.dart @@ -280,45 +280,23 @@ class __ProductDetailPageState extends State { SizedBox( height: 10, ), - Container( - child: Text( - languageID == 'ar' - ? widget.product.shortDescriptionn - : widget.product.shortDescription ?? - "", - style: TextStyle( - fontSize: 16, - fontFamily: 'WorkSans-Regular'), - ), - ), - SizedBox( - height: 10, - ), - Container( - child: Text( - TranslationBase.of(context).howToUse, - style: TextStyle( - fontSize: 17, - color: Colors.grey, - fontWeight: FontWeight.w600), - ), - ), Divider(height: 1, color: Colors.grey), SizedBox( - height: 10, + height: 15, ), Container( child: Text( languageID == 'ar' ? widget.product.fullDescriptionn - : widget.product.fullDescription, + : widget.product.fullDescription ?? + "", style: TextStyle( fontSize: 16, fontFamily: 'WorkSans-Regular'), ), ), SizedBox( - height: 10, + height: 20, ), // Container( // child: Text( @@ -329,6 +307,32 @@ class __ProductDetailPageState extends State { // fontWeight: FontWeight.w600), // ), // ), +// Divider(height: 1, color: Colors.grey), +// SizedBox( +// height: 10, +// ), +// Container( +// child: Text( +// languageID == 'ar' +// ? widget.product.fullDescriptionn +// : widget.product.fullDescription, +// style: TextStyle( +// fontSize: 16, +// fontFamily: 'WorkSans-Regular'), +// ), +// ), +// SizedBox( +// height: 10, +// ), +// Container( +// child: Text( +// TranslationBase.of(context).howToUse, +// style: TextStyle( +// fontSize: 17, +// color: Colors.grey, +// fontWeight: FontWeight.w600), +// ), +// ), // SizedBox( // height: 6, // ), @@ -1894,8 +1898,9 @@ checkWishlist() async { ProductDetailViewModel x = new ProductDetailViewModel(); await x.checkWishlistData(); for (int i = 0; i < x.wishListItems.length; i++) { -// print(itemID); -// print(x.wishListItems[i].product.id); + print("---------Enad----wishlist---------------"); + print(itemID); + print(x.wishListItems[i].product.id); if (itemID == x.wishListItems[i].product.id) { isInWishlit = true; // print('in wishlist'); diff --git a/lib/pages/pharmacies/screens/pharmacy_module_page.dart b/lib/pages/pharmacies/screens/pharmacy_module_page.dart index 3dfc94c9..3f09029a 100644 --- a/lib/pages/pharmacies/screens/pharmacy_module_page.dart +++ b/lib/pages/pharmacies/screens/pharmacy_module_page.dart @@ -1,14 +1,16 @@ - import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/size_config.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/recommendedProduct_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/landing/home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; import 'package:diplomaticquarterapp/pages/offers_categorise_page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/product-brands.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/lacum-activitaion-vida-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/lakum-main-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/recommended-product-page.dart'; @@ -23,21 +25,49 @@ import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:rating_bar/rating_bar.dart'; +bool isInWishlist = false; +int price = 0; +dynamic itemID; +var product; +var customerId; +var item; dynamic languageID; -class PharmacyPage extends StatelessWidget { -// Products productModel ; +List wishlistData; + +class PharmacyPage extends StatefulWidget { +// final PharmacyProduct product; +// PharmacyPage(this.product); + + + @override + _PharmacyPageState createState() => _PharmacyPageState(); +} + +class _PharmacyPageState extends State { + dynamic wishlistVar; getLanguageID() async { languageID = await sharedPref.getString(APP_LANGUAGE); } + List recommendedProductList = []; - var model; + List wishList = []; + + var model; +// String ProductId="4561"; + //String id ="3608"; + String ProductId=""; + String id =""; @override void initState() { - print("model recommended is " + model.recommendedProduct.length); - + checkWishlist(); + // userInfo(widget.product.id, widget.product); + userInfo(id, product); + print("-------------this--------------"); + print(itemID); } @override @@ -303,102 +333,182 @@ class PharmacyPage extends StatelessWidget { ), ), Container( - height: model.recommendedProduct.length > 0 - ? MediaQuery.of(context).size.height * 0.28 + height: model.recommendedProductList.length > 0 + ? MediaQuery.of(context).size.height * 0.30 : 0, - padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 22.0), - margin: EdgeInsets.only(left: 10), + margin: EdgeInsets.symmetric( + horizontal: 6, + vertical: 4), +// padding: EdgeInsets.symmetric(horizontal: 5.0, vertical: 22.0), +// margin: EdgeInsets.only(left: 10), child:BaseView( - onModelReady: (model) => model.getRecommendedProducts(4561 ), - builder: (_, model, wi) => model.recommendedProduct[0].products.length > 0 + onModelReady: (model) => model.getRecommendedProducts(ProductId), + builder: (_, model, wi) => model.recommendedProductList.length != null ? ListView.builder( -// itemBuilder: (ctx, i) => -// ProductTileItem(model.recommendedProduct[i]), -// scrollDirection: Axis.horizontal, -// itemCount: model.recommendedProduct.length, scrollDirection: Axis.horizontal, shrinkWrap: true, physics: ScrollPhysics(), // physics: NeverScrollableScrollPhysics(), - itemCount: model.recommendedProduct[0].products.length, + itemCount: model.recommendedProductList.length, itemBuilder: (context, index) { - return Container( - height: MediaQuery.of(context).size.height * 0.6, - padding: EdgeInsets.only(bottom: 5.0, left: 5.0, right: 8.0), - margin: EdgeInsets.only(right: 10.0), - decoration: BoxDecoration( - border: Border.all( - color: Colors.grey, - style: BorderStyle.solid, - width: 1.0, + return + Card( + elevation: 2, + shape: RoundedRectangleBorder( + side: BorderSide(color: Colors.grey[300], width: 2), + borderRadius: BorderRadius.circular(10)), +// + margin: EdgeInsets.symmetric( + horizontal: 8, + vertical: 4, + ), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(15), ), - color: Colors.white, - borderRadius: BorderRadius.circular(10.0)), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - margin: EdgeInsets.fromLTRB(0, 16, 0, 0), - alignment: Alignment.center, - child: (model.recommendedProduct[0].products[index].images != null && - model.recommendedProduct[0].products[index].images.length > 0) - ? Image.network( - model.recommendedProduct[0].products[index].images[0].src.toString(), + + ), + padding: EdgeInsets.symmetric(horizontal: 4), + width: MediaQuery.of(context).size.width / 3, +// + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + Stack( + children:[ + Container( + child: Align( + alignment: Alignment.topRight, + child: //true + itemID.contains(model.recommendedProductList[index].id) + // !isInWishlist + ? IconButton( + icon: Icon(Icons.favorite_border), + color: Colors.grey, + iconSize: 30, + onPressed: () { + setState(() { + addToWishlistFunction(itemID); + }); + }, + ) + : IconButton( + icon: Icon(Icons.favorite), + color: Colors.red, + iconSize: 30, + onPressed: () { + setState(() { + deleteFromWishlistFunction(itemID); + }); + }, + ) +// + ), + ), + Container( + margin: EdgeInsets.fromLTRB(0, 16, 10, 16), + alignment: Alignment.center, +// padding: EdgeInsets.only(left: 25, bottom: 20), + child: (model.recommendedProductList[index].images != null && + model.recommendedProductList[index].images.length > 0) + ? Image.network( + model.recommendedProductList[index].images[0].src.toString(), // item.images[0].src, - fit: BoxFit.cover, - height: 80, - ) - : Image.asset( - "assets/images/no_image.png", - fit: BoxFit.cover, - height: 80, - ), - ), - Text( - model.recommendedProduct[0].products[index].shortDescription - .toString(), - style: TextStyle( - color: Colors.green, - fontSize: 15.0, + fit: BoxFit.cover, + height: 60, + ) + : Image.asset( + "assets/images/no_image.png", + fit: BoxFit.cover, + height: 60, + ), + ), + Container( + width: model.recommendedProductList[index].rxMessage != null + ? MediaQuery.of(context).size.width / 5 + : 0, + padding: EdgeInsets.all(4), + decoration: BoxDecoration( + color: Color(0xffb23838), + borderRadius: + BorderRadius.only(topLeft: Radius.circular(6)), + ), + child: Texts( + model.recommendedProductList[index].rxMessage != null + ? model.recommendedProductList[index].rxMessage : "", + color: Colors.white, + regular: true, + fontSize: 10, + fontWeight: FontWeight.w400, + ), + ), + ] ), + Container( + margin: EdgeInsets.symmetric( + horizontal: 6, + vertical: 0, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + model.recommendedProductList[index].name, + style: TextStyle( + color: Colors.black, + fontSize: 13.0, // fontWeight: FontWeight.bold, + ), + ), + Padding( +// padding: const EdgeInsets.only(top: 15, bottom: 10), + padding: const EdgeInsets.only(top: 10, bottom: 5), + child: Texts( + "SAR ${model.recommendedProductList[index].price}", + bold: true, + fontSize: 14, + ), + ), + ], + ), ), - ), - Padding( - padding: const EdgeInsets.only(top: 4, bottom: 4), - child: Texts( - "SAR ${model.recommendedProduct[0].products[index].price}", - bold: true, - fontSize: 14, - ), - ), - Row( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ -// Container( + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.only(right: 10), // margin: EdgeInsets.only(left: 5), -// child: Align( -// alignment: Alignment.topLeft, -// child: RatingBar.readOnly( -// initialRating: -// model.recommendedProduct[0].products[index].reviews.toDouble(), -//// initialRating: productRate, -// size: 15.0, -// filledColor: Colors.yellow[700], -// emptyColor: Colors.grey[500], -// isHalfAllowed: true, -// halfFilledIcon: Icons.star_half, -// filledIcon: Icons.star, -// emptyIcon: Icons.star, -// ), -// ), -// ), - ]), - ], + child: Align( + alignment: Alignment.topLeft, + child: RatingBar.readOnly( + initialRating: + model.recommendedProductList[index].approvedRatingSum.toDouble(), +// initialRating: productRate, + size: 13.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, + ), + ), + ), + Texts( + "(${model.recommendedProductList[index].approvedTotalReviews.toString()})", +// bold: true, + fontSize: 12, + ), + ]), + ], + ), ), ); } - ): Container( + ): + Container( // child: Text("NO DATA"), ), ), @@ -509,8 +619,56 @@ class PharmacyPage extends StatelessWidget { ), ); } + + + addToWishlistFunction(itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + isInWishlist = true; + await x.addToWishlistData(itemID); + } + + deleteFromWishlistFunction(itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + isInWishlist = false; + await x.addToWishlistData(itemID); + } + + + + checkWishlist() async { + ProductDetailViewModel x = new ProductDetailViewModel(); + await x.checkWishlistData(); + for (int i = 0; i < x.wishListItems.length; i++) { + // itemID = x.wishListItems[i].id; + print("-------------wishlist---------------"); + print(itemID); +// print(product.id); + print(x.wishListItems[i].productId); + if (itemID == x.wishListItems[i].productId) { + isInWishlist = true; +// print('in wishlist'); + break; + } else { + isInWishlist = false; +// print('not in wishlist'); + } + } + } + + + Future userInfo(id, product) async { + customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID); + if (customerId != null) { + itemID = id; + product = product; + checkWishlist(); + } + print("customerId:$customerId"); + return customerId; + } } + class GridViewButtons extends StatelessWidget { final PharmacyModuleViewModel model; @@ -643,6 +801,8 @@ class GridViewCard extends StatelessWidget { ); } + + String getDate(String date) { DateTime dateObj = DateUtil.convertStringToDate(date); return DateUtil.getWeekDay(dateObj.weekday) + @@ -654,3 +814,34 @@ class GridViewCard extends StatelessWidget { dateObj.year.toString(); } } + + + + + +class test extends StatefulWidget { + @override + _testState createState() => _testState(); +} + + +class _testState extends State { + @override + Widget build(BuildContext context) { + return Container(); + } +} +//addWishlistData() async { +// ProductDetailViewModel x = new ProductDetailViewModel(); +// await wishlistData.add(x.checkWishlistData()); +// print("-------------testWishlist---------------"); +// +//} + +// checkWishlist() async { +// ProductDetailViewModel x = new ProductDetailViewModel(); +// wishlistVar = await x.checkWishlistData(); +// print("wishlistVar>>>>>>>>>>>>>>>"); +// print(wishlistVar); +// +// } diff --git a/lib/pages/pharmacies/screens/recommended-product-page.dart b/lib/pages/pharmacies/screens/recommended-product-page.dart index 7d2d4c71..df5e08d3 100644 --- a/lib/pages/pharmacies/screens/recommended-product-page.dart +++ b/lib/pages/pharmacies/screens/recommended-product-page.dart @@ -1,12 +1,18 @@ - - +import 'package:diplomaticquarterapp/core/model/pharmacies/recommendedProduct_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:rating_bar/rating_bar.dart'; +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; + +dynamic languageID; +bool isInWishlist = false; +var itemID; class RecommendedProductPage extends StatefulWidget { @override @@ -14,152 +20,929 @@ class RecommendedProductPage extends StatefulWidget { } class _RecommendedProductPageState extends State - with SingleTickerProviderStateMixin{ + with SingleTickerProviderStateMixin { + List recommendedProductList = []; + String ProductId = "4561"; + bool styleOne = true; + bool styleTwo = false; + Icon styleIcon = Icon( + Icons.widgets_sharp, + color: Colors.blue, + size: 29.0, + ); + + getLanguageID() async { + languageID = await sharedPref.getString(APP_LANGUAGE); + } + @override void initState() { super.initState(); - } @override Widget build(BuildContext context) { + var size = MediaQuery.of(context).size; + final double itemHeight = ((size.height - kToolbarHeight - 24) * 0.80) / 2; + final double itemWidth = size.width / 2; return BaseView( - onModelReady: (model) => model.getRecommendedProducts(4561), - builder: (_,model, wi )=> AppScaffold( - appBarTitle:TranslationBase.of(context).recommended, - baseViewModel: model, - isShowAppBar: true, - isPharmacy:true , - body: Column( - children: [ -// Text( -// "4455" + "Result", -// style: TextStyle( -// color: Colors.black, -// fontSize: 13.0, -// ), -// ), -// SizedBox( -// height: 10, -// ), -// Divider( -// color: Colors.grey[350], -// height: 10, -// thickness: 6, -// indent: 0, -// endIndent: 0, -// ), - GridView.count( - crossAxisCount: 2 , - children: List.generate(30,(index){ - return Container( - child: Card( - color: Colors.blue, - child: Container( - height: model.recommendedProduct.length > 0 - ? MediaQuery.of(context).size.height * 0.28 - : 0, - padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 18.0), -// margin: EdgeInsets.only(left: 10), - child:BaseView( - onModelReady: (model) => model.getRecommendedProducts(4561 ), - builder: (_, model, wi) => model.recommendedProduct[0].products.length > 0 - ? ListView.builder( -// itemBuilder: (ctx, i) => -// ProductTileItem(model.recommendedProduct[i]), -// scrollDirection: Axis.horizontal, -// itemCount: model.recommendedProduct.length, - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - // physics: NeverScrollableScrollPhysics(), - itemCount: model.recommendedProduct[0].products.length, - itemBuilder: (context, index) { - return Container( - height: MediaQuery.of(context).size.height * 0.6, - padding: EdgeInsets.only(bottom: 5.0, left: 5.0, right: 8.0), - margin: EdgeInsets.only(right: 10.0), - decoration: BoxDecoration( - border: Border.all( - color: Colors.grey, - style: BorderStyle.solid, - width: 1.0,), - color: Colors.white, - borderRadius: BorderRadius.circular(10.0)), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - margin: EdgeInsets.fromLTRB(0, 16, 0, 0), - alignment: Alignment.center, - child: (model.recommendedProduct[0].products[index].images != null && - model.recommendedProduct[0].products[index].images.length > 0) - ? Image.network( - model.recommendedProduct[0].products[index].images[0].src.toString(), + onModelReady: (model) => model.getRecommendedProducts(ProductId), + builder: (_, model, wi) => AppScaffold( + appBarTitle: TranslationBase.of(context).recommended, + baseViewModel: model, + isShowAppBar: true, + isPharmacy: true, + backgroundColor: Colors.white, + body: Column(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.only( + top: 8, + bottom: 10, + left: 10, + ), + child: Text( + model.recommendedProductList.length.toString(), + style: TextStyle( + color: Colors.black, + fontSize: 14.0, + ), + ), + ), + Container( + padding: EdgeInsets.only(top: 8, bottom: 10, left: 8), + child: Text( + TranslationBase.of(context).result, + style: TextStyle( + color: Colors.black, + fontSize: 14.0, + ), + ), + ), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: SizedBox( + child: Container( + width: 1, + color: Colors.grey, + ), + ), + ), + Container( + child: Image.asset( + 'assets/images/pharmacy/sort.png', + width: 20, + height: 20, +// color: Colors.red, + ), + ), + Container( + child: Text( + TranslationBase.of(context).sort, + style: TextStyle( + color: Colors.black, + fontSize: 14.0, + ), + ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: SizedBox( + child: Container( + width: 1, + color: Colors.grey, + ), + ), + ), + Divider( + thickness: 1.0, + color: Colors.black12, + ), + Padding( + padding: EdgeInsets.all(8.0), + child: InkWell( + child: styleIcon, + onTap: () { + setState(() { + if (styleOne == true) { + styleOne = false; + styleTwo = true; + styleIcon = Icon( + Icons.auto_awesome_mosaic, + color: Colors.blue, + size: 29.0, + ); + } else { + styleOne = true; + styleTwo = false; + styleIcon = Icon( + Icons.widgets_sharp, + color: Colors.blue, + size: 29.0, + ); + } + }); + }, + ), + ), + ], + ), + ]), + SizedBox( + height: 2, + ), + Divider( + color: Colors.grey[350], + height: 10, + thickness: 6, + indent: 0, + endIndent: 0, + ), + styleOne == true + ? Container( + margin: EdgeInsets.all(5.0), + child: model.recommendedProductList.length != null + ? CustomScrollView( + primary: false, + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + slivers: [ + SliverPadding( + padding: const EdgeInsets.fromLTRB(0, 0, 0, 0), + sliver: SliverGrid.count( + crossAxisCount: 2, + childAspectRatio: (itemWidth / itemHeight), + children: model.recommendedProductList + .map((e) => Card( + elevation: 2, + shape: RoundedRectangleBorder( + side: BorderSide( + color: Colors.grey[300], + width: 2), + borderRadius: + BorderRadius.circular( + 10)), + margin: EdgeInsets.symmetric( + horizontal: 8, + vertical: 4, + ), + child: Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all( + Radius.circular(15), + ), + ), + padding: EdgeInsets.symmetric( + horizontal: 4), + width: MediaQuery.of(context) + .size + .width / + 3, +// + child: Column( + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + Stack(children: [ + Container( + child: Align( + alignment: + Alignment + .topRight, + child: //true + //wishlistVar[index].id.contains(model.recommendedProductList[index].id) + !isInWishlist + ? IconButton( + icon: + Icon(Icons.favorite_border), + color: + Colors.grey, + iconSize: + 30, + onPressed: + () { + setState(() { + addToWishlistFunction(itemID); + }); + }, + ) + : IconButton( + icon: + Icon(Icons.favorite), + color: + Colors.red, + iconSize: + 30, + onPressed: + () { + setState(() { + deleteFromWishlistFunction(itemID); + }); + }, + ) +// + ), + ), + Container( + margin: EdgeInsets + .fromLTRB(0, 16, + 10, 16), + alignment: + Alignment.center, +// padding: EdgeInsets.only(left: 25, bottom: 20), + child: (e.images != + null && + e.images.length > + 0) + ? Image.network( + e.images[0] + .src + .toString(), // item.images[0].src, - fit: BoxFit.cover, - height: 80, - ) - : Image.asset( - "assets/images/no_image.png", - fit: BoxFit.cover, - height: 80, + fit: BoxFit + .cover, + height: 60, + ) + : Image.asset( + "assets/images/no_image.png", + fit: BoxFit + .cover, + height: 60, + ), + ), + Container( + width: e.rxMessage != + null + ? MediaQuery.of( + context) + .size + .width / + 5 + : 0, + padding: + EdgeInsets.all(4), + decoration: + BoxDecoration( + color: Color( + 0xffb23838), + borderRadius: + BorderRadius.only( + topLeft: Radius + .circular( + 6)), + ), + child: Texts( + e.rxMessage != null + ? e.rxMessage + : "", + color: Colors.white, + regular: true, + fontSize: 10, + fontWeight: + FontWeight.w400, + ), + ), + ]), + Container( + margin: EdgeInsets + .symmetric( + horizontal: 6, + vertical: 0, + ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + Text( + e.name, + style: TextStyle( + color: Colors + .black, + fontSize: 13.0, +// fontWeight: FontWeight.bold, + ), + ), + Padding( +// padding: const EdgeInsets.only(top: 15, bottom: 10), + padding: + const EdgeInsets + .only( + top: 10, + bottom: + 5), + child: Texts( + "SAR ${e.price}", + bold: true, + fontSize: 14, + ), + ), + ], + ), + ), + Row( + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + Container( + padding: EdgeInsets + .only( + right: + 10), +// margin: EdgeInsets.only(left: 5), + child: Align( + alignment: + Alignment + .topLeft, + child: RatingBar + .readOnly( + initialRating: e + .approvedRatingSum + .toDouble(), +// initialRating: productRate, + size: 13.0, + filledColor: + Colors.yellow[ + 700], + emptyColor: + Colors.grey[ + 500], + isHalfAllowed: + true, + halfFilledIcon: + Icons + .star_half, + filledIcon: + Icons + .star, + emptyIcon: + Icons + .star, + ), + ), + ), + Texts( + "(${e.approvedTotalReviews.toString()})", +// bold: true, + fontSize: 12, + ), + ]), + ], + ), + ), + ) +// Column( +// crossAxisAlignment: +// CrossAxisAlignment.start, +// children: [ +// Container( +// child: Align( +// alignment: Alignment.topRight, +// child: !isInWishlist +// ? IconButton( +// icon: Icon(Icons.favorite_border), +// color: Colors.grey, +// iconSize: 30, +// onPressed: () { +// setState(() { +// addToWishlistFunction(itemID); +// }); +// }, +// ) +// : IconButton( +// icon: Icon(Icons.favorite), +// color: Colors.red, +// iconSize: 30, +// onPressed: () { +// setState(() { +// deleteFromWishlistFunction(itemID); +// }); +// }, +// ) +//// +// ),), +// Container( +// padding: EdgeInsets.only( +// left: 25, bottom: 20), +//// margin: EdgeInsets.fromLTRB(0, 16, 0, 0), +//// alignment: Alignment.centerLeft, +// child: (e.images != null && +// e.images.length > 0) +// ? Image.network( +// e.images[0].src +// .toString(), +//// item.images[0].src, +// fit: BoxFit.cover, +// height: 80, +// ) +// : Image.asset( +// "assets/images/no_image.png", +// fit: BoxFit.cover, +// height: 80, +// ), +// ), +// Text( +// e.name, +//// model.recommendedProduct[0].products[index].shortDescription +//// .toString(), +// style: TextStyle( +// color: Colors.black, +// fontSize: 15.0, +//// fontWeight: FontWeight.bold, +// ), +// ), +// Padding( +// padding: const EdgeInsets.only( +// top: 15, bottom: 10), +// child: Texts( +// "SAR ${e.price}", +// bold: true, +// fontSize: 14, +// ), +// ), +// Row( +// crossAxisAlignment: +// CrossAxisAlignment.start, +// children: [ +// Container( +// padding: EdgeInsets.only( +// right: 10), +//// margin: EdgeInsets.only(left: 5), +// child: Align( +// alignment: +// Alignment.topLeft, +// child: RatingBar.readOnly( +// initialRating: e +// .approvedRatingSum +// .toDouble(), +//// initialRating: productRate, +// size: 15.0, +// filledColor: +// Colors.yellow[700], +// emptyColor: +// Colors.grey[500], +// isHalfAllowed: true, +// halfFilledIcon: +// Icons.star_half, +// filledIcon: Icons.star, +// emptyIcon: Icons.star, +// ), +// ), +// ), +// Texts( +// "(${e.approvedTotalReviews.toString()})", +//// bold: true, +// fontSize: 12, +// ), +// ]), +// ], +// ), + ) + .toList(), +// children:[ +// ListView.builder( +// scrollDirection: Axis.vertical, +// shrinkWrap: true, +// physics: ScrollPhysics(), +// itemCount: model.recommendedProductList.length, +// itemBuilder: (context, index) { +// return Container( +// height: 30, +// padding: EdgeInsets.only( left: 15.0, top: 10, right: 10), +// margin: EdgeInsets.only(right: 10.0), +// decoration: BoxDecoration( +// border: Border.all( +// color: Colors.grey, +// style: BorderStyle.solid, +// width: 1.0, +// ), +// color: Colors.white, +// borderRadius: BorderRadius.circular(10.0)), +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Container( +// child: Align( +// alignment: Alignment.topRight, +// child:!isInWishlist +// ? InkWell( +// onTap: () { +// }, +// child: SvgPicture.asset( +// 'assets/images/pharmacy/heart-empty.svg', +// width: 20, +// height: 20, +// color: Colors.grey, +// ), +// ) +// : InkWell( +// onTap: () { +// }, +// child: SvgPicture.asset( +// 'assets/images/pharmacy/Redheart.svg', +// width: 20, +// height: 20, +//// color: Colors.red, +// ), +// ) +// ), +// ), +// Container( +// padding: EdgeInsets.only(left: 25, bottom: 20), +//// margin: EdgeInsets.fromLTRB(0, 16, 0, 0), +//// alignment: Alignment.centerLeft, +// child: (model.recommendedProductList[index].images != null && +// model.recommendedProductList[index].images.length > 0) +// ? Image.network( +// model.recommendedProductList[index].images[0].src.toString(), +//// item.images[0].src, +// fit: BoxFit.cover, +// height: 80, +// ) +// : Image.asset( +// "assets/images/no_image.png", +// fit: BoxFit.cover, +// height: 80, +// ), +// ), +// Text( +// model.recommendedProductList[index].name, +//// model.recommendedProduct[0].products[index].shortDescription +//// .toString(), +// style: TextStyle( +// color: Colors.black, +// fontSize: 15.0, +//// fontWeight: FontWeight.bold, +// ), +// ), +// Padding( +// padding: const EdgeInsets.only(top: 15, bottom: 10), +// child: Texts( +// "SAR ${model.recommendedProductList[index].price}", +// bold: true, +// fontSize: 14, +// ), +// ), +// Row( +// crossAxisAlignment: +// CrossAxisAlignment.start, +// children: [ +// Container( +// padding: EdgeInsets.only(right: 10), +//// margin: EdgeInsets.only(left: 5), +// child: Align( +// alignment: Alignment.topLeft, +// child: RatingBar.readOnly( +// initialRating: +// model.recommendedProductList[index].approvedRatingSum.toDouble(), +//// initialRating: productRate, +// size: 15.0, +// filledColor: Colors.yellow[700], +// emptyColor: Colors.grey[500], +// isHalfAllowed: true, +// halfFilledIcon: Icons.star_half, +// filledIcon: Icons.star, +// emptyIcon: Icons.star, +// ), +// ), +// ), +// Texts( +// "(${model.recommendedProductList[index].approvedTotalReviews.toString()})", +//// bold: true, +// fontSize: 12, +// ), +// ]), +// ], +// ), +// ); +// } +// ), +// ] + ), + ), + ]) + : Container(), + ) + : Container( + height: model.recommendedProductList.length > 0 + ? MediaQuery.of(context).size.height * 0.60 + : 0, + child: ListView.builder( + physics: ScrollPhysics(), +// physics: NeverScrollableScrollPhysics(), + itemCount: model.recommendedProductList.length, + itemBuilder: (context, index) { + return Card( + elevation: 2, + shape: RoundedRectangleBorder( + side: + BorderSide(color: Colors.grey[300], width: 2), + borderRadius: BorderRadius.circular(10)), +// + margin: EdgeInsets.symmetric( + horizontal: 8, + vertical: 4, + ), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(15), + ), + ), + padding: EdgeInsets.symmetric(horizontal: 5), + width: MediaQuery.of(context).size.width / 3, +// + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack(children: [ + Container( + child: Align( + alignment: Alignment.topRight, + child: //true + //wishlistVar[index].id.contains(model.recommendedProductList[index].id) + !isInWishlist + ? IconButton( + icon: Icon( + Icons.favorite_border), + color: Colors.grey, + iconSize: 30, + onPressed: () { + setState(() { + addToWishlistFunction( + itemID); + }); + }, + ) + : IconButton( + icon: Icon(Icons.favorite), + color: Colors.red, + iconSize: 30, + onPressed: () { + setState(() { + deleteFromWishlistFunction( + itemID); + }); + }, + ) +// ), - ), + ), + Container( + margin: EdgeInsets.fromLTRB(0, 16, 10, 16), + alignment: Alignment.center, +// padding: EdgeInsets.only(left: 25, bottom: 20), + child: (model.recommendedProductList[index] + .images != + null && + model.recommendedProductList[index] + .images.length > + 0) + ? Image.network( + model.recommendedProductList[index] + .images[0].src + .toString(), +// item.images[0].src, + fit: BoxFit.cover, + height: 60, + ) + : Image.asset( + "assets/images/no_image.png", + fit: BoxFit.cover, + height: 60, + ), + ), + Container( + width: model.recommendedProductList[index] + .rxMessage != + null + ? MediaQuery.of(context).size.width / 5 + : 0, + padding: EdgeInsets.all(4), + decoration: BoxDecoration( + color: Color(0xffb23838), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(6)), + ), + child: Texts( + model.recommendedProductList[index] + .rxMessage != + null + ? model.recommendedProductList[index] + .rxMessage + : "", + color: Colors.white, + regular: true, + fontSize: 10, + fontWeight: FontWeight.w400, + ), + ), + ]), + Container( + margin: EdgeInsets.symmetric( + horizontal: 6, + vertical: 2, + ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ Text( - model.recommendedProduct[0].products[index].shortDescription - .toString(), + model + .recommendedProductList[index].name, style: TextStyle( - color: Colors.green, - fontSize: 15.0, + color: Colors.black, + fontSize: 13.0, // fontWeight: FontWeight.bold, ), ), Padding( - padding: const EdgeInsets.only(top: 4, bottom: 4), +// padding: const EdgeInsets.only(top: 15, bottom: 10), + padding: const EdgeInsets.only( + top: 10, bottom: 5), child: Texts( - "SAR ${model.recommendedProduct[0].products[index].price}", + "SAR ${model.recommendedProductList[index].price}", bold: true, fontSize: 14, ), ), - Row( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ -// Container( -// margin: EdgeInsets.only(left: 5), -// child: Align( -// alignment: Alignment.topLeft, -// child: RatingBar.readOnly( -// initialRating: -// model.recommendedProduct[0].products[index].reviews.toDouble(), -//// initialRating: productRate, -// size: 15.0, -// filledColor: Colors.yellow[700], -// emptyColor: Colors.grey[500], -// isHalfAllowed: true, -// halfFilledIcon: Icons.star_half, -// filledIcon: Icons.star, -// emptyIcon: Icons.star, -// ), -// ), -// ), - ]), ], ), - ); - } - ): Container( -// child: Text("NO DATA"), + ), + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.only( + right: 10, bottom: 10), +// margin: EdgeInsets.only(left: 5), + child: Align( + alignment: Alignment.topLeft, + child: RatingBar.readOnly( + initialRating: model + .recommendedProductList[index] + .approvedRatingSum + .toDouble(), +// initialRating: productRate, + size: 13.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, + ), + ), + ), + Texts( + "(${model.recommendedProductList[index].approvedTotalReviews.toString()})", +// bold: true, + fontSize: 12, + ), + ]), + ], + ), ), - ), - ), - ), - ); - }), - ), - ] ), - ), + ); +// Container( +// height: 30, +// padding: EdgeInsets.only( left: 10.0, top: 10, right: 10), +//// margin: EdgeInsets.only(right: 10.0), +// decoration: BoxDecoration( +// border: Border.all( +// color: Colors.grey, +// style: BorderStyle.solid, +// width: 1.0, +// ), +// color: Colors.white, +// borderRadius: BorderRadius.circular(10.0)), +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Container( +// child: Align( +// alignment: Alignment.topRight, +// child:!isInWishlist +// ? InkWell( +// onTap: () { +// }, +// child: SvgPicture.asset( +// 'assets/images/pharmacy/heart-empty.svg', +// width: 20, +// height: 20, +// color: Colors.grey, +// ), +// ) +// : InkWell( +// onTap: () { +// }, +// child: SvgPicture.asset( +// 'assets/images/pharmacy/Redheart.svg', +// width: 20, +// height: 20, +//// color: Colors.red, +// ), +// ) +// ), +// ), +// Container( +// padding: EdgeInsets.only(left: 25, bottom: 20), +//// margin: EdgeInsets.fromLTRB(0, 16, 0, 0), +//// alignment: Alignment.centerLeft, +// child: (model.recommendedProductList[index].images != null && +// model.recommendedProductList[index].images.length > 0) +// ? Image.network( +// model.recommendedProductList[index].images[0].src.toString(), +//// item.images[0].src, +// fit: BoxFit.cover, +// height: 80, +// ) +// : Image.asset( +// "assets/images/no_image.png", +// fit: BoxFit.cover, +// height: 80, +// ), +// ), +// Text( +// model.recommendedProductList[index].name, +//// model.recommendedProduct[0].products[index].shortDescription +//// .toString(), +// style: TextStyle( +// color: Colors.black, +// fontSize: 15.0, +//// fontWeight: FontWeight.bold, +// ), +// ), +// Padding( +// padding: const EdgeInsets.only(top: 15, bottom: 10), +// child: Texts( +// "SAR ${model.recommendedProductList[index].price}", +// bold: true, +// fontSize: 14, +// ), +// ), +// Row( +// crossAxisAlignment: +// CrossAxisAlignment.start, +// children: [ +// Container( +// padding: EdgeInsets.only(right: 10), +//// margin: EdgeInsets.only(left: 5), +// child: Align( +// alignment: Alignment.topLeft, +// child: RatingBar.readOnly( +// initialRating: +// model.recommendedProductList[index].approvedRatingSum.toDouble(), +//// initialRating: productRate, +// size: 15.0, +// filledColor: Colors.yellow[700], +// emptyColor: Colors.grey[500], +// isHalfAllowed: true, +// halfFilledIcon: Icons.star_half, +// filledIcon: Icons.star, +// emptyIcon: Icons.star, +// ), +// ), +// ), +// Texts( +// "(${model.recommendedProductList[index].approvedTotalReviews.toString()})", +//// bold: true, +// fontSize: 12, +// ), +// ]), +// ], +// ), +// ); + }), + ), + ]), + ), ); - }} \ No newline at end of file + } +} + +addToWishlistFunction(itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + isInWishlist = true; + await x.addToWishlistData(itemID); +} + +deleteFromWishlistFunction(itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + isInWishlist = false; + await x.addToWishlistData(itemID); +} diff --git a/lib/pages/pharmacy/order/Order.dart b/lib/pages/pharmacy/order/Order.dart index 4ef14389..02f64b83 100644 --- a/lib/pages/pharmacy/order/Order.dart +++ b/lib/pages/pharmacy/order/Order.dart @@ -69,6 +69,7 @@ class _OrderPageState extends State with SingleTickerProviderStateMix TabBar( labelPadding: EdgeInsets.only(left: 3.0, right: 3.0), + labelColor: Colors.black, tabs: [ Tab(text: TranslationBase.of(context).delivered), Tab(text: TranslationBase.of(context).processing), diff --git a/lib/pages/pharmacy/order/OrderDetails.dart b/lib/pages/pharmacy/order/OrderDetails.dart index 670cb951..5e9b26ea 100644 --- a/lib/pages/pharmacy/order/OrderDetails.dart +++ b/lib/pages/pharmacy/order/OrderDetails.dart @@ -48,7 +48,7 @@ class _OrderDetailsPageState extends State { var model; var isCancel = false; var isRefund = false; - var isActiveDelivery = true; + var isActiveDelivery = false; var dataIsCancel; var dataIsRefund; @@ -66,7 +66,13 @@ class _OrderDetailsPageState extends State { @override Widget build(BuildContext context) { return BaseView( - onModelReady: (model) => model.getOrderDetails(widget.orderModel.id), + onModelReady: (model){ + model.getOrderDetails(widget.orderModel.id).then((value){ + setState(() { + isActiveDelivery = (value.orderStatusId == 995 && (value.driverID != null && value.driverID.isNotEmpty)); + }); + }); + }, builder: (_, model, wi) => AppScaffold( appBarTitle: TranslationBase.of(context).orderDetail, isShowAppBar: true, @@ -111,11 +117,9 @@ class _OrderDetailsPageState extends State { borderRadius: BorderRadius.circular(30.0)), child: Text( languageID == "ar" - ? model.orderListModel[0].orderStatusn.toString() - : model.orderListModel[0].orderStatus - .toString() - .substring(12), -// TranslationBase.of(context).delivered, + ? widget.orderModel.orderStatusn.toString() + : widget.orderModel.orderStatus + .toString(), style: TextStyle( color: Colors.white, fontSize: 13.0, @@ -132,12 +136,7 @@ class _OrderDetailsPageState extends State { children: [ Text( model.orderListModel[0].shippingAddress.firstName - .toString() - .substring(10) + - ' ' + - model.orderListModel[0].shippingAddress.lastName - .toString() - .substring(9), + .toString().substring(10) , style: TextStyle( fontSize: 15.0, fontWeight: FontWeight.bold, @@ -152,8 +151,8 @@ class _OrderDetailsPageState extends State { children: [ Text( model.orderListModel[0].shippingAddress.address1 - .toString() - .substring(9), + .toString().substring(9), + // .substring(9), style: TextStyle( fontSize: 10.0, fontWeight: FontWeight.bold, @@ -169,9 +168,9 @@ class _OrderDetailsPageState extends State { children: [ Text( model.orderListModel[0].shippingAddress.address2 - .toString() - .substring(9) + - ' ' + + .toString().substring(9) + // .substring(9) + + + ' ' + model.orderListModel[0].shippingAddress.country .toString() + ' ' + @@ -239,8 +238,8 @@ class _OrderDetailsPageState extends State { Container( child: flutterImage.Image.asset( model.orderListModel[0] - .shippingRateComputationMethodSystemName != - "Shipping.Aramex" + .shippingRateComputationMethodSystemName != + "Shipping.Aramex" ? "assets/images/pharmacy_module/payment/LogoParmacyGreen.png" : "assets/images/pharmacy_module/payment/aramex_shipping_logo.png", fit: BoxFit.contain, @@ -292,8 +291,8 @@ class _OrderDetailsPageState extends State { margin: EdgeInsets.only(bottom: 10.0, top: 10.0), child: Text( model.orderListModel[0].paymentName - .toString() - .substring(12), + .toString().substring(12), + style: TextStyle( fontSize: 13.0, fontWeight: FontWeight.bold, @@ -345,24 +344,24 @@ class _OrderDetailsPageState extends State { productReviews: model.orderListModel[0] .orderItems[index].product.approvedTotalReviews, totalPrice: - "${(model.orderListModel[0].orderItems[index].product.price * model.orderListModel[0].orderItems[index].quantity).toStringAsFixed(2)}", + "${(model.orderListModel[0].orderItems[index].product.price * model.orderListModel[0].orderItems[index].quantity).toStringAsFixed(2)}", qyt: model .orderListModel[0].orderItems[index].quantity .toString(), isOrderDetails: true, imgs: model.orderListModel[0].orderItems[index] - .product.images != - null && - model.orderListModel[0].orderItems[index] - .product.images.length != - 0 + .product.images != + null && + model.orderListModel[0].orderItems[index] + .product.images.length != + 0 ? model.orderListModel[0].orderItems[index] - .product.images[0].src - .toString() + .product.images[0].src + .toString() : null, status: model.orderListModel[0].orderStatusId, product: - model.orderListModel[0].orderItems[index].product, + model.orderListModel[0].orderItems[index].product, ), ); }), @@ -540,81 +539,81 @@ class _OrderDetailsPageState extends State { ), model.orderListModel[0].orderStatusId == 10 ? InkWell( - onTap: () { - model.makeOrder(); - }, - child: Container( + onTap: () { + model.makeOrder(); + }, + child: Container( // margin: EdgeInsets.only(top: 20.0), - height: 50.0, - color: Colors.transparent, - child: Container( - padding: EdgeInsets.only(left: 130.0, right: 130.0), - decoration: BoxDecoration( - border: Border.all( - color: Colors.green, - style: BorderStyle.solid, - width: 4.0), - color: Colors.green, - borderRadius: BorderRadius.circular(5.0)), - child: Center( - child: Text( - TranslationBase.of(context).payOnline, - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - ), - ), - ), + height: 50.0, + color: Colors.transparent, + child: Container( + padding: EdgeInsets.only(left: 130.0, right: 130.0), + decoration: BoxDecoration( + border: Border.all( + color: Colors.green, + style: BorderStyle.solid, + width: 4.0), + color: Colors.green, + borderRadius: BorderRadius.circular(5.0)), + child: Center( + child: Text( + TranslationBase.of(context).payOnline, + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, ), ), - ) + ), + ), + ), + ) : Container(), // getCancelOrder(canCancel, canRefund), isCancel ? InkWell( - onTap: () { - presentConfirmDialog(model, widget.orderModel.id); - // model.orderListModel[0].id//(widget.orderModel.id)); + onTap: () { + presentConfirmDialog(model, widget.orderModel.id); + // model.orderListModel[0].id//(widget.orderModel.id)); // - }, - child: Container( + }, + child: Container( // padding: EdgeInsets.only(left: 13.0, right: 13.0, top: 5.0), - height: 50.0, - color: Colors.transparent, - child: Center( - child: Text( - TranslationBase.of(context).cancelOrder, - style: TextStyle( - color: Colors.red[900], - fontWeight: FontWeight.bold, - decoration: TextDecoration.underline), - ), - ), - ), - ) + height: 50.0, + color: Colors.transparent, + child: Center( + child: Text( + TranslationBase.of(context).cancelOrder, + style: TextStyle( + color: Colors.red[900], + fontWeight: FontWeight.bold, + decoration: TextDecoration.underline), + ), + ), + ), + ) : Container(), isActiveDelivery ? InkWell( - onTap: () { - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) => TrackDriver(order: widget.orderModel), - // )); - }, - child: Container( - height: 50.0, - color: Colors.transparent, - child: Center( - child: Text( - TranslationBase.of(context).trackDeliveryDriver, - style: TextStyle( - color: Colors.green[900], - fontWeight: FontWeight.normal, - decoration: TextDecoration.none), - ), - ), - ), - ) + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => TrackDriver(order: model.orderListModel.first), + )); + }, + child: Container( + height: 50.0, + color: Colors.transparent, + child: Center( + child: Text( + TranslationBase.of(context).trackDeliveryDriver, + style: TextStyle( + color: Colors.green[900], + fontWeight: FontWeight.normal, + decoration: TextDecoration.none), + ), + ), + ), + ) : Container(), ], ), @@ -702,3 +701,4 @@ class _OrderDetailsPageState extends State { } } } + diff --git a/lib/services/pharmacy_services/recommendedProduct_service.dart b/lib/services/pharmacy_services/recommendedProduct_service.dart index 32fe0a67..ad7222f8 100644 --- a/lib/services/pharmacy_services/recommendedProduct_service.dart +++ b/lib/services/pharmacy_services/recommendedProduct_service.dart @@ -5,7 +5,7 @@ import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:flutter/material.dart'; + @@ -15,23 +15,24 @@ class RecommendedProductService extends BaseService{ AuthenticatedUser authUser = new AuthenticatedUser(); AuthProvider authProvider = new AuthProvider(); - List _recommendedProductList = List(); - List get recommendedProductList => _recommendedProductList; + List _recommendedProductList = List(); + List get recommendedList => _recommendedProductList; String url =""; - Future getRecommendedProducts(ProductId) async { + Future getRecommendedProducts(productId) async { hasError = false; - url =GET_RECOMMENDED_PRODUCT+ProductId; - print("Recommended Product is"+url); - + url =GET_RECOMMENDED_PRODUCT+productId; await baseAppClient.getPharmacy(url, onSuccess: (dynamic response, int statusCode) { _recommendedProductList.clear(); - response['products'].forEach((item) { + _recommendedProductList.add(Products.fromJson(item)); + print("----------------------------------"); + print("Test data"); + print(_recommendedProductList[0]); + print(item['name']); + print(response); }); - print("print recommended items" + _recommendedProductList.length.toString()); - print(response); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index c3acb5fd..3a993805 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -995,6 +995,7 @@ class TranslationBase { String get convertBloodSugarStatement => localizedValues["convertBloodSugarStatement"][locale.languageCode]; String get convertFrom => localizedValues["convertFrom"][locale.languageCode]; String get result => localizedValues["result"][locale.languageCode]; + String get sort => localizedValues["sort"][locale.languageCode]; String get bloodSugarConversion => localizedValues["bloodSugarConversion"][locale.languageCode]; String get convertCholesterolStatement => localizedValues["convertCholesterolStatement"][locale.languageCode]; String get triglyceridesConvertStatement => localizedValues["triglyceridesConvertStatement"][locale.languageCode];