Browse Source

add fetch branch request into GMEContact module

pull/1/head
james 5 years ago
parent
commit
6fe7fc4270
  1. 14
      GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractor.swift
  2. 5
      GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractorIO.swift
  3. 28
      GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsService.swift
  4. 7
      GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsServiceType.swift
  5. 2
      GMERemittance/Module/GmeContacts/Module Interface/GmeContactsModuleInterface.swift
  6. 17
      GMERemittance/Module/GmeContacts/User Interface/Presenter/GmeContactsPresenter.swift
  7. 45
      GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewController.swift
  8. 4
      GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewInterface.swift
  9. 13
      GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframe.swift
  10. 2
      GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframeInput.swift
  11. 6
      GMERemittance/Module/RewardModules/DetailOrder/User Interface/View/DetailOrderViewController.swift
  12. 24
      GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Interactor/OrderHistoryInteractor.swift
  13. 5
      GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Model/Order.swift
  14. 41
      GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistory.storyboard
  15. 15
      GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistoryViewController.swift
  16. 2
      GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractor.swift
  17. 15
      GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Branch.swift
  18. 12
      GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/BranchContainer.swift
  19. 6
      GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemService.swift
  20. 52
      GMERemittance/Module/RewardModules/Redeem/User Interface/Presenter/RedeemPresenter.swift
  21. 2
      GMERemittance/Module/RewardModules/Redeem/User Interface/View/Redeem.storyboard
  22. 26
      GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewController.swift
  23. 14
      GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframe.swift
  24. 16
      GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProduct.swift
  25. 4
      GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardService.swift
  26. 14
      GMERemittance/Module/RewardModules/Reward/User Interface/Presenter/RewardPresenter.swift
  27. 25
      GMERemittance/Module/RewardModules/Reward/User Interface/View/Cell/RewardItemCollectionViewCell.swift
  28. 11
      GMERemittance/Module/RewardModules/Reward/User Interface/View/Reward.storyboard
  29. 68
      GMERemittance/Module/RewardModules/Reward/User Interface/View/RewardViewController.swift
  30. 4
      GMERemittance/Module/RewardModules/Reward/User Interface/Wireframe/RewardWireframe.swift
  31. 4
      en.lproj/Localizable.strings

14
GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractor.swift

@ -14,11 +14,12 @@ class GmeContactsInteractor {
weak var output: GmeContactsInteractorOutput?
private let service: GmeContactsServiceType
private let model: [Branch]?
// MARK: Initialization
init(service: GmeContactsServiceType) {
init(service: GmeContactsServiceType, model: [Branch]?) {
self.service = service
self.model = model
}
// MARK: Converting entities
@ -27,5 +28,12 @@ class GmeContactsInteractor {
// MARK: GmeContacts interactor input interface
extension GmeContactsInteractor: GmeContactsInteractorInput {
func fetchBranches() {
service.fetchBranches(
success: {
self.output?.setBranchModel(with: $0)
}){
self.output?.setBranchesError(with: $0)
}
}
}

5
GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractorIO.swift

@ -7,9 +7,10 @@
//
protocol GmeContactsInteractorInput: class {
func fetchBranches()
}
protocol GmeContactsInteractorOutput: class {
func setBranchModel(with model: [Branch]?)
func setBranchesError(with error: Error)
}

28
GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsService.swift

@ -9,10 +9,32 @@
import Foundation
class GmeContactsService: GmeContactsServiceType {
func fetchBranches(
success: @escaping ([Branch]?) -> Void,
failure: @escaping (Error) -> Void
) {
// MARK: Properties
let url = baseUrlWithoutVersion + "/v2/reward/branchInfo"
// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/branchInfo"
// MARK: Initialization
auth.request(
method: .post,
url: url,
params: nil,
success: { (response: BranchContainer) in
if (response.errorCode ?? "") == "1" {
let error = NSError.init(
domain: "Network",
code: 0,
userInfo: [NSLocalizedDescriptionKey : response.message ?? ""]
)
// MARK: Data management
failure(error)
}else {
success(response.data)
}
}) { (error) in
failure(error)
}
}
}

7
GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsServiceType.swift

@ -8,6 +8,9 @@
import Foundation
protocol GmeContactsServiceType: class {
protocol GmeContactsServiceType: class, ApiServiceType {
func fetchBranches(
success: @escaping ([Branch]?) -> Void,
failure: @escaping (Error) -> Void
)
}

2
GMERemittance/Module/GmeContacts/Module Interface/GmeContactsModuleInterface.swift

@ -7,5 +7,5 @@
//
protocol GmeContactsModuleInterface: class {
func fetchBranch()
}

17
GMERemittance/Module/GmeContacts/User Interface/Presenter/GmeContactsPresenter.swift

@ -19,14 +19,25 @@ class GmeContactsPresenter {
// MARK: Converting entities
}
// MARK: GmeContacts module interface
// MARK: GmeContacts module interface
extension GmeContactsPresenter: GmeContactsModuleInterface {
func fetchBranch() {
view?.startLoading()
interactor?.fetchBranches()
}
}
// MARK: GmeContacts interactor output interface
extension GmeContactsPresenter: GmeContactsInteractorOutput {
func setBranchModel(with model: [Branch]?) {
view?.endLoading()
view?.setBranchModel(with: model)
}
func setBranchesError(with error: Error) {
view?.endLoading()
view?.setBranchesError(with: error)
}
}

45
GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewController.swift

@ -23,6 +23,22 @@ class GmeContactsViewController: UIViewController {
}
}
var model: [Branch]? {
didSet {
guard let model = model
else {
return
}
contacts = model.map{
let branch = GmeContacts()
branch.title = $0.agentName
branch.address = $0.agentAddress
branch.contactNumber = [$0.agentPhone1] as? [String]
return branch
}
}
}
// MARK: Properties
@ -30,8 +46,9 @@ class GmeContactsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.viperSetup() // since the viewcontroller in the tabbar is in strong bind with storyboard and segue
self.setup()
presenter?.fetchBranch()
}
override func viewWillAppear(_ animated: Bool) {
@ -65,11 +82,11 @@ class GmeContactsViewController: UIViewController {
private func createTestContacts() {
// let headOfficeContacts = GmeContacts()
// headOfficeContacts.title = "Head Office"
// headOfficeContacts.address = "325, Jong-ro, Jongno-gu, 03104 Seoul"
// headOfficeContacts.contactNumber = ["15886864"]
// headOfficeContacts.language = "Korean Language Support"
// let headOfficeContacts = GmeContacts()
// headOfficeContacts.title = "Head Office"
// headOfficeContacts.address = "325, Jong-ro, Jongno-gu, 03104 Seoul"
// headOfficeContacts.contactNumber = ["15886864"]
// headOfficeContacts.language = "Korean Language Support"
let dongdaemunBranchContacts = GmeContacts()
dongdaemunBranchContacts.title = "Dongdaemun Branch"
@ -137,13 +154,27 @@ class GmeContactsViewController: UIViewController {
// MARK: GmeContactsViewInterface
extension GmeContactsViewController: GmeContactsViewInterface {
func setBranchModel(with model: [Branch]?) {
self.model = model
}
func setBranchesError(with error: Error){
alertWithOk(message: error.localizedDescription)
}
func startLoading(){
showProgressHud()
}
func endLoading(){
hideProgressHud()
}
}
extension GmeContactsViewController {
func viperSetup() {
let service = GmeContactsService()
let interactor = GmeContactsInteractor(service: service)
let interactor = GmeContactsInteractor(service: service, model: nil)
let presenter = GmeContactsPresenter()
let wireframe = GmeContactsWireframe()

4
GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewInterface.swift

@ -7,5 +7,9 @@
//
protocol GmeContactsViewInterface: class {
func setBranchModel(with model: [Branch]?)
func setBranchesError(with error: Error)
func startLoading()
func endLoading()
}

13
GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframe.swift

@ -10,6 +10,7 @@ import UIKit
class GmeContactsWireframe {
weak var view: UIViewController!
private var model: [Branch]?
}
extension GmeContactsWireframe: GmeContactsWireframeInput {
@ -18,9 +19,10 @@ extension GmeContactsWireframe: GmeContactsWireframeInput {
func getMainView() -> UIViewController {
let service = GmeContactsService()
let interactor = GmeContactsInteractor(service: service)
let presenter = GmeContactsPresenter()
let viewController = viewControllerFromStoryboard(of: GmeContactsViewController.self)
let interactor = GmeContactsInteractor(service: service, model: model)
viewController.setupTabItem()
viewController.presenter = presenter
interactor.output = presenter
@ -28,7 +30,14 @@ extension GmeContactsWireframe: GmeContactsWireframeInput {
presenter.wireframe = self
presenter.view = viewController
let _ = viewController.view
self.view = viewController
view = viewController
return viewController
}
func presentWithBranchModel(_ model: [Branch]?, on source: UIViewController){
self.model = model
let mainViewController = getMainView()
openViewControllerWithNavigation(viewController: mainViewController, source: source)
}
}

2
GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframeInput.swift

@ -9,5 +9,5 @@
import Foundation
protocol GmeContactsWireframeInput: WireframeInput {
func presentWithBranchModel(_ model: [Branch]?, on source: UIViewController)
}

6
GMERemittance/Module/RewardModules/DetailOrder/User Interface/View/DetailOrderViewController.swift

@ -26,15 +26,15 @@ class DetailOrderViewController: UIViewController {
receiverNameLabel.text = order.recvName
mobileNumberLabel.text = order.recvPhoneNumber
// pickupBranchLabel.text = order.recvType == "1" ? order.recvAddress : order.branchCode
pickupBranchLabel.text = order.branchName
productNameLabel.text = order.productName
productPointLabel.text = order.usePoint
orderStatusLabel.text = status.message
orderDateLabel.text = order.createdDate
//TODO:
// orderReceiveDateLabel.text = order.recvDate
orderReceiveDateLabel.text = order.recvDate
orderIDNumberLabel.text = order.orderID
orderTypeLabel.text = order.recvType == "1" ? "Deliver" : "pickup_from_branch".localized()
}

24
GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Interactor/OrderHistoryInteractor.swift

@ -29,31 +29,11 @@ class OrderHistoryInteractor {
extension OrderHistoryInteractor: OrderHistoryInteractorInput {
func fetchOrderHistory(from startDate: String, to endDate: String) {
let from: String
let to: String
if startDate == "" && endDate == "" {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let monthsToAdd = -3
let currentDate = Date()
var dateComponent = DateComponents()
dateComponent.month = monthsToAdd
let futureDate = Calendar.current.date(byAdding: dateComponent, to: currentDate)
to = formatter.string(from: currentDate)
from = formatter.string(from: futureDate!)
} else {
from = startDate
to = endDate
}
service.fetchOrderHistory(
from: from,
to: to,
from: startDate,
to: endDate,
success: {[weak self] in
guard let `self` = self else {
return

5
GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Model/Order.swift

@ -24,6 +24,8 @@ struct Order: Mappable {
var orderStatus: String?
var createdDate: String?
var modifiedDate: String?
var branchName: String?
var recvDate: String?
init?(map: Map) { }
@ -42,6 +44,9 @@ struct Order: Mappable {
orderStatus <- map["orderStatus"]
createdDate <- map["createdDate"]
modifiedDate <- map["modifiedDate"]
recvDate <- map["recvDate"]
branchName <- map["branchName"]
}
}

41
GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistory.storyboard

@ -58,10 +58,13 @@
</constraints>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="97g-ut-B3f">
<rect key="frame" x="0.0" y="76" width="375" height="35"/>
<rect key="frame" x="0.0" y="81" width="375" height="35"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jT4-tF-K3X">
<rect key="frame" x="10" y="1" width="355" height="33"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="PGn-S6-cUw">
<rect key="frame" x="125" y="-7.5" width="125" height="50"/>
<rect key="frame" x="115" y="-8.5" width="125" height="50"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JNb-rQ-S60">
<rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
@ -83,16 +86,38 @@
</label>
</subviews>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MsW-Cu-WAq">
<rect key="frame" x="330" y="9" width="15" height="15"/>
<constraints>
<constraint firstAttribute="height" constant="15" id="QEH-pM-M9B"/>
<constraint firstAttribute="width" constant="15" id="VaT-i2-nM8"/>
</constraints>
<state key="normal" title="Button" image="ic_error"/>
<connections>
<action selector="touchHidePerioidContentView:" destination="HSb-ou-7T5" eventType="touchUpInside" id="T9w-yA-L2x"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="PGn-S6-cUw" firstAttribute="centerX" secondItem="jT4-tF-K3X" secondAttribute="centerX" id="2tu-H9-Ogk"/>
<constraint firstItem="MsW-Cu-WAq" firstAttribute="centerY" secondItem="jT4-tF-K3X" secondAttribute="centerY" id="MoP-cW-gz4"/>
<constraint firstItem="PGn-S6-cUw" firstAttribute="centerY" secondItem="jT4-tF-K3X" secondAttribute="centerY" id="Sm7-eC-hTb"/>
<constraint firstAttribute="trailing" secondItem="MsW-Cu-WAq" secondAttribute="trailing" constant="10" id="mfx-lA-gcl"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="PGn-S6-cUw" firstAttribute="centerY" secondItem="97g-ut-B3f" secondAttribute="centerY" id="Pgj-sa-DAu"/>
<constraint firstItem="jT4-tF-K3X" firstAttribute="top" secondItem="97g-ut-B3f" secondAttribute="top" constant="1" id="1Td-qn-jSx"/>
<constraint firstItem="jT4-tF-K3X" firstAttribute="leading" secondItem="97g-ut-B3f" secondAttribute="leading" constant="10" id="5kQ-G9-uX0"/>
<constraint firstAttribute="bottom" secondItem="jT4-tF-K3X" secondAttribute="bottom" constant="1" id="P1B-IH-n80"/>
<constraint firstAttribute="height" constant="35" id="WwQ-Eb-nRV"/>
<constraint firstItem="PGn-S6-cUw" firstAttribute="centerX" secondItem="97g-ut-B3f" secondAttribute="centerX" id="nsh-Ev-EJA"/>
<constraint firstAttribute="trailing" secondItem="jT4-tF-K3X" secondAttribute="trailing" constant="10" id="fIr-Rj-2P8"/>
</constraints>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="IWs-Lw-Lzy">
<rect key="frame" x="0.0" y="111" width="375" height="511"/>
<rect key="frame" x="0.0" y="121" width="375" height="501"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<view key="tableFooterView" contentMode="scaleToFill" id="2ni-7Z-yrb">
<rect key="frame" x="0.0" y="130" width="375" height="44"/>
@ -284,11 +309,11 @@
<constraint firstItem="qT6-24-ye4" firstAttribute="top" secondItem="IWs-Lw-Lzy" secondAttribute="bottom" constant="5" id="6Gr-8g-ThY"/>
<constraint firstItem="qT6-24-ye4" firstAttribute="trailing" secondItem="Zt6-f6-JOC" secondAttribute="trailing" id="6SQ-d1-pNh"/>
<constraint firstItem="SpX-eE-pj8" firstAttribute="top" secondItem="Zt6-f6-JOC" secondAttribute="top" id="AfL-1V-hq8"/>
<constraint firstItem="IWs-Lw-Lzy" firstAttribute="top" secondItem="97g-ut-B3f" secondAttribute="bottom" id="I5M-n1-3wt"/>
<constraint firstItem="IWs-Lw-Lzy" firstAttribute="top" secondItem="97g-ut-B3f" secondAttribute="bottom" constant="5" id="I5M-n1-3wt"/>
<constraint firstItem="97g-ut-B3f" firstAttribute="trailing" secondItem="Zt6-f6-JOC" secondAttribute="trailing" id="Szl-XX-RkQ"/>
<constraint firstItem="qT6-24-ye4" firstAttribute="leading" secondItem="Zt6-f6-JOC" secondAttribute="leading" id="U3v-v0-7CD"/>
<constraint firstItem="SpX-eE-pj8" firstAttribute="trailing" secondItem="Zt6-f6-JOC" secondAttribute="trailing" id="Wr3-hw-cgh"/>
<constraint firstItem="97g-ut-B3f" firstAttribute="top" secondItem="SpX-eE-pj8" secondAttribute="bottom" id="XtF-Gk-Jmv"/>
<constraint firstItem="97g-ut-B3f" firstAttribute="top" secondItem="SpX-eE-pj8" secondAttribute="bottom" constant="5" id="XtF-Gk-Jmv"/>
<constraint firstItem="Zt6-f6-JOC" firstAttribute="bottom" secondItem="qT6-24-ye4" secondAttribute="bottom" constant="5" id="ZGQ-mm-ztl"/>
<constraint firstItem="IWs-Lw-Lzy" firstAttribute="leading" secondItem="Zt6-f6-JOC" secondAttribute="leading" id="aZ7-QV-J08"/>
<constraint firstItem="SpX-eE-pj8" firstAttribute="leading" secondItem="Zt6-f6-JOC" secondAttribute="leading" id="icE-df-7bq"/>
@ -304,6 +329,7 @@
<outlet property="orderedColorLabel" destination="3zV-Rv-aOE" id="lpI-j3-fW1"/>
<outlet property="periodView" destination="97g-ut-B3f" id="bD9-AR-f95"/>
<outlet property="periodViewHeightConstraint" destination="WwQ-Eb-nRV" id="2cf-jr-nPf"/>
<outlet property="perioidContentView" destination="jT4-tF-K3X" id="yJd-xC-pNR"/>
<outlet property="receivedColorLabel" destination="JUV-Fq-hn5" id="g5q-ih-wi4"/>
<outlet property="searchBar" destination="iE7-rt-xwe" id="wIp-jg-NAz"/>
<outlet property="startDateLabel" destination="JNb-rQ-S60" id="AHq-zu-xBo"/>
@ -317,6 +343,7 @@
</scenes>
<resources>
<image name="ic_calender" width="25" height="25"/>
<image name="ic_error" width="55" height="55"/>
</resources>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</document>

15
GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistoryViewController.swift

@ -17,6 +17,8 @@ class OrderHistoryViewController: UIViewController {
private lazy var refreshControl = UIRefreshControl()
private lazy var isSearch = false
// MARK: Computed Properties
private var orders: [Order]? {
@ -26,6 +28,7 @@ class OrderHistoryViewController: UIViewController {
orders.count != 0
else {
noOrderHistoryLabel.isHidden = false
noOrderHistoryLabel.text = isSearch ? "no_search_orders_message".localized() : "no_orders_message".localized()
tableView.reloadData()
return
}
@ -40,6 +43,7 @@ class OrderHistoryViewController: UIViewController {
@IBOutlet private weak var tableView: UITableView!
@IBOutlet private weak var searchBar: UISearchBar!
@IBOutlet private weak var periodView: UIView!
@IBOutlet private weak var perioidContentView: UIView!
@IBOutlet private weak var noOrderHistoryLabel: UILabel!
@IBOutlet private weak var startDateLabel: UILabel!
@ -63,6 +67,7 @@ class OrderHistoryViewController: UIViewController {
super.viewWillAppear(animated)
if searchBar.text == "" && startDateLabel.text == ""{
isSearch = false
presenter?.fetchOrders(from: "", to: "")
}
}
@ -89,10 +94,15 @@ class OrderHistoryViewController: UIViewController {
self.setPeriodViewStatus(isHidden: false)
self.searchBar.text?.removeAll()
self.isSearch = true
self.presenter?.fetchOrders(from: startDate, to: endDate)
}
}
@IBAction func touchHidePerioidContentView(_ sender: Any) {
refresh()
}
}
// MARK: OrderHistoryViewInterface
@ -135,6 +145,8 @@ extension OrderHistoryViewController {
orderedColorLabel.layer.cornerRadius = 5
receivedColorLabel.layer.cornerRadius = 5
canceledColorLabel.layer.cornerRadius = 5
perioidContentView.layer.cornerRadius = 10
}
private func setMultiLanguage(){
@ -184,7 +196,7 @@ extension OrderHistoryViewController {
private func refresh() {
setPeriodViewStatus(isHidden: true)
searchBar.text?.removeAll()
isSearch = false
presenter?.fetchOrders(from: "", to: "")
}
@ -232,6 +244,7 @@ extension OrderHistoryViewController: UITableViewDelegate {
// MARK: - UISearchBarDelegate
extension OrderHistoryViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
isSearch = true
presenter?.fetchFilteredOrders(by: searchText)
}

2
GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractor.swift

@ -28,7 +28,7 @@ class RedeemInteractor {
extension RedeemInteractor: RedeemInteractorInput {
func fetchBranches() {
self.service.fetchBranches(
service.fetchBranches(
success: {
self.output?.setBranches(with: $0)
}){

15
GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Branch.swift

@ -12,14 +12,23 @@ import ObjectMapper
struct Branch: Mappable {
var agentID: String?
var agentName: String?
var agentPhone1: String?
var agentAddress: String?
var agentZip: String?
var agentState: String?
var agentCity: String?
init?(map: Map) {
}
mutating func mapping(map: Map) {
self.agentID <- map["agentId"]
self.agentName <- map["agentName"]
agentID <- map["agentId"]
agentName <- map["agentName"]
agentPhone1 <- map["agentPhone1"]
agentAddress <- map["agentAddress"]
agentZip <- map["agentZip"]
agentState <- map["agentState"]
agentCity <- map["agentCity"]
}

12
GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/BranchContainer.swift

@ -22,11 +22,11 @@ struct BranchContainer: Mappable {
}
mutating func mapping(map: Map) {
self.errorCode <- map["ErrorCode"]
self.message <- map["Msg"]
self.id <- map["Id"]
self.extra <- map["Extra"]
self.extra2 <- map["Extra2"]
self.data <- map["Data"]
errorCode <- map["ErrorCode"]
message <- map["Msg"]
id <- map["Id"]
extra <- map["Extra"]
extra2 <- map["Extra2"]
data <- map["Data"]
}
}

6
GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemService.swift

@ -23,7 +23,7 @@ class RedeemService: RedeemServiceType {
) {
let url = baseUrlWithoutVersion + "/v2/reward/branchInfo"
// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/branchInfo"
// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/branchInfo"
auth.request(
method: .post,
@ -51,9 +51,9 @@ class RedeemService: RedeemServiceType {
success: @escaping () -> Void,
failure: @escaping (Error) -> Void
) {
// let url = baseUrl + "/reward/productBuy"
// let url = baseUrl + "/reward/productBuy"
let url = baseUrlWithoutVersion + "/v2/reward/productBuy"
// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productBuy"
// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productBuy"
let params: [String: String] = [
"userId": model?.userID ?? "",

52
GMERemittance/Module/RewardModules/Redeem/User Interface/Presenter/RedeemPresenter.swift

@ -30,35 +30,35 @@ class RedeemPresenter {
extension RedeemPresenter: RedeemModuleInterface {
func viewIsReady() {
self.view?.startLoading()
self.interactor?.viewIsReady(model: self.model)
view?.startLoading()
interactor?.viewIsReady(model: model)
}
func showSearchAddressVC() {
self.wireframe?.showSearchAddressVC()
wireframe?.showSearchAddressVC()
}
func fetchBranches() {
self.view?.startLoading()
self.interactor?.fetchBranches()
view?.startLoading()
interactor?.fetchBranches()
}
func showBranchesVC() {
self.wireframe?.showBranchesVC()
func showBranchesVC(){
wireframe?.showBranchesVC()
}
func submit(with model: Redeem?) {
self.view?.startLoading()
self.interactor?.submit(with: model)
view?.startLoading()
interactor?.submit(with: model)
}
func goRewardHome() {
self.wireframe?.goRewardVC()
wireframe?.goRewardVC()
}
func refreshRewardPoint() {
self.view?.startLoading()
self.interactor?.refreshRewardPoint()
view?.startLoading()
interactor?.refreshRewardPoint()
}
}
@ -66,37 +66,37 @@ extension RedeemPresenter: RedeemModuleInterface {
extension RedeemPresenter: RedeemInteractorOutput {
func successRefreshRewardPoint() {
self.view?.endLoading()
self.view?.successRefreshRewardPoint()
view?.endLoading()
view?.successRefreshRewardPoint()
}
func failureRefreshRewardPoint(with error: Error) {
self.view?.endLoading()
self.view?.failureRefreshRewardPoint(with: error)
view?.endLoading()
view?.failureRefreshRewardPoint(with: error)
}
func result(model: RewardProduct?) {
self.view?.endLoading()
self.view?.setModel(model: model)
view?.endLoading()
view?.setModel(model: model)
}
func setBranches(with model: [Branch]?) {
self.view?.endLoading()
self.view?.setBranches(with: model)
view?.endLoading()
view?.setBranches(with: model)
}
func setBranchesError(with error: Error) {
self.view?.endLoading()
self.view?.setBranchesError(with: error)
view?.endLoading()
view?.setBranchesError(with: error)
}
func submitSuccess() {
self.view?.endLoading()
self.view?.submitSuccess()
view?.endLoading()
view?.submitSuccess()
}
func submitFailure(with error: Error) {
self.view?.endLoading()
self.view?.submitFailure(with: error)
view?.endLoading()
view?.submitFailure(with: error)
}
}

2
GMERemittance/Module/RewardModules/Redeem/User Interface/View/Redeem.storyboard

@ -407,6 +407,7 @@
<outlet property="phoneNumberTitleLabel" destination="4eh-w1-tJj" id="NIt-wL-IVS"/>
<outlet property="pointsWillBeDeductedLabel" destination="R1n-RO-MXZ" id="fA9-sh-nSg"/>
<outlet property="receiverTitleLabel" destination="AlI-iJ-Bev" id="KVi-jO-AFA"/>
<outlet property="redeemTitleLabel" destination="9kj-0f-kjr" id="pEW-pa-cBa"/>
<outlet property="scrollView" destination="UhJ-s4-o3M" id="9LP-tA-gpW"/>
<outlet property="searchButton" destination="YWl-Z0-qfz" id="c9u-Tu-un1"/>
<outlet property="selectAddressInfoLabel" destination="djo-b7-Gp6" id="lHg-pi-ek3"/>
@ -414,7 +415,6 @@
<outlet property="selectedItemImageView" destination="mT2-re-Yo2" id="kht-Qe-kh3"/>
<outlet property="selectedItemNameLabel" destination="CQg-Ax-AVy" id="0GO-Fk-X5a"/>
<outlet property="selectedItemPriceLabel" destination="oPo-Sf-m2V" id="wHe-Zr-io7"/>
<outlet property="selectedProductTitleLabel" destination="9kj-0f-kjr" id="ffU-5v-88a"/>
<outlet property="submitButton" destination="Eqf-wL-rV9" id="8KL-gZ-lKH"/>
<outlet property="userInfoSegmentedControl" destination="O3s-cM-BFw" id="bYz-uy-lwU"/>
<outlet property="userInfoView" destination="Diw-ue-AMa" id="U0x-Wq-CeQ"/>

26
GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewController.swift

@ -17,18 +17,12 @@ class RedeemViewController: UIViewController {
private var model: RewardProduct? {
didSet {
//TODO:
// guard
// let newModel = model,
// let imageData = newModel.imageData,
// let data = Data(base64Encoded: imageData) else { return }
// selectedItemImageView.image = UIImage(data: data)
guard
let newModel = model
else { return }
selectedItemNameLabel.text = newModel.productName
selectedItemPriceLabel.text = newModel.pointPrice
if let imageData = model?.productImgPath,
let data = Data(base64Encoded: imageData) {
selectedItemImageView.image = UIImage(data: data)
}
selectedItemNameLabel.text = model?.productName
selectedItemPriceLabel.text = model?.pointPrice
}
}
@ -168,7 +162,7 @@ class RedeemViewController: UIViewController {
@IBOutlet private weak var scrollView: UIScrollView!
@IBOutlet weak var closeBarButton: UIBarButtonItem!
@IBOutlet weak var selectedProductTitleLabel: UILabel!
@IBOutlet weak var redeemTitleLabel: UILabel!
@IBOutlet weak var pointsWillBeDeductedLabel: UILabel!
@IBOutlet weak var fromTourRewardPointLabel: UILabel!
@IBOutlet weak var receiverTitleLabel: UILabel!
@ -246,7 +240,7 @@ class RedeemViewController: UIViewController {
setCoverView()
setButton()
setSegmentedControl()
// self.setDefaultState()
// self.setDefaultState()
setOnlyBranchMode()
setMultiLanguage()
@ -403,7 +397,7 @@ extension RedeemViewController {
}
private func setMultiLanguage(){
selectedProductTitleLabel.text = "selected_product".localized()
redeemTitleLabel.text = "redeem".localized()
pointsWillBeDeductedLabel.text = "points_deducted".localized()
fromTourRewardPointLabel.text = "from_your_reward_point".localized()
@ -471,7 +465,7 @@ extension RedeemViewController: ConfirmViewControllerDelegate {
ordered = Redeem(
userID: UserDefaults.standard.string(forKey: UserKeys.email),
productCode: model?.productNumber,
productCode: model?.productCode,
usePoint: model?.pointPrice,
orderType: "1",
recvType: recvType,

14
GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframe.swift

@ -29,36 +29,36 @@ extension RedeemWireframe: RedeemWireframeInput {
presenter.wireframe = self
presenter.view = viewController
self.view = viewController
view = viewController
return viewController
}
func pushMainViewWithModel(with model: RewardProduct?, in source: UINavigationController) {
self.model = model
self.pushMainView(in: source)
pushMainView(in: source)
}
func showSearchAddressVC(){
let wireframe = SearchAddressWireframe()
guard let delegate = self.view as? SearchAddressDelegate else {return}
guard let delegate = view as? SearchAddressDelegate else {return}
wireframe.openViewControllerWithNavigationWithDelegate(
delegate: delegate,
viewController: wireframe.getMainView(),
source: self.view
source: view
)
}
func showBranchesVC() {
func showBranchesVC(){
let wireframe = GmeContactsWireframe()
let vc = wireframe.getMainView()
wireframe.openViewControllerWithNavigation(viewController: vc, source: self.view)
wireframe.openViewControllerWithNavigation(viewController: vc, source: view)
}
func goRewardVC() {
self.view.navigationController?.popToRootViewController(animated: true)
view.navigationController?.popToRootViewController(animated: true)
}
}

16
GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProduct.swift

@ -10,20 +10,20 @@ import Foundation
import ObjectMapper
struct RewardProduct: Mappable {
var productNumber: String? //productNumber
var productCode: String? //productNumber
var productName: String? //productName,
var pointPrice: String? //pointPrice
var deliveryYN: String? //deliveryYN
var imageData: String? //imageData
var deliverYN: String? //deliveryYN
var productImgPath: String? //imageData
init?(map: Map) {
}
mutating func mapping(map: Map) {
self.productNumber <- map["productNumber"]
self.productName <- map["productName"]
self.pointPrice <- map["pointPrice"]
self.deliveryYN <- map["deliveryYN"]
self.imageData <- map["imageData"]
productCode <- map["productCode"]
productName <- map["productName"]
pointPrice <- map["pointPrice"]
deliverYN <- map["deliverYN"]
productImgPath <- map["productImgPath"]
}
}

4
GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardService.swift

@ -21,8 +21,8 @@ class RewardService: RewardServiceType {
success: @escaping ([RewardProduct]?) -> (),
failure: @escaping (Error) -> ()
) {
// let url = baseUrl + "/reward/productList"
// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productList"
// let url = baseUrl + "/reward/productList"
// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productList"
let url = baseUrlWithoutVersion + "/v2/reward/productList"
auth.request(method: .post, url: url, params: nil, success: { (response: RewardProductContainer) in

14
GMERemittance/Module/RewardModules/Reward/User Interface/Presenter/RewardPresenter.swift

@ -23,12 +23,12 @@ class RewardPresenter {
extension RewardPresenter: RewardModuleInterface {
func viewIsReady() {
self.view?.startLoading()
self.interactor?.viewIsReady()
view?.startLoading()
interactor?.viewIsReady()
}
func goRedeemViewController(with model: RewardProduct?) {
self.wireframe?.goRedeemViewController(with: model)
wireframe?.goRedeemViewController(with: model)
}
}
@ -36,12 +36,12 @@ extension RewardPresenter: RewardModuleInterface {
extension RewardPresenter: RewardInteractorOutput {
func setRewardProducts(models: [RewardProduct]?) {
self.view?.endLoading()
self.view?.setRewardProducts(models: models)
view?.endLoading()
view?.setRewardProducts(models: models)
}
func failure(error: Error) {
self.view?.endLoading()
self.view?.failure(error: error)
view?.endLoading()
view?.failure(error: error)
}
}

25
GMERemittance/Module/RewardModules/Reward/User Interface/View/Cell/RewardItemCollectionViewCell.swift

@ -21,22 +21,15 @@ class RewardItemCollectionViewCell: UICollectionViewCell {
var delegate: RewardViewInterface?
func setModel(with model: RewardProduct?, delegate: RewardViewInterface?){
// TODO:
// guard
// let product = model,
// let imageData = model?.imageData,
// let url = URL(string: imageData),
// let data = try? Data(contentsOf: url)
// else { return }
// self.itemImage.image = UIImage(data: data)
guard
let product = model
else { return }
self.itemNameLabel.text = product.productName
self.itemPriceLabel.text = product.pointPrice
if let imageData = model?.productImgPath,
let url = URL(string: imageData),
let data = try? Data(contentsOf: url) {
self.itemImage.image = UIImage(data: data)
}
self.itemNameLabel.text = model?.productName
self.itemPriceLabel.text = model?.pointPrice
self.model = product
self.model = model
self.delegate = delegate
self.setUI()
@ -49,7 +42,7 @@ class RewardItemCollectionViewCell: UICollectionViewCell {
}
func setButton(){
self.redeemButton.rounded()
self.redeemButton.layer.cornerRadius = 10
self.redeemButton.addTarget(self, action: #selector(redeemButtonTouch), for: .touchUpInside)
let totalPoint = UserDefaults.standard.integer(forKey: UserKeys.rewardPoint)

11
GMERemittance/Module/RewardModules/Reward/User Interface/View/Reward.storyboard

@ -106,7 +106,7 @@
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gXS-zt-2Em" userLabel="Image">
<rect key="frame" x="45" y="9.5" width="60" height="68"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_cap" translatesAutoresizingMaskIntoConstraints="NO" id="yBC-h9-W9V">
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="yBC-h9-W9V">
<rect key="frame" x="0.0" y="0.0" width="60" height="68"/>
</imageView>
</subviews>
@ -118,8 +118,8 @@
<constraint firstItem="yBC-h9-W9V" firstAttribute="leading" secondItem="gXS-zt-2Em" secondAttribute="leading" id="wTT-Sp-Zie"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Cap" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BqF-5D-gKI">
<rect key="frame" x="62" y="79.5" width="26" height="20"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="N/A" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BqF-5D-gKI">
<rect key="frame" x="63" y="79.5" width="24" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="Z1S-OD-hnG"/>
</constraints>
@ -151,9 +151,9 @@
<constraint firstAttribute="height" constant="1" id="aIU-fW-HwS"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qou-YC-598">
<button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qou-YC-598">
<rect key="frame" x="45" y="136.5" width="60" height="28.5"/>
<color key="backgroundColor" red="0.92941176469999998" green="0.10980392160000001" blue="0.14117647059999999" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="13"/>
<state key="normal" title="Redeem">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -233,7 +233,6 @@
</scene>
</scenes>
<resources>
<image name="ic_cap" width="61" height="61"/>
<image name="ic_reward" width="74" height="74"/>
<image name="starredBackground" width="355" height="132"/>
</resources>

68
GMERemittance/Module/RewardModules/Reward/User Interface/View/RewardViewController.swift

@ -17,13 +17,13 @@ class RewardViewController: UIViewController {
private var models: [RewardProduct]? {
didSet {
self.collectionView.reloadData()
collectionView.reloadData()
}
}
private var rewardPoint: String? {
didSet {
self.rewardPointLabel.text = self.rewardPoint
rewardPointLabel.text = rewardPoint
}
}
@ -40,19 +40,19 @@ class RewardViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
setup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
title = "reward_group_title".localized()
self.presenter?.viewIsReady()
self.rewardPoint = UserDefaults.standard.string(forKey: UserKeys.rewardPoint)
presenter?.viewIsReady()
rewardPoint = UserDefaults.standard.string(forKey: UserKeys.rewardPoint)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationItem.title = ""
navigationItem.title = ""
}
// MARK: IBActions
@ -62,15 +62,15 @@ class RewardViewController: UIViewController {
private func setup() {
// all setup should be done here
self.setDelegate()
self.setCollectionViewLayout()
self.addRefreshControlCollectionView()
setDelegate()
setCollectionViewLayout()
addRefreshControlCollectionView()
setMultiLanguage()
}
private func setDelegate(){
self.collectionView.delegate = self
self.collectionView.dataSource = self
collectionView.delegate = self
collectionView.dataSource = self
}
private func setMultiLanguage() {
@ -80,8 +80,8 @@ class RewardViewController: UIViewController {
private func setCollectionViewLayout() {
let cellSize = CGSize(
width: (self.view.frame.width - 20) / 2 - 3.5,
height: (self.view.frame.width - 20) / 2 - 3.5
width: (view.frame.width - 20) / 2 - 3.5,
height: (view.frame.width - 20) / 2 - 3.5
)
let layout = UICollectionViewFlowLayout()
@ -91,8 +91,8 @@ class RewardViewController: UIViewController {
layout.minimumLineSpacing = 5.0
layout.minimumInteritemSpacing = 5.0
self.collectionView.setCollectionViewLayout(layout, animated: true)
self.collectionView.reloadData()
collectionView.setCollectionViewLayout(layout, animated: true)
collectionView.reloadData()
}
private func addRefreshControlCollectionView() {
@ -100,14 +100,14 @@ class RewardViewController: UIViewController {
let title = NSAttributedString(string: "pull to refresh", attributes: colorOption)
self.refreshControl.attributedTitle = title
self.refreshControl.backgroundColor = AppConstants.themeBlueColor
self.refreshControl.tintColor = AppConstants.themWhiteColor
self.refreshControl.addTarget(self, action: #selector(self.refresh), for: .valueChanged)
refreshControl.attributedTitle = title
refreshControl.backgroundColor = AppConstants.themeBlueColor
refreshControl.tintColor = AppConstants.themWhiteColor
refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
if #available(iOS 10.0, *) {
self.collectionView.refreshControl = self.refreshControl
collectionView.refreshControl = refreshControl
} else {
self.collectionView.addSubview(self.refreshControl)
collectionView.addSubview(refreshControl)
}
}
@ -115,7 +115,9 @@ class RewardViewController: UIViewController {
private func refresh() {
self.presenter?.viewIsReady()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0){
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0){[weak self] in
guard let `self` = self else {return}
if #available(iOS 10.0, *) {
self.collectionView.refreshControl?.endRefreshing()
} else {
@ -133,19 +135,19 @@ extension RewardViewController: RewardViewInterface {
}
func failure(error: Error) {
self.alertWithOk(message: error.localizedDescription)
alertWithOk(message: error.localizedDescription)
}
func goRedeemViewController(with model: RewardProduct?) {
self.presenter?.goRedeemViewController(with: model)
presenter?.goRedeemViewController(with: model)
}
func startLoading() {
self.showProgressHud()
showProgressHud()
}
func endLoading() {
self.hideProgressHud()
hideProgressHud()
}
}
@ -155,23 +157,17 @@ extension RewardViewController: UICollectionViewDelegate {
}
extension RewardViewController: UICollectionViewDataSource {
func collectionView(
_ collectionView: UICollectionView,
numberOfItemsInSection section: Int
) -> Int {
return self.models?.count ?? 0
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return models?.count ?? 0
}
func collectionView(
_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath
) -> UICollectionViewCell {
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(
withReuseIdentifier: "RewardItemCollectionViewCell",
for: indexPath
) as! RewardItemCollectionViewCell
cell.setModel(with: self.models?[indexPath.row], delegate: self)
cell.setModel(with: models?[indexPath.row], delegate: self)
return cell
}

4
GMERemittance/Module/RewardModules/Reward/User Interface/Wireframe/RewardWireframe.swift

@ -28,13 +28,13 @@ extension RewardWireframe: RewardWireframeInput {
presenter.wireframe = self
presenter.view = viewController
self.view = viewController
view = viewController
return viewController
}
func goRedeemViewController(with model: RewardProduct?){
let redeemWireframe = RedeemWireframe()
guard let navigationVC = self.view.navigationController else { return }
guard let navigationVC = view.navigationController else { return }
redeemWireframe.pushMainViewWithModel(with: model, in: navigationVC)
}

4
en.lproj/Localizable.strings

@ -423,7 +423,6 @@
// RedeemViewContoller
"redeem" = "Redeem";
"selected_product" = "Selected reward: ";
"points_deducted" = "Points will be deducted";
"from_your_reward_point" = "from your reward point";
"receiver" = "Receiver";
@ -457,7 +456,8 @@
"ordered" = "ORDERED";
"received" = "RECEIVED";
"canceled" = "CANCELED";
"no_orders_message" = "There are no orders for the three month.";
"no_search_orders_message" = "There are no result for search.";
"no_orders_message" = "There are no orders for last a week.";
// OrderCell
"your_order_canceled" = "Your order canceled";

Loading…
Cancel
Save