Browse Source

conflict solved

pull/1/head
gme_2 6 years ago
parent
commit
942fbabb50
  1. 152
      GMERemittance.xcodeproj/project.pbxproj
  2. 2
      GMERemittance/Api/ApiServiceType.swift
  3. 4
      GMERemittance/AppDelegate.swift
  4. BIN
      GMERemittance/Assets.xcassets/.DS_Store
  5. 2
      GMERemittance/Info.plist
  6. 62
      GMERemittance/Model/TransactionModel.swift
  7. 3
      GMERemittance/Module/AddReciepient/Application Logic/Interactor/AddReciepientInteractor.swift
  8. 2
      GMERemittance/Module/Home/Module Interface/HomeModuleInterface.swift
  9. 4
      GMERemittance/Module/Home/User Interface/Presenter/HomePresenter.swift
  10. 2
      GMERemittance/Module/Home/User Interface/View/HomeViewController.swift
  11. 7
      GMERemittance/Module/Home/User Interface/Wireframe/HomeWireframe.swift
  12. 2
      GMERemittance/Module/Home/User Interface/Wireframe/HomeWireframeInput.swift
  13. 9
      GMERemittance/Module/Login/Application Logic/Interactor/LoginInteractor.swift
  14. 5
      GMERemittance/Module/Main/User Interface/View/MainViewController.swift
  15. 15
      GMERemittance/Module/New Group/Kyc/Application Logic/Interactor/KycInteractor.swift
  16. 1
      GMERemittance/Module/New Group/Kyc/Application Logic/Interactor/KycInteractorIO.swift
  17. 5
      GMERemittance/Module/New Group/Kyc/User Interface/Presenter/KycPresenter.swift
  18. 6
      GMERemittance/Module/New Group/Kyc/User Interface/Wireframe/KycWireframe.swift
  19. 2
      GMERemittance/Module/New Group/Kyc/User Interface/Wireframe/KycWireframeInput.swift
  20. 4
      GMERemittance/Module/New Group/kycForm1/User Interface/View/kycForm1.storyboard
  21. 36
      GMERemittance/Module/New Group/kycForm1/User Interface/View/kycForm1ViewController.swift
  22. 2
      GMERemittance/Module/New Group/kycForm2/User Interface/View/kycForm2.storyboard
  23. 24
      GMERemittance/Module/New Group/kycForm2/User Interface/View/kycForm2ViewController.swift
  24. 3
      GMERemittance/Module/New Group/kycForm3/User Interface/View/kycForm3ViewController.swift
  25. 22
      GMERemittance/Module/Register/Application Logic/Interactor/RegisterInteractor.swift
  26. 3
      GMERemittance/Module/SendMoney/SendMoneyExchangeRate/User Interface/View/SendMoneyExchangeRateViewController.swift
  27. 1
      GMERemittance/Module/SendMoney/SendMoneyReceipt/Module Interface/SendMoneyReceiptModuleInterface.swift
  28. 4
      GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/Presenter/SendMoneyReceiptPresenter.swift
  29. 1
      GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/View/SendMoneyReceipt.storyboard
  30. 39
      GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/View/SendMoneyReceiptViewController.swift
  31. 13
      GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/Wireframe/SendMoneyReceiptWireframe.swift
  32. 2
      GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/Wireframe/SendMoneyReceiptWireframeInput.swift
  33. 2
      GMERemittance/Module/SendMoney/SendMoneyVerification/Application Logic/Interactor/SendMoneyVerificationInteractor.swift
  34. 5
      GMERemittance/Module/SplashScreen/User Interface/View/SplashScreenViewController.swift
  35. 51
      GMERemittance/Module/TransactionHistory/Application Logic/Interactor/TransactionHistoryInteractor.swift
  36. 16
      GMERemittance/Module/TransactionHistory/Application Logic/Interactor/TransactionHistoryInteractorIO.swift
  37. 18
      GMERemittance/Module/TransactionHistory/Application Logic/Service/TransactionHistoryService.swift
  38. 36
      GMERemittance/Module/TransactionHistory/Application Logic/Service/TransactionHistoryServiceType.swift
  39. 15
      GMERemittance/Module/TransactionHistory/Module Interface/TransactionHistoryModuleInterface.swift
  40. 86
      GMERemittance/Module/TransactionHistory/User Interface/Presenter/TransactionHistoryPresenter.swift
  41. 36
      GMERemittance/Module/TransactionHistory/User Interface/View/Cell/TransactionHistoryTableViewCell.swift
  42. 88
      GMERemittance/Module/TransactionHistory/User Interface/View/DatePickerViewController.swift
  43. 261
      GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistory.storyboard
  44. 157
      GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryDatePicker.storyboard
  45. 218
      GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryViewController.swift
  46. 14
      GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryViewInterface.swift
  47. 43
      GMERemittance/Module/TransactionHistory/User Interface/Wireframe/TransactionHistoryWireframe.swift
  48. 13
      GMERemittance/Module/TransactionHistory/User Interface/Wireframe/TransactionHistoryWireframeInput.swift
  49. 2
      GMERemittance/TrackTransfer/TrackTransfer.storyboard
  50. 34
      GMERemittance/TrackTransfer/Transaction.swift
  51. 4
      GMERemittance/Transaction/TransactionStatement.storyboard
  52. 3
      GMERemittance/Transaction/TranscationTableViewCell.swift
  53. 19
      GMERemittance/UrlManager.swift
  54. 11
      GMERemittance/Utility/AppConstants.swift
  55. 8
      GMERemittance/_Home/_Home.storyboard
  56. 23
      GMERemittance/_Home/_HomeViewController.swift

152
GMERemittance.xcodeproj/project.pbxproj

@ -456,10 +456,25 @@
D96A50002146625C00CFD507 /* RegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96A4FF52146625C00CFD507 /* RegisterViewController.swift */; };
D96A5002214668A000CFD507 /* RegisterRequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96A5001214668A000CFD507 /* RegisterRequestModel.swift */; };
D9768C88213BAE92009E01BC /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9768C87213BAE92009E01BC /* User.swift */; };
D977859D215DC55F00754079 /* TransactionHistoryModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D977858A215DC55E00754079 /* TransactionHistoryModuleInterface.swift */; };
D977859E215DC55F00754079 /* TransactionHistoryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D977858D215DC55E00754079 /* TransactionHistoryService.swift */; };
D977859F215DC55F00754079 /* TransactionHistoryServiceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D977858E215DC55E00754079 /* TransactionHistoryServiceType.swift */; };
D97785A0215DC55F00754079 /* TransactionHistoryInteractorIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9778590215DC55E00754079 /* TransactionHistoryInteractorIO.swift */; };
D97785A1215DC55F00754079 /* TransactionHistoryInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9778591215DC55E00754079 /* TransactionHistoryInteractor.swift */; };
D97785A2215DC55F00754079 /* TransactionHistoryPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9778594215DC55E00754079 /* TransactionHistoryPresenter.swift */; };
D97785A3215DC55F00754079 /* TransactionHistoryWireframeInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9778596215DC55E00754079 /* TransactionHistoryWireframeInput.swift */; };
D97785A4215DC55F00754079 /* TransactionHistoryWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9778597215DC55E00754079 /* TransactionHistoryWireframe.swift */; };
D97785A5215DC55F00754079 /* TransactionHistory.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D977859A215DC55E00754079 /* TransactionHistory.storyboard */; };
D97785A6215DC55F00754079 /* TransactionHistoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D977859B215DC55E00754079 /* TransactionHistoryViewController.swift */; };
D97785A7215DC55F00754079 /* TransactionHistoryViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D977859C215DC55E00754079 /* TransactionHistoryViewInterface.swift */; };
D97785AA215DD04400754079 /* TransactionHistoryTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D97785A9215DD04400754079 /* TransactionHistoryTableViewCell.swift */; };
D97785AC215DD23400754079 /* TransactionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D97785AB215DD23400754079 /* TransactionModel.swift */; };
D99D72AA212D595B00601F48 /* CountryInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D99D72A9212D595B00601F48 /* CountryInfo.swift */; };
D9AFE856215C7166005F3A25 /* HomeCollectionTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9AFE855215C7166005F3A25 /* HomeCollectionTableViewCell.swift */; };
D9B39677214F7DDC0072A9B8 /* ImageCroper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B39675214F7DDC0072A9B8 /* ImageCroper.swift */; };
D9B39678214F7DDC0072A9B8 /* MultiMediaManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B39676214F7DDC0072A9B8 /* MultiMediaManager.swift */; };
D9B414402161AD2000A53D9D /* TransactionHistoryDatePicker.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D9B4143F2161AD2000A53D9D /* TransactionHistoryDatePicker.storyboard */; };
D9B414422161AE2800A53D9D /* DatePickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B414412161AE2800A53D9D /* DatePickerViewController.swift */; };
D9B7ADF02130048E009B0564 /* ExchangeRatesModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B7ADDD2130048E009B0564 /* ExchangeRatesModuleInterface.swift */; };
D9B7ADF12130048E009B0564 /* ExchangeRatesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B7ADE02130048E009B0564 /* ExchangeRatesService.swift */; };
D9B7ADF22130048E009B0564 /* ExchangeRatesServiceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B7ADE12130048E009B0564 /* ExchangeRatesServiceType.swift */; };
@ -978,10 +993,25 @@
D96A4FF52146625C00CFD507 /* RegisterViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegisterViewController.swift; sourceTree = "<group>"; };
D96A5001214668A000CFD507 /* RegisterRequestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterRequestModel.swift; sourceTree = "<group>"; };
D9768C87213BAE92009E01BC /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
D977858A215DC55E00754079 /* TransactionHistoryModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryModuleInterface.swift; sourceTree = "<group>"; };
D977858D215DC55E00754079 /* TransactionHistoryService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryService.swift; sourceTree = "<group>"; };
D977858E215DC55E00754079 /* TransactionHistoryServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryServiceType.swift; sourceTree = "<group>"; };
D9778590215DC55E00754079 /* TransactionHistoryInteractorIO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryInteractorIO.swift; sourceTree = "<group>"; };
D9778591215DC55E00754079 /* TransactionHistoryInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryInteractor.swift; sourceTree = "<group>"; };
D9778594215DC55E00754079 /* TransactionHistoryPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryPresenter.swift; sourceTree = "<group>"; };
D9778596215DC55E00754079 /* TransactionHistoryWireframeInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryWireframeInput.swift; sourceTree = "<group>"; };
D9778597215DC55E00754079 /* TransactionHistoryWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryWireframe.swift; sourceTree = "<group>"; };
D977859A215DC55E00754079 /* TransactionHistory.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = TransactionHistory.storyboard; sourceTree = "<group>"; };
D977859B215DC55E00754079 /* TransactionHistoryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryViewController.swift; sourceTree = "<group>"; };
D977859C215DC55E00754079 /* TransactionHistoryViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryViewInterface.swift; sourceTree = "<group>"; };
D97785A9215DD04400754079 /* TransactionHistoryTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionHistoryTableViewCell.swift; sourceTree = "<group>"; };
D97785AB215DD23400754079 /* TransactionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionModel.swift; sourceTree = "<group>"; };
D99D72A9212D595B00601F48 /* CountryInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountryInfo.swift; sourceTree = "<group>"; };
D9AFE855215C7166005F3A25 /* HomeCollectionTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCollectionTableViewCell.swift; sourceTree = "<group>"; };
D9B39675214F7DDC0072A9B8 /* ImageCroper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCroper.swift; sourceTree = "<group>"; };
D9B39676214F7DDC0072A9B8 /* MultiMediaManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiMediaManager.swift; sourceTree = "<group>"; };
D9B4143F2161AD2000A53D9D /* TransactionHistoryDatePicker.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = TransactionHistoryDatePicker.storyboard; sourceTree = "<group>"; };
D9B414412161AE2800A53D9D /* DatePickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickerViewController.swift; sourceTree = "<group>"; };
D9B7ADDD2130048E009B0564 /* ExchangeRatesModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRatesModuleInterface.swift; sourceTree = "<group>"; };
D9B7ADE02130048E009B0564 /* ExchangeRatesService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRatesService.swift; sourceTree = "<group>"; };
D9B7ADE12130048E009B0564 /* ExchangeRatesServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRatesServiceType.swift; sourceTree = "<group>"; };
@ -1634,7 +1664,10 @@
D907AB96212AA8A300915A87 /* Module */ = {
isa = PBXGroup;
children = (
D950BEBC21549242008367A1 /* Home */,
D9778588215DC55E00754079 /* TransactionHistory */,
D93702BA2149019900D93077 /* _KYC */,
D9031127214786EA00AD5BA9 /* ForgotPassword */,
D96A4FE12146625C00CFD507 /* Register */,
@ -3113,6 +3146,7 @@
D92C24A621477EA600F6876F /* ResponseMessage.swift */,
D94173B2214B40ED00D04BE5 /* KycModel.swift */,
D9535CCB2150C14700EDFCD2 /* KYCResponseModel.swift */,
D97785AB215DD23400754079 /* TransactionModel.swift */,
);
path = Model;
sourceTree = "<group>";
@ -3314,6 +3348,107 @@
path = ViewModels;
sourceTree = "<group>";
};
D9778588215DC55E00754079 /* TransactionHistory */ = {
isa = PBXGroup;
children = (
D9778589215DC55E00754079 /* Module Interface */,
D977858B215DC55E00754079 /* Application Logic */,
D9778592215DC55E00754079 /* User Interface */,
);
path = TransactionHistory;
sourceTree = "<group>";
};
D9778589215DC55E00754079 /* Module Interface */ = {
isa = PBXGroup;
children = (
D977858A215DC55E00754079 /* TransactionHistoryModuleInterface.swift */,
);
path = "Module Interface";
sourceTree = "<group>";
};
D977858B215DC55E00754079 /* Application Logic */ = {
isa = PBXGroup;
children = (
D977858C215DC55E00754079 /* Service */,
D977858F215DC55E00754079 /* Interactor */,
);
path = "Application Logic";
sourceTree = "<group>";
};
D977858C215DC55E00754079 /* Service */ = {
isa = PBXGroup;
children = (
D977858D215DC55E00754079 /* TransactionHistoryService.swift */,
D977858E215DC55E00754079 /* TransactionHistoryServiceType.swift */,
);
path = Service;
sourceTree = "<group>";
};
D977858F215DC55E00754079 /* Interactor */ = {
isa = PBXGroup;
children = (
D9778590215DC55E00754079 /* TransactionHistoryInteractorIO.swift */,
D9778591215DC55E00754079 /* TransactionHistoryInteractor.swift */,
);
path = Interactor;
sourceTree = "<group>";
};
D9778592215DC55E00754079 /* User Interface */ = {
isa = PBXGroup;
children = (
D9778593215DC55E00754079 /* Presenter */,
D9778595215DC55E00754079 /* Wireframe */,
D9778598215DC55E00754079 /* View */,
);
path = "User Interface";
sourceTree = "<group>";
};
D9778593215DC55E00754079 /* Presenter */ = {
isa = PBXGroup;
children = (
D9778594215DC55E00754079 /* TransactionHistoryPresenter.swift */,
);
path = Presenter;
sourceTree = "<group>";
};
D9778595215DC55E00754079 /* Wireframe */ = {
isa = PBXGroup;
children = (
D9778596215DC55E00754079 /* TransactionHistoryWireframeInput.swift */,
D9778597215DC55E00754079 /* TransactionHistoryWireframe.swift */,
);
path = Wireframe;
sourceTree = "<group>";
};
D9778598215DC55E00754079 /* View */ = {
isa = PBXGroup;
children = (
D97785A8215DD02800754079 /* Cell */,
D9778599215DC55E00754079 /* ViewModels */,
D977859A215DC55E00754079 /* TransactionHistory.storyboard */,
D977859B215DC55E00754079 /* TransactionHistoryViewController.swift */,
D977859C215DC55E00754079 /* TransactionHistoryViewInterface.swift */,
D9B4143F2161AD2000A53D9D /* TransactionHistoryDatePicker.storyboard */,
D9B414412161AE2800A53D9D /* DatePickerViewController.swift */,
);
path = View;
sourceTree = "<group>";
};
D9778599215DC55E00754079 /* ViewModels */ = {
isa = PBXGroup;
children = (
);
path = ViewModels;
sourceTree = "<group>";
};
D97785A8215DD02800754079 /* Cell */ = {
isa = PBXGroup;
children = (
D97785A9215DD04400754079 /* TransactionHistoryTableViewCell.swift */,
);
path = Cell;
sourceTree = "<group>";
};
D9B7ADDB2130048E009B0564 /* ExchangeRates */ = {
isa = PBXGroup;
children = (
@ -3605,6 +3740,7 @@
049B6ED0203ADCF3003D6F62 /* gme-logo.png in Resources */,
040C814A20626A7D00989076 /* Reward.storyboard in Resources */,
5565FF201FE275E5002934E9 /* SanFranciscoDisplay-Ultralight.otf in Resources */,
D9B414402161AD2000A53D9D /* TransactionHistoryDatePicker.storyboard in Resources */,
5565FF2F1FE275E5002934E9 /* SanFranciscoDisplay-Thin.otf in Resources */,
5565FF1D1FE275E5002934E9 /* SanFranciscoDisplay-Heavy.otf in Resources */,
5565FF2A1FE275E5002934E9 /* SanFranciscoDisplay-Bold.otf in Resources */,
@ -3635,6 +3771,7 @@
9FD260FD1FD00458007A511D /* Main.storyboard in Resources */,
044F5B1B20A3002B00E3584C /* index.html in Resources */,
D9031144214786EA00AD5BA9 /* ForgotPassword.storyboard in Resources */,
D97785A5215DC55F00754079 /* TransactionHistory.storyboard in Resources */,
5565FF231FE275E5002934E9 /* SanFranciscoText-BoldItalic.otf in Resources */,
D922D9252134DCF000D43053 /* EditReciepient.storyboard in Resources */,
5565FF221FE275E5002934E9 /* SanFranciscoDisplay-Light.otf in Resources */,
@ -3970,6 +4107,7 @@
D945F125213E1D5100A24824 /* SendMoneyReceiptViewInterface.swift in Sources */,
04BEF55E205948E8007713F9 /* RewardViewModel.swift in Sources */,
D92B80262140C3CB00A25B26 /* MainService.swift in Sources */,
D9B414422161AE2800A53D9D /* DatePickerViewController.swift in Sources */,
0428DC682048FF91008355D7 /* WalletTransactionTableViewCell.swift in Sources */,
9F23DF512074A02B0025D6DF /* MyCollectionViewCell.swift in Sources */,
A28D38F0202D49C90012EF6A /* TransactionSearchViewController.swift in Sources */,
@ -3983,19 +4121,24 @@
0496B8551FE7E2830044810E /* SignUpViewModel.swift in Sources */,
A2661F30201EEA2900ECBF94 /* ProfileModel.swift in Sources */,
D96A4FDC21460B4A00CFD507 /* SplashScreenViewInterface.swift in Sources */,
D950BED721549242008367A1 /* HomeWireframeInput.swift in Sources */,
D977859D215DC55F00754079 /* TransactionHistoryModuleInterface.swift in Sources */,
049E61A71FF0FF2A00817C76 /* FillRecoveryCodeViewModel.swift in Sources */,
D903113C214786EA00AD5BA9 /* ForgotPasswordModuleInterface.swift in Sources */,
D946719D21426DFB003924DB /* LoginViewInterface.swift in Sources */,
04CDC57E20809DCE0081BE50 /* Reward.swift in Sources */,
D922D9AB21351B7400D43053 /* SendMoneyVerificationInteractorIO.swift in Sources */,
D96A4FD721460B4A00CFD507 /* SplashScreenInteractor.swift in Sources */,
D97785A7215DC55F00754079 /* TransactionHistoryViewInterface.swift in Sources */,
D946719921426DFB003924DB /* LoginInteractorIO.swift in Sources */,
D95B5E3E21311057000C0B33 /* GmeContactsPresenter.swift in Sources */,
D95B5E4121311057000C0B33 /* GmeContactsViewInterface.swift in Sources */,
9F9DF0CC1FEBC141005B8F42 /* RecipientListViewController.swift in Sources */,
042F98E620482FC90069F638 /* WalletSuccessViewController.swift in Sources */,
0496B83F1FE7DF890044810E /* SignUpViewController.swift in Sources */,
D97785A6215DC55F00754079 /* TransactionHistoryViewController.swift in Sources */,
D9CB49862132A5F500B7A124 /* ItemsPickerCell.swift in Sources */,
D9B7ADF22130048E009B0564 /* ExchangeRatesServiceType.swift in Sources */,
D9DAFE2921353D6C00483E71 /* SendMoneyPaymentModeModel.swift in Sources */,
@ -4037,6 +4180,7 @@
A205DF5D201F38F60074B0C8 /* UserInfoViewController.swift in Sources */,
D937038021490C3800D93077 /* KycForm1Interactor.swift in Sources */,
9F3332AF208DAE7600E39C9F /* ExchangeRateData.swift in Sources */,
D97785AC215DD23400754079 /* TransactionModel.swift in Sources */,
D90A9D65213696E400A96E45 /* BankPickerCell.swift in Sources */,
A22F75032012006100B0FA15 /* likesTableViewCell.swift in Sources */,
D922D91C2134DCF000D43053 /* EditReciepientModuleInterface.swift in Sources */,
@ -4051,6 +4195,7 @@
D9031143214786EA00AD5BA9 /* ForgotPasswordWireframeInput.swift in Sources */,
D92C24A721477EA600F6876F /* ResponseMessage.swift in Sources */,
045CB0C6202F2A3D008DD982 /* MessageComposeViewController.swift in Sources */,
D97785A1215DC55F00754079 /* TransactionHistoryInteractor.swift in Sources */,
D903113F214786EA00AD5BA9 /* ForgotPasswordInteractor.swift in Sources */,
D922D9472135124200D43053 /* SendMoneyPaymentModeWireframe.swift in Sources */,
A249B79C2020426C00BD3D13 /* UserInfoViewModel.swift in Sources */,
@ -4063,6 +4208,7 @@
D95B5E4921314D31000C0B33 /* GmeContacts.swift in Sources */,
A24B44FA204CF108009BF491 /* InviteeModel.swift in Sources */,
D945F11D213E1D5100A24824 /* SendMoneyReceiptModuleInterface.swift in Sources */,
D97785AA215DD04400754079 /* TransactionHistoryTableViewCell.swift in Sources */,
D937037221490C3800D93077 /* KycForm2ServiceType.swift in Sources */,
D95B5E3921311057000C0B33 /* GmeContactsModuleInterface.swift in Sources */,
D9CB4977213290B200B7A124 /* SendMoneyTransFerReasonViewModel.swift in Sources */,
@ -4174,6 +4320,7 @@
A255A907206A14220002905D /* SSBadgeButton.swift in Sources */,
D922D9232134DCF000D43053 /* EditReciepientWireframe.swift in Sources */,
D945F121213E1D5100A24824 /* SendMoneyReceiptInteractorIO.swift in Sources */,
D97785A2215DC55F00754079 /* TransactionHistoryPresenter.swift in Sources */,
D9BF7EE12137CECF00264387 /* CurrencyPickerCell.swift in Sources */,
9F16112E2029C117009E8610 /* TrackTransactionViewModel.swift in Sources */,
9FCBD349202AEBA100BAEB32 /* PayoutViewController.swift in Sources */,
@ -4184,6 +4331,7 @@
043629CA200A499900DD5E73 /* MobileRechargeReviewViewController.swift in Sources */,
A2FD3AEF2052568900404EA9 /* NotificationViewModel.swift in Sources */,
A2336583207DD44C0078DD77 /* BankBranch.swift in Sources */,
D977859E215DC55F00754079 /* TransactionHistoryService.swift in Sources */,
D95B5E3A21311057000C0B33 /* GmeContactsService.swift in Sources */,
D95B5E3F21311057000C0B33 /* GmeContactsWireframeInput.swift in Sources */,
D922D9442135124200D43053 /* SendMoneyPaymentModeInteractor.swift in Sources */,
@ -4203,6 +4351,7 @@
D9B7ADF52130048E009B0564 /* ExchangeRatesPresenter.swift in Sources */,
A2E3379720483C84002DB015 /* InviteViewModel.swift in Sources */,
0448C2A11FF34D9C001FEA77 /* RecipientViewModel.swift in Sources */,
D977859F215DC55F00754079 /* TransactionHistoryServiceType.swift in Sources */,
046C5A211FE8FFB800918FFD /* ForgetPasswordViewModel.swift in Sources */,
0432A5752073531F005EE949 /* SocialWall.swift in Sources */,
D922D9AA21351B7400D43053 /* SendMoneyVerificationService.swift in Sources */,
@ -4212,6 +4361,7 @@
D9CB49732132908300B7A124 /* SendMoneyProvinceViewModel.swift in Sources */,
043629C5200A2ED900DD5E73 /* MobileRechargeViewController.swift in Sources */,
A249B79E20204B1600BD3D13 /* UserTemp.swift in Sources */,
D97785A0215DC55F00754079 /* TransactionHistoryInteractorIO.swift in Sources */,
D922D98821351AAE00D43053 /* SendMoneyExchangeRateInteractor.swift in Sources */,
D922D98A21351AAE00D43053 /* SendMoneyExchangeRateWireframeInput.swift in Sources */,
D9BF7EE22137CECF00264387 /* CurrencyPickerViewController.swift in Sources */,
@ -4268,6 +4418,7 @@
049E61A51FF0AE9D00817C76 /* UrlManager.swift in Sources */,
D9AFE856215C7166005F3A25 /* HomeCollectionTableViewCell.swift in Sources */,
A25CF60B2046A92C0029BC12 /* ReferringViewController.swift in Sources */,
D97785A3215DC55F00754079 /* TransactionHistoryWireframeInput.swift in Sources */,
D90A9D5C2136942300A96E45 /* BankBranchPickerViewController.swift in Sources */,
04B67E9020469ACC000A4248 /* WalletViewModel.swift in Sources */,
D922D9682135145F00D43053 /* SendMoneyParentWireframe.swift in Sources */,
@ -4293,6 +4444,7 @@
D92B80282140C3CB00A25B26 /* MainInteractor.swift in Sources */,
A2B9D7592020C616007C1049 /* MyStoryViewController.swift in Sources */,
D937037921490C3800D93077 /* KycForm2ViewInterface.swift in Sources */,
D97785A4215DC55F00754079 /* TransactionHistoryWireframe.swift in Sources */,
D96848CC212D3F2300EF12B1 /* ExchangeRateApiService.swift in Sources */,
A2B0DD8E2085AC690074A5BA /* PaymentMethodId.swift in Sources */,
047635AE200B3F1B00E6F4E5 /* MobileRechargeViewModel.swift in Sources */,

2
GMERemittance/Api/ApiServiceType.swift

@ -21,7 +21,7 @@ extension ApiServiceType {
// repeated things in api
//
//if (response.errorCode ?? "") == "1" {
// let error = NSError.init(domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""])
// failure(error)

4
GMERemittance/AppDelegate.swift

@ -1,4 +1,4 @@
//
//
// AppDelegate.swift
// GMERemittance
//
@ -18,6 +18,8 @@ import Crashlytics
import AlamofireNetworkActivityLogger
import IQKeyboardManagerSwift
import LGSideMenuController
let isDevelopment = true
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {

BIN
GMERemittance/Assets.xcassets/.DS_Store

2
GMERemittance/Info.plist

@ -30,7 +30,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>32</string>
<string>33</string>
<key>Fabric</key>
<dict>
<key>APIKey</key>

62
GMERemittance/Model/TransactionModel.swift

@ -0,0 +1,62 @@
//
// TransactionModel.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
import ObjectMapper
class TransactionModelContainer: Mappable {
var errorCode: String?
var message: String?
var id: String?
var data: [TransactionModel]?
required init?(map: Map) {
}
func mapping(map: Map) {
errorCode <- map["ErrorCode"]
message <- map["Msg"]
id <- map["Id"]
data <- map["Data"]
}
}
class TransactionModel: Mappable {
var user: String?
var transactionId: String?
var controlNumber: String?
var pAmt: String?
var pCurrency: String?
var cCurrency: String?
var cAmt: String?
var payStatus: String?
var payOutMode: String?
var sendDate: String?
var paidDate: String?
required init?(map: Map) {
}
func mapping(map: Map) {
user <- map["User"]
transactionId <- map["TranId"]
controlNumber <- map["ControlNo"]
pAmt <- map["PayoutAmt"]
pCurrency <- map["PCurr"]
cAmt <- map["CollAmt"]
cCurrency <- map["CollCurr"]
payStatus <- map["PayStatus"]
payOutMode <- map["PayoutMode"]
sendDate <- map["SendDate"]
paidDate <- map["PaidDate"]
}
}

3
GMERemittance/Module/AddReciepient/Application Logic/Interactor/AddReciepientInteractor.swift

@ -37,8 +37,7 @@ extension AddReciepientInteractor: AddReciepientInteractorInput {
}
func save(reciepient: Recipient) {
let defaults = UserDefaults.standard
let myUsername = defaults.string(forKey: UserKeys.userId) ?? ""
let myUsername = Utility.getMyUserName()
self.service.save(model: reciepient.serialize(), username: myUsername, success: { (reciepient) in
self.output?.success()
}) { (error) in

2
GMERemittance/Module/Home/Module Interface/HomeModuleInterface.swift

@ -7,5 +7,5 @@
//
protocol HomeModuleInterface: class {
func openTransactionHistory()
}

4
GMERemittance/Module/Home/User Interface/Presenter/HomePresenter.swift

@ -22,7 +22,9 @@ class HomePresenter {
// MARK: Home module interface
extension HomePresenter: HomeModuleInterface {
func openTransactionHistory() {
wireframe?.openTransactionHistory()
}
}
// MARK: Home interactor output interface

2
GMERemittance/Module/Home/User Interface/View/HomeViewController.swift

@ -213,7 +213,7 @@ class HomeViewController: UIViewController, UICollectionViewDelegateFlowLayout {
}
@objc private func showTransactionStatement() {
self.performSegue(withIdentifier: "transactionStatement", sender: nil)
self.presenter?.openTransactionHistory()
}
@objc private func showWalletToWallet() {

7
GMERemittance/Module/Home/User Interface/Wireframe/HomeWireframe.swift

@ -10,6 +10,7 @@ import UIKit
class HomeWireframe {
weak var view: UIViewController!
private lazy var transactionHistoryWireframe: TransactionHistoryWireframeInput = TransactionHistoryWireframe()
}
extension HomeWireframe: HomeWireframeInput {
@ -31,4 +32,10 @@ extension HomeWireframe: HomeWireframeInput {
self.view = viewController
return viewController
}
func openTransactionHistory() {
if let navigation = self.view.navigationController {
self.transactionHistoryWireframe.pushMainView(in: navigation)
}
}
}

2
GMERemittance/Module/Home/User Interface/Wireframe/HomeWireframeInput.swift

@ -9,5 +9,5 @@
import Foundation
protocol HomeWireframeInput: WireframeInput {
func openTransactionHistory()
}

9
GMERemittance/Module/Login/Application Logic/Interactor/LoginInteractor.swift

@ -39,8 +39,13 @@ class LoginInteractor {
var error = ""
var isValid = true
if userName.isEmpty {
error = error + "Username field is required."; isValid = false}
if password.isEmpty {error = error + "\n Password filed is required."; isValid = false}
error = error + "Username field is required.";
isValid = false
}
if password.isEmpty {error = error + "\n Password filed is required.";
isValid = false
}
let _error = NSError.init(domain: "LoginInteractor", code: 0, userInfo: [NSLocalizedDescriptionKey : error])
return (isValid, _error)
}

5
GMERemittance/Module/Main/User Interface/View/MainViewController.swift

@ -147,6 +147,7 @@ struct Fonts {
static let regular = "SanFranciscoDisplay-regular"
static let light = "SanFranciscoDisplay-light"
static let bold = "SanFranciscoDisplay-Bold"
static let semiBold = "SanFranciscoDisplay-Semibold"
}
struct TabBar {
@ -160,6 +161,10 @@ struct Fonts {
struct XLTabBar {
static let itemFont = UIFont(name: Family.light, size: 12)!
}
struct Error {
static let font = UIFont(name: Family.semiBold, size: 11)!
}
}

15
GMERemittance/Module/New Group/Kyc/Application Logic/Interactor/KycInteractor.swift

@ -46,11 +46,11 @@ class KycInteractor {
formDick.forEach({
if ($0.value ?? "").isEmpty {
sucks = false // isValid = false
errorsDick[$0.key] = "required"
errorsDick[$0.key] = "\($0.key) filed is required"
}
})
if let email = model?.email {
if let email = model?.email, email != "" {
if !Utility.isValidEmail(email: email){
sucks = false
errorsDick[KycForm1FieldKeys.email] = "invalid email"
@ -89,16 +89,16 @@ class KycInteractor {
if $0.key == KycForm2FieldKeys.issueDate {
if shoulValidateIssueDate {
sucks = false // isValid = false
errorsDick[$0.key] = "required"
errorsDick[$0.key] = "\($0.key) filed is required"
}
}else if $0.key == KycForm2FieldKeys.expiryDate {
if shoulValidateExpiryDate {
sucks = false // isValid = false
errorsDick[$0.key] = "required"
errorsDick[$0.key] = "\($0.key) filed is required"
}
}else {
sucks = false // isValid = false
errorsDick[$0.key] = "required"
errorsDick[$0.key] = "\($0.key) filed is required"
}
}
@ -126,7 +126,7 @@ class KycInteractor {
formDick.forEach({
if $0.value == nil {
sucks = false // isValid = false
errorsDick[$0.key] = "required"
errorsDick[$0.key] = "\($0.key) filed is required"
}
})
let result = (sucks, errorsDick) // (isValid, errorsDick)
@ -226,7 +226,8 @@ extension KycInteractor: KycInteractorInput {
self.service.submit(param: params, images: images, success: { (response) in
// print(response?.firstName)
// Todo: After success what?
self.output?.submitSuccess()
}) { (error) in
self.output?.show(error: error)
}

1
GMERemittance/Module/New Group/Kyc/Application Logic/Interactor/KycInteractorIO.swift

@ -15,4 +15,5 @@ protocol KycInteractorOutput: class {
func show(result2: (isValid: Bool, errorsDick: [String: String]))
func show(result3: (isValid: Bool, errorsDick: [String: String]))
func show(error: Error)
func submitSuccess()
}

5
GMERemittance/Module/New Group/Kyc/User Interface/Presenter/KycPresenter.swift

@ -32,6 +32,11 @@ extension KycPresenter: KycModuleInterface {
// MARK: Kyc interactor output interface
extension KycPresenter: KycInteractorOutput {
func submitSuccess() {
self.wireframe?.gotToHome()
}
func show(result1: (isValid: Bool, errorsDick: [String : String])) {
self.view?.hideLoading()
self.view?.show(resultl: result1)

6
GMERemittance/Module/New Group/Kyc/User Interface/Wireframe/KycWireframe.swift

@ -31,4 +31,10 @@ extension KycWireframe: KycWireframeInput {
self.view = viewController
return viewController
}
func gotToHome() {
if let navigation = self.view.navigationController {
navigation.popViewController(animated: true)
}
}
}

2
GMERemittance/Module/New Group/Kyc/User Interface/Wireframe/KycWireframeInput.swift

@ -9,5 +9,5 @@
import Foundation
protocol KycWireframeInput: WireframeInput {
func gotToHome()
}

4
GMERemittance/Module/New Group/kycForm1/User Interface/View/kycForm1.storyboard

@ -49,7 +49,7 @@
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tell us a few things about yourself" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5gp-EN-amE">
<rect key="frame" x="0.0" y="0.0" width="345" height="50"/>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="VW7-6s-ifB"/>
</constraints>
@ -462,7 +462,7 @@
</constraints>
</scrollView>
</subviews>
<color key="backgroundColor" red="0.90588235294117647" green="0.92941176470588238" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="ixK-Bl-e32" secondAttribute="trailing" id="OBv-lc-TsN"/>
<constraint firstAttribute="bottom" secondItem="ixK-Bl-e32" secondAttribute="bottom" id="OZk-UQ-8pZ"/>

36
GMERemittance/Module/New Group/kycForm1/User Interface/View/kycForm1ViewController.swift

@ -29,15 +29,15 @@ class Occupation {
}
struct KycForm1FieldKeys {
static let firstName = "firstName"
static let middleName = "middleName"
static let lastName = "lastName"
static let firstName = "firstname"
static let middleName = "middlename"
static let lastName = "lastname"
static let gender = "gender"
static let dob = "dob"
static let mobileNumber = "mobileNumber"
static let dob = "date of birth"
static let mobileNumber = "mobile number"
static let email = "email"
static let nativeCountry = "nativeCountry"
static let country = "country"
static let nativeCountry = "native country"
static let country = "address"
static let province = "province"
static let occupation = "occupation"
}
@ -47,6 +47,8 @@ class KycForm1ViewController: UIViewController {
struct Constants {
static let segmentBackgroundViewColor = UIColor.init(hex: "E7EDF2")
static let stateRedColor = UIColor.init(hex: "#EC1C24")
static let errorBorderWidth = AppConstants.errorBorderWidth
static let errorLabelFont = Fonts.Error.font
static let clearColor = UIColor.clear
static let male = "Male"
static let female = "Female"
@ -141,6 +143,12 @@ class KycForm1ViewController: UIViewController {
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.view.endEditing(true)
removeFocus()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.view.endEditing(true)
@ -161,6 +169,12 @@ class KycForm1ViewController: UIViewController {
// MARK: Other Functions
private func removeFocus() {
self.textfields.forEach({
$0.resignFirstResponder()
})
}
private func createModel() {
self.kycForm1Model.firstName = self.firstNameTextField.text!
self.kycForm1Model.middleName = self.middleNmaeTextField.text!
@ -222,7 +236,11 @@ class KycForm1ViewController: UIViewController {
}
private func setupErrorLabels() {
self.errorLabels = [firstNameErrorLabel, middleNameErrorLabel, lastNameErrorLabel, genderErrorLabel, dobErrorLabel, mobileNumberErrorLabel, emailErrorLabel, nativeCountryErrorLabel, nativeCountryErrorLabel, provinceErrorLabel, occupationErrorLabel]
self.errorLabels = [firstNameErrorLabel, middleNameErrorLabel, lastNameErrorLabel, genderErrorLabel, dobErrorLabel, mobileNumberErrorLabel, emailErrorLabel, nativeCountryErrorLabel, nativeCountryErrorLabel, provinceErrorLabel, occupationErrorLabel, countryErrorLabel]
self.errorLabels.forEach({
$0.font = Constants.errorLabelFont
})
self.errorLabelsDict =
[
@ -275,7 +293,7 @@ class KycForm1ViewController: UIViewController {
private func showBorder(textfield :UITextField?) {
guard let textfield = textfield else {return}
textfield.layer.borderColor = Constants.stateRedColor.cgColor
textfield.layer.borderWidth = 0.3
textfield.layer.borderWidth = Constants.errorBorderWidth
textfield.layer.addShadow(with: Constants.stateRedColor)
}

2
GMERemittance/Module/New Group/kycForm2/User Interface/View/kycForm2.storyboard

@ -235,7 +235,7 @@
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select Expiry Date" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="kUi-PF-GWY">
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select Issue Date" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="kUi-PF-GWY">
<rect key="frame" x="0.0" y="38" width="355" height="43"/>
<constraints>
<constraint firstAttribute="height" constant="43" id="zjl-jG-DW7"/>

24
GMERemittance/Module/New Group/kycForm2/User Interface/View/kycForm2ViewController.swift

@ -24,14 +24,14 @@ class KycForm2Model {
struct KycForm2FieldKeys {
static let bank = "bank"
static let accountNumber = "accountNumber"
static let verificationId = "verificationId"
static let verificationIdNumber = "verificationIdNumber"
static let expiryDate = "expiryDate"
static let sourceOfFund = "sourceOfFund"
static let issueDate = "issueDate"
static let shouldValidateIssueDate = "issueDateValidation"
static let shouldValidateExpiryDate = "expiryDateValidation"
static let accountNumber = "account number"
static let verificationId = "verification id"
static let verificationIdNumber = "verification id number"
static let expiryDate = "expiry date"
static let sourceOfFund = "source of fund"
static let issueDate = "issue date"
static let shouldValidateIssueDate = "issue date validation"
static let shouldValidateExpiryDate = "expiry date validation"
}
class KycForm2ViewController: UIViewController {
@ -46,6 +46,8 @@ class KycForm2ViewController: UIViewController {
static let expiryDateText = "docExpiryDate"
static let issueDateTag = 30001
static let expiryDateTag = 30002
static let errorFont = Fonts.Error.font
static let errorBorderSize = AppConstants.errorBorderWidth
}
// MARK: IBOutlets
@ -260,6 +262,10 @@ class KycForm2ViewController: UIViewController {
private func setupErrorLabels() {
self.errorLabels = [bankErrorLabel, accountNumberErrorLabel, verificationIdErrorLabel, verificationIdNumberErrorLabel, expiryDateErrorLabel,issueDateErrorLabel, sourceOfFundErrorLabel]
self.errorLabels.forEach({
$0.font = Constants.errorFont
})
self.errorLabelsDict =
[
KycForm2FieldKeys.bank: self.bankErrorLabel,
@ -298,7 +304,7 @@ class KycForm2ViewController: UIViewController {
private func showBorder(textfield :UITextField?) {
guard let textfield = textfield else {return}
textfield.layer.borderColor = Constants.stateRedColor.cgColor
textfield.layer.borderWidth = 0.3
textfield.layer.borderWidth = Constants.errorBorderSize
textfield.layer.addShadow(with: Constants.stateRedColor)
}

3
GMERemittance/Module/New Group/kycForm3/User Interface/View/kycForm3ViewController.swift

@ -39,6 +39,7 @@ class KycForm3ViewController: UIViewController {
struct Constants {
static let stateRedColor = UIColor.init(hex: "#EC1C24")
static let clearColor = UIColor.clear
static let errorBorderSize = AppConstants.errorBorderWidth
}
// MARK: IBOutlets
@ -273,7 +274,7 @@ extension KycForm3ViewController {
private func showBorder(view : UIView?) {
guard let _view = view else {return}
_view.layer.borderColor = Constants.stateRedColor.cgColor
_view.layer.borderWidth = 0.3
_view.layer.borderWidth = Constants.errorBorderSize
_view.layer.addShadow(with: Constants.stateRedColor)
}

22
GMERemittance/Module/Register/Application Logic/Interactor/RegisterInteractor.swift

@ -119,6 +119,7 @@ class RegisterInteractor {
if password != confirmPassword {
error = error + "\n Password do not match."
isValid = false
}
}
@ -131,17 +132,21 @@ class RegisterInteractor {
var isValid = true
// user name
if userName.contains("@") {
if !Utility.isValidEmail(email: userName) {error = error + "email must be valid"}
isValid = false
if !Utility.isValidEmail(email: userName) {error = error + "email must be valid"
isValid = false
}
}else {
if ( userName.rangeOfCharacter(from: NSCharacterSet.decimalDigits.inverted) == nil) {
isValid = true
if ( userName.rangeOfCharacter(from: NSCharacterSet.letters) != nil) {
error = error + "username must be either mobile number or email."
isValid = false
}
}
}
if userName.isEmpty { error = error + "Username field is required."; isValid = false }
if userName.isEmpty {
error = error + "Username field is required.";
isValid = false
}
let result = self.isValidPasword(password: password, confirmPassword: confirmPassword)
@ -150,7 +155,10 @@ class RegisterInteractor {
isValid = false
}
if dob.isEmpty { error = error + "\n Date Of Birth field is required."; isValid = false }
if dob.isEmpty {
error = error + "\n Date Of Birth field is required."
isValid = false
}
let _error = NSError.init(domain: "LoginInteractor", code: 0, userInfo: [NSLocalizedDescriptionKey : error])
return (isValid, _error)

3
GMERemittance/Module/SendMoney/SendMoneyExchangeRate/User Interface/View/SendMoneyExchangeRateViewController.swift

@ -164,8 +164,7 @@ class SendMoneyExchangeRateViewController: UIViewController {
let paymentMethod = "WALLET"
let paymentMethodId = self.requestModel?.paymemtMode?.id
let payoutPartner = self.requestModel?.paymemtMode?.payoutPartner
let defaults = UserDefaults.standard
let myUsername = defaults.string(forKey: UserKeys.userId) ?? ""
let myUsername = Utility.getMyUserName()
let bankId = self.requestModel?.bank?.id //bank id if selected bank
let reciepientCountryName = self.reciepient?.country
self.calculate(senderAmt: senderAmount, recieverAmt: reciepientAmount, recieverCurrency: recipientCurrency, recieverCountryName: reciepientCountryName, recieverCountryId: reciepientCountryId, paymentMethod: paymentMethod, paymentMethodId: paymentMethodId, calcBy: calcBy, payoutPartner: payoutPartner, userId: myUsername, bankId: bankId)

1
GMERemittance/Module/SendMoney/SendMoneyReceipt/Module Interface/SendMoneyReceiptModuleInterface.swift

@ -8,4 +8,5 @@
protocol SendMoneyReceiptModuleInterface: class {
func viewIsReady()
func dismiss()
}

4
GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/Presenter/SendMoneyReceiptPresenter.swift

@ -26,6 +26,10 @@ extension SendMoneyReceiptPresenter: SendMoneyReceiptModuleInterface {
self.view?.showLoading()
self.interactor?.viewIsReady()
}
func dismiss() {
self.wireframe?.dismiss()
}
}
// MARK: SendMoneyReceipt interactor output interface

1
GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/View/SendMoneyReceipt.storyboard

@ -644,6 +644,7 @@ Share with concerned party only</string>
<outlet property="addressLabel" destination="Gge-7S-SaJ" id="Sdx-aU-zgy"/>
<outlet property="agentBankLabel" destination="98o-ui-Lmx" id="o9N-GP-4tV"/>
<outlet property="branchLabel" destination="gWt-Rx-LIV" id="vYW-fW-Zia"/>
<outlet property="doneButton" destination="vlt-YJ-pwY" id="lW3-BS-VYD"/>
<outlet property="emailLabel" destination="dxd-Uq-v7o" id="TKs-Xd-Uvt"/>
<outlet property="fullnameLabel" destination="KlR-r5-hsc" id="xd9-yM-Jb0"/>
<outlet property="gmeControlNumberLabel" destination="97m-vq-ytA" id="hB4-OR-PHc"/>

39
GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/View/SendMoneyReceiptViewController.swift

@ -28,11 +28,13 @@ class SendMoneyReceiptViewController: UIViewController {
@IBOutlet weak var gmeControlNumberLabel: UILabel!
@IBOutlet weak var totalAmountHeaderLabel: UILabel!
@IBOutlet weak var doneButton: UIButton!
// MARK: Properties
var presenter: SendMoneyReceiptModuleInterface?
var hudDelegate: HUDStatusDelegate?
var showBackButton = false
var reciept: SendMoneyReciept? {
didSet {
self.showRecipt()
@ -46,6 +48,18 @@ class SendMoneyReceiptViewController: UIViewController {
self.setup()
self.presenter?.viewIsReady()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "Receipt"
self.setupBackButton()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = ""
}
// MARK: IBActions
@ -58,18 +72,25 @@ class SendMoneyReceiptViewController: UIViewController {
private func setup() {
// all setup should be done here
let button = UIBarButtonItem.init(title: nil, style: UIBarButtonItemStyle.plain, target: nil, action: nil)
self.navigationItem.leftBarButtonItem = button
setupBackButton()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "Receipt"
func setupBackButton() {
if showBackButton {
self.navigationController?.navigationItem.hidesBackButton = false
let button = UIBarButtonItem.init(image: #imageLiteral(resourceName: "backIconBlack"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.back))
self.navigationItem.backBarButtonItem = button
self.doneButton.isHidden = true
}
else {
self.navigationController?.navigationItem.hidesBackButton = true
let button = UIBarButtonItem.init(title: nil, style: UIBarButtonItemStyle.plain, target: nil, action: nil)
self.navigationItem.leftBarButtonItem = button
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = ""
@objc private func back() {
self.presenter?.dismiss()
}
private func createMockModel() -> SendMoneyReciept {

13
GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/Wireframe/SendMoneyReceiptWireframe.swift

@ -11,6 +11,7 @@ import UIKit
class SendMoneyReceiptWireframe {
weak var view: UIViewController!
var transactionId: String!
var showBackButton = false
}
extension SendMoneyReceiptWireframe: SendMoneyReceiptWireframeInput {
@ -22,7 +23,7 @@ extension SendMoneyReceiptWireframe: SendMoneyReceiptWireframeInput {
let interactor = SendMoneyReceiptInteractor(service: service, transactionId: self.transactionId)
let presenter = SendMoneyReceiptPresenter()
let viewController = viewControllerFromStoryboard(of: SendMoneyReceiptViewController.self)
viewController.showBackButton = self.showBackButton
viewController.presenter = presenter
interactor.output = presenter
presenter.interactor = interactor
@ -37,4 +38,14 @@ extension SendMoneyReceiptWireframe: SendMoneyReceiptWireframeInput {
self.transactionId = transactionId
self.pushMainView(in: source)
}
func openRecieptWithBackButton(transactionId: String, source: UINavigationController) {
self.showBackButton = true
self.transactionId = transactionId
self.pushMainView(in: source)
}
func dismiss() {
self.view.navigationController?.popViewController(animated: true)
}
}

2
GMERemittance/Module/SendMoney/SendMoneyReceipt/User Interface/Wireframe/SendMoneyReceiptWireframeInput.swift

@ -9,5 +9,5 @@
import Foundation
protocol SendMoneyReceiptWireframeInput: WireframeInput {
func dismiss()
}

2
GMERemittance/Module/SendMoney/SendMoneyVerification/Application Logic/Interactor/SendMoneyVerificationInteractor.swift

@ -81,7 +81,7 @@ extension SendMoneyVerificationInteractor: SendMoneyVerificationInteractorInput
"isAgreed": "TRUE",
"txnPassword": model.transactionPassword ?? "",
"ReceiverAccountNumber": model.accountNumber ?? ""
]
return params

5
GMERemittance/Module/SplashScreen/User Interface/View/SplashScreenViewController.swift

@ -77,7 +77,7 @@ class SplashScreenViewController: UIViewController {
// MARK: Other Functions
private func hideNavBar() {
self.navigationController?.isNavigationBarHidden = false
self.navigationController?.isNavigationBarHidden = true
self.navigationController?.navigationBar.barTintColor = UIColor.init(hex: "ED1C24")
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
@ -97,7 +97,7 @@ class SplashScreenViewController: UIViewController {
view.addGestureRecognizer(leftSwipe)
view.addGestureRecognizer(rightSwipe)
Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(_SplashScreenViewController.updateImage), userInfo: nil, repeats: true)
// Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(_SplashScreenViewController.updateImage), userInfo: nil, repeats: true)
}
@objc func handleSwipes(_ sender: UISwipeGestureRecognizer) {
@ -133,7 +133,6 @@ class SplashScreenViewController: UIViewController {
switch counter {
case 0:
imageViewDotLeft.image = imageDotSelected
imageViewHomeLogo.image = imageFirst
labelHomeDescription.text = descriptionFirst

51
GMERemittance/Module/TransactionHistory/Application Logic/Interactor/TransactionHistoryInteractor.swift

@ -0,0 +1,51 @@
//
// TransactionHistoryInteractor.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class TransactionHistoryInteractor {
// MARK: Properties
weak var output: TransactionHistoryInteractorOutput?
private let service: TransactionHistoryServiceType
// MARK: Initialization
init(service: TransactionHistoryServiceType) {
self.service = service
}
// MARK: Converting entities
}
// MARK: TransactionHistory interactor input interface
extension TransactionHistoryInteractor: TransactionHistoryInteractorInput {
func fetchTransactionHistories(fromDate: String?, toDate: String?) {
let userName = Utility.getMyUserName()
var param: [String: String] = [:]
if let from = fromDate {
param["FromDate"] = from
}
if let to = toDate {
param["ToDate"] = to
}
let parameters = (param.isEmpty ?? true) ? nil : param
self.service.fetchTransactionHistories(user: userName, param: parameters, success: { (model) in
self.output?.show(models: model)
}) { (error) in
self.output?.show(error: error)
}
}
}

16
GMERemittance/Module/TransactionHistory/Application Logic/Interactor/TransactionHistoryInteractorIO.swift

@ -0,0 +1,16 @@
//
// TransactionHistoryInteractorIO.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
protocol TransactionHistoryInteractorInput: class {
func fetchTransactionHistories(fromDate: String?, toDate: String?)
}
protocol TransactionHistoryInteractorOutput: class {
func show(error: Error)
func show(models: [TransactionModel])
}

18
GMERemittance/Module/TransactionHistory/Application Logic/Service/TransactionHistoryService.swift

@ -0,0 +1,18 @@
//
// TransactionHistoryService.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class TransactionHistoryService: TransactionHistoryServiceType {
// MARK: Properties
// MARK: Initialization
// MARK: Data management
}

36
GMERemittance/Module/TransactionHistory/Application Logic/Service/TransactionHistoryServiceType.swift

@ -0,0 +1,36 @@
//
// TransactionHistoryServiceType.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
protocol TransactionHistoryServiceType: class, FetchTransactionHistoryService {
}
protocol FetchTransactionHistoryService: ApiServiceType {
func fetchTransactionHistories(user: String, param: [String: String]?, success: @escaping (([TransactionModel]) -> ()), failure: @escaping ((Error) -> ()))
}
extension FetchTransactionHistoryService {
func fetchTransactionHistories(user: String, param: [String: String]?, success: @escaping (([TransactionModel]) -> ()), failure: @escaping ((Error) -> ())) {
let url = baseUrl + "mobile/tranhistory/" + "\(user)"
self.auth.request(method: .post, url: url, params: param, success: { (response: TransactionModelContainer) in
if (response.errorCode ?? "") == "1" {
let error = NSError.init(domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""])
failure(error)
}else {
let model = response.data
success(model ?? [])
}
}) { (error) in
failure(error)
}
}
}

15
GMERemittance/Module/TransactionHistory/Module Interface/TransactionHistoryModuleInterface.swift

@ -0,0 +1,15 @@
//
// TransactionHistoryModuleInterface.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
protocol TransactionHistoryModuleInterface: class {
func viewIsReady()
func showDetailOf(index: Int)
func search(text: String)
func filterTransaction(type: TransactionModelType)
func fetchTransactionHistories(fromDate: String?, toDate: String?)
}

86
GMERemittance/Module/TransactionHistory/User Interface/Presenter/TransactionHistoryPresenter.swift

@ -0,0 +1,86 @@
//
// TransactionHistoryPresenter.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class TransactionHistoryPresenter {
// MARK: Properties
var models: [TransactionModel] = []
var filteredModels: [TransactionModel] = [] {
didSet {
self.view?.show(models: filteredModels)
}
}
weak var view: TransactionHistoryViewInterface?
var interactor: TransactionHistoryInteractorInput?
var wireframe: TransactionHistoryWireframeInput?
// MARK: Converting entities
}
// MARK: TransactionHistory module interface
extension TransactionHistoryPresenter: TransactionHistoryModuleInterface {
func fetchTransactionHistories(fromDate: String?, toDate: String?) {
self.view?.showLoading()
interactor?.fetchTransactionHistories(fromDate: fromDate, toDate: toDate)
}
func viewIsReady() {
self.fetchTransactionHistories(fromDate: nil, toDate: nil)
}
func filterTransaction(type: TransactionModelType) {
switch type {
case .all:
self.filteredModels = models
case .paid:
self.filteredModels = models.filter({
($0.payStatus ?? "" ) == type.rawValue
})
case .received:
self.filteredModels = models.filter({
($0.payStatus ?? "" ) != TransactionModelType.paid.rawValue
})
}
}
func showDetailOf(index: Int) {
let element = self.models.elementAt(index: index)
guard let id = element?.transactionId else {return}
wireframe?.openReciept(transactionId: id)
}
func search(text: String) {
let searchText = text.lowercased()
self.filteredModels = (models).filter({
model in
return searchText.isEmpty || (model.user ?? "").lowercased().contains(searchText)
}).sorted(by: { (model, _) -> Bool in
return (model.user ?? "").hasPrefix(searchText)
})
}
}
// MARK: TransactionHistory interactor output interface
extension TransactionHistoryPresenter: TransactionHistoryInteractorOutput {
func show(error: Error) {
self.view?.hideLoading()
self.view?.show(error: error.localizedDescription)
}
func show(models: [TransactionModel]) {
self.view?.hideLoading()
self.models = models
self.filteredModels = self.models
}
}

36
GMERemittance/Module/TransactionHistory/User Interface/View/Cell/TransactionHistoryTableViewCell.swift

@ -0,0 +1,36 @@
//
// TransactionHistoryTableViewCell.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class TransactionHistoryTableViewCell: UITableViewCell {
@IBOutlet weak var bgView: UIView!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var amountLabel: UILabel!
@IBOutlet weak var paymentMethodLabel: UILabel!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var transactionNumberLabel: UILabel!
var model: TransactionModel?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
func setup() {
self.dateLabel.text = model?.sendDate
self.amountLabel.text = model?.pAmt
self.paymentMethodLabel.text = model?.payOutMode
self.nameLabel.text = model?.user
self.transactionNumberLabel.text = model?.controlNumber // or transactionId ?? I wonder.
}
}

88
GMERemittance/Module/TransactionHistory/User Interface/View/DatePickerViewController.swift

@ -0,0 +1,88 @@
//
// DatePickerViewController.swift
// GMERemittance
//
// Created by gme_2 on 01/10/2018.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class DatePickerViewController: UIViewController {
@IBOutlet weak var fromTextfield: UITextField!
@IBOutlet weak var toTextfield: UITextField!
var completion: ((_ from: String?, _ to: String?) -> ())?
var fromDate: String?
var toDate: String?
var _fromDate: Date? {
didSet {
self.toDatePicker.minimumDate = _fromDate
self.toDatePicker.maximumDate = Date()
}
}
var _toDate: Date?
let fromDatePicker = UIDatePicker()
let toDatePicker = UIDatePicker()
override func viewDidLoad() {
super.viewDidLoad()
self.setupToDatePicker()
self.setupFromDatePicker()
self.fromDatePicker.date = Date()
self.handleFromDatePicker(sender: fromDatePicker)
// Do any additional setup after loading the view.
}
// IBActions
@IBAction func cancel(_ sender: Any) {
self.view.endEditing(true)
self.dismiss(animated: true, completion: nil)
}
@IBAction func searcg(_ sender: UIButton) {
self.view.endEditing(true)
self.dismiss(animated: true, completion: {
self.completion?(self.fromDate, self.toDate)
})
}
// private functions
private func setupFromDatePicker() {
self.fromDatePicker.datePickerMode = .date
self.fromTextfield.inputView = fromDatePicker
fromDatePicker.maximumDate = Date()
self.fromDatePicker.addTarget(self, action: #selector(handleFromDatePicker(sender:)), for: .valueChanged)
}
@objc private func handleFromDatePicker(sender: UIDatePicker) {
self._fromDate = sender.date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = AppConstants.dateFormat
let date = dateFormatter.string(from: sender.date)
self.fromTextfield.text = date
self.fromDate = date
}
private func setupToDatePicker() {
self.toDatePicker.datePickerMode = .date
self.toTextfield.inputView = toDatePicker
toDatePicker.maximumDate = self._fromDate
self.toDatePicker.addTarget(self, action: #selector(handleToDatePicker(sender:)), for: .valueChanged)
}
@objc private func handleToDatePicker(sender: UIDatePicker) {
self._toDate = sender.date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = AppConstants.dateFormat
let date = dateFormatter.string(from: sender.date)
self.toTextfield.text = date
self.toDate = date
}
}

261
GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistory.storyboard

@ -0,0 +1,261 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
<array key="SanFranciscoDisplay-Medium.otf">
<string>SanFranciscoDisplay-Medium</string>
</array>
<array key="SanFranciscoDisplay-Regular.otf">
<string>SanFranciscoDisplay-Regular</string>
</array>
</customFonts>
<scenes>
<!--Transaction History View Controller-->
<scene sceneID="iJh-Id-NRj">
<objects>
<viewController storyboardIdentifier="TransactionHistoryViewController" id="GvJ-2t-mHS" customClass="TransactionHistoryViewController" customModule="GMERemittance" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="okN-00-TGZ">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lJa-Eg-GAR">
<rect key="frame" x="0.0" y="20" width="375" height="647"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="96J-o9-k7w">
<rect key="frame" x="0.0" y="0.0" width="375" height="50"/>
<subviews>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Search..." textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Y2X-bs-0NT">
<rect key="frame" x="15" y="6" width="311" height="30"/>
<color key="textColor" red="0.29019607843137252" green="0.29019607843137252" blue="0.29019607843137252" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JqT-TG-Aud">
<rect key="frame" x="341" y="10" width="24" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="24" id="nX3-O3-DI5"/>
<constraint firstAttribute="height" constant="22" id="zsX-3M-5o5"/>
</constraints>
<state key="normal" image="ic_calender"/>
<connections>
<action selector="openSearchFilter:" destination="GvJ-2t-mHS" eventType="touchUpInside" id="FZs-TO-ZeK"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.97647058819999999" green="0.97647058819999999" blue="0.97647058819999999" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="JqT-TG-Aud" secondAttribute="trailing" constant="10" id="2AF-eX-7SF"/>
<constraint firstItem="JqT-TG-Aud" firstAttribute="top" secondItem="96J-o9-k7w" secondAttribute="top" constant="10" id="ASS-yS-X7U"/>
<constraint firstAttribute="height" constant="50" id="diQ-UJ-UOv"/>
<constraint firstItem="JqT-TG-Aud" firstAttribute="leading" secondItem="Y2X-bs-0NT" secondAttribute="trailing" constant="15" id="fNs-fn-Erq"/>
<constraint firstItem="Y2X-bs-0NT" firstAttribute="centerY" secondItem="JqT-TG-Aud" secondAttribute="centerY" id="oxC-p9-gXb"/>
<constraint firstItem="Y2X-bs-0NT" firstAttribute="leading" secondItem="96J-o9-k7w" secondAttribute="leading" constant="15" id="per-7D-FsR"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Lab-Ej-i1M">
<rect key="frame" x="0.0" y="48" width="375" height="599"/>
<subviews>
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="Nqp-Xe-KAa">
<rect key="frame" x="16" y="14" width="343" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="29" id="tei-l3-h4f"/>
</constraints>
<segments>
<segment title="All"/>
<segment title="Sent"/>
<segment title="Delivered"/>
</segments>
<color key="tintColor" red="0.92549019610000005" green="0.10980392160000001" blue="0.14117647059999999" alpha="1" colorSpace="calibratedRGB"/>
<connections>
<action selector="segmentChanged:" destination="GvJ-2t-mHS" eventType="valueChanged" id="cYL-Zr-Bqg"/>
</connections>
</segmentedControl>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="V5c-xg-UKz">
<rect key="frame" x="10" y="83" width="355" height="516"/>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="TransactionHistoryTableViewCell" rowHeight="86" id="Atv-Nn-ubf" customClass="TransactionHistoryTableViewCell" customModule="GMERemittance" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="355" height="86"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Atv-Nn-ubf" id="ObJ-hd-ZFd">
<rect key="frame" x="0.0" y="0.0" width="355" height="86"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bIG-Mk-oNb">
<rect key="frame" x="5" y="5" width="345" height="76"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" verticalCompressionResistancePriority="751" text="Tue, 19/12/2017" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lTb-Co-nsv">
<rect key="frame" x="20" y="8" width="77.5" height="14.5"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="12"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="200" verticalCompressionResistancePriority="700" text="To: Dhan Singh Saud" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p2g-GW-5Xg">
<rect key="frame" x="20" y="30" width="226.5" height="13"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="18"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" verticalCompressionResistancePriority="751" text="Cash Payment" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nbJ-vS-KkN">
<rect key="frame" x="20" y="53" width="74" height="14.5"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="12"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Amount" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ouw-tA-MfC">
<rect key="frame" x="292" y="8" width="41" height="14.5"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="12"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Transacton No. 10004015" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oBB-nk-OGM">
<rect key="frame" x="203.5" y="53" width="129.5" height="14.5"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="12"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="255" verticalHuggingPriority="251" horizontalCompressionResistancePriority="755" text="-1,000,000" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dow-0z-Sq7">
<rect key="frame" x="251.5" y="26" width="81.5" height="21.5"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="18"/>
<color key="textColor" red="0.92941176469999998" green="0.10980392160000001" blue="0.14117647059999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.84999999999999998" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="Dow-0z-Sq7" firstAttribute="centerY" secondItem="p2g-GW-5Xg" secondAttribute="centerY" id="5lZ-gY-o6B"/>
<constraint firstAttribute="trailing" secondItem="Dow-0z-Sq7" secondAttribute="trailing" constant="12" id="Bdw-rw-rSH"/>
<constraint firstItem="Ouw-tA-MfC" firstAttribute="centerY" secondItem="lTb-Co-nsv" secondAttribute="centerY" id="JqH-Z3-EeB"/>
<constraint firstItem="nbJ-vS-KkN" firstAttribute="leading" secondItem="bIG-Mk-oNb" secondAttribute="leading" constant="20" id="McN-gl-bEy"/>
<constraint firstAttribute="bottom" secondItem="oBB-nk-OGM" secondAttribute="bottom" constant="8.5" id="Mwr-xj-zbX"/>
<constraint firstItem="oBB-nk-OGM" firstAttribute="centerY" secondItem="nbJ-vS-KkN" secondAttribute="centerY" id="Prt-Y0-3AA"/>
<constraint firstItem="lTb-Co-nsv" firstAttribute="leading" secondItem="bIG-Mk-oNb" secondAttribute="leading" constant="20" id="Z54-TR-cJr"/>
<constraint firstItem="Dow-0z-Sq7" firstAttribute="leading" secondItem="p2g-GW-5Xg" secondAttribute="trailing" constant="5" id="ahj-nt-OED"/>
<constraint firstAttribute="bottom" secondItem="nbJ-vS-KkN" secondAttribute="bottom" constant="8.5" id="gG0-rO-dMM"/>
<constraint firstItem="nbJ-vS-KkN" firstAttribute="top" secondItem="p2g-GW-5Xg" secondAttribute="bottom" constant="10" id="kjc-zN-coF"/>
<constraint firstAttribute="trailing" secondItem="oBB-nk-OGM" secondAttribute="trailing" constant="12" id="mAv-Vf-M5p"/>
<constraint firstItem="p2g-GW-5Xg" firstAttribute="leading" secondItem="bIG-Mk-oNb" secondAttribute="leading" constant="20" id="o7I-ml-XlB"/>
<constraint firstAttribute="trailing" secondItem="Ouw-tA-MfC" secondAttribute="trailing" constant="12" id="vMD-kU-WcD"/>
<constraint firstItem="lTb-Co-nsv" firstAttribute="top" secondItem="bIG-Mk-oNb" secondAttribute="top" constant="8.5" id="wAP-nC-iG4"/>
<constraint firstItem="p2g-GW-5Xg" firstAttribute="top" secondItem="lTb-Co-nsv" secondAttribute="bottom" constant="8" id="wYa-nj-Syb"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="bIG-Mk-oNb" secondAttribute="bottom" constant="5" id="FmX-CZ-b2f"/>
<constraint firstItem="bIG-Mk-oNb" firstAttribute="top" secondItem="ObJ-hd-ZFd" secondAttribute="top" constant="5" id="a21-JC-koI"/>
<constraint firstAttribute="trailing" secondItem="bIG-Mk-oNb" secondAttribute="trailing" constant="5" id="fz5-MX-a0d"/>
<constraint firstItem="bIG-Mk-oNb" firstAttribute="leading" secondItem="ObJ-hd-ZFd" secondAttribute="leading" constant="5" id="y7r-FB-l56"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="amountLabel" destination="Dow-0z-Sq7" id="VvU-oA-Byh"/>
<outlet property="bgView" destination="bIG-Mk-oNb" id="863-hd-Txp"/>
<outlet property="dateLabel" destination="lTb-Co-nsv" id="lHC-Tm-REr"/>
<outlet property="nameLabel" destination="p2g-GW-5Xg" id="tqe-cU-TkP"/>
<outlet property="paymentMethodLabel" destination="nbJ-vS-KkN" id="2ny-pt-u6Z"/>
<outlet property="transactionNumberLabel" destination="oBB-nk-OGM" id="q3t-3h-Xo0"/>
</connections>
</tableViewCell>
</prototypes>
</tableView>
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Rah-XK-yIo">
<rect key="frame" x="16" y="43" width="343" height="35"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="W5a-gp-mdv">
<rect key="frame" x="0.0" y="0.0" width="164" height="35"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="16"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eFC-pC-p6h">
<rect key="frame" x="169" y="0.0" width="5.5" height="35"/>
<constraints>
<constraint firstAttribute="width" constant="5.5" id="AYn-tF-Ijc"/>
</constraints>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AHn-8d-aGF">
<rect key="frame" x="179.5" y="0.0" width="163.5" height="35"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="16"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="35" id="hJN-CB-9IL"/>
<constraint firstItem="W5a-gp-mdv" firstAttribute="width" secondItem="AHn-8d-aGF" secondAttribute="width" id="oUq-E2-hOL"/>
</constraints>
</stackView>
</subviews>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="V5c-xg-UKz" firstAttribute="leading" secondItem="Lab-Ej-i1M" secondAttribute="leading" constant="10" id="19B-2c-AKi"/>
<constraint firstItem="Rah-XK-yIo" firstAttribute="top" secondItem="Nqp-Xe-KAa" secondAttribute="bottom" id="Fi6-rY-lgc"/>
<constraint firstItem="Rah-XK-yIo" firstAttribute="trailing" secondItem="Nqp-Xe-KAa" secondAttribute="trailing" id="L6M-Gp-g7g"/>
<constraint firstAttribute="bottom" secondItem="V5c-xg-UKz" secondAttribute="bottom" id="bgE-O3-gDE"/>
<constraint firstAttribute="trailing" secondItem="Nqp-Xe-KAa" secondAttribute="trailing" constant="16" id="dJJ-PA-IBF"/>
<constraint firstItem="Rah-XK-yIo" firstAttribute="leading" secondItem="Nqp-Xe-KAa" secondAttribute="leading" id="meW-v8-DAo"/>
<constraint firstItem="Nqp-Xe-KAa" firstAttribute="top" secondItem="Lab-Ej-i1M" secondAttribute="top" constant="14" id="pRo-d7-cki"/>
<constraint firstItem="V5c-xg-UKz" firstAttribute="top" secondItem="Rah-XK-yIo" secondAttribute="bottom" constant="5" id="q7k-Xg-mTd"/>
<constraint firstAttribute="trailing" secondItem="V5c-xg-UKz" secondAttribute="trailing" constant="10" id="rnJ-w4-OL3"/>
<constraint firstItem="Nqp-Xe-KAa" firstAttribute="leading" secondItem="Lab-Ej-i1M" secondAttribute="leading" constant="16" id="voS-P3-7PY"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="Lab-Ej-i1M" secondAttribute="trailing" id="52x-nW-Pbv"/>
<constraint firstAttribute="trailing" secondItem="96J-o9-k7w" secondAttribute="trailing" id="Hab-wU-P4e"/>
<constraint firstItem="96J-o9-k7w" firstAttribute="top" secondItem="lJa-Eg-GAR" secondAttribute="top" id="IOY-z0-Jlv"/>
<constraint firstItem="Lab-Ej-i1M" firstAttribute="leading" secondItem="lJa-Eg-GAR" secondAttribute="leading" id="KdC-we-U6d"/>
<constraint firstItem="96J-o9-k7w" firstAttribute="leading" secondItem="lJa-Eg-GAR" secondAttribute="leading" id="QfN-VG-5Ch"/>
<constraint firstItem="Lab-Ej-i1M" firstAttribute="top" secondItem="96J-o9-k7w" secondAttribute="bottom" constant="-2" id="U6r-XM-Zzj"/>
<constraint firstAttribute="bottom" secondItem="Lab-Ej-i1M" secondAttribute="bottom" id="ngK-Su-wfA"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="lJa-Eg-GAR" firstAttribute="trailing" secondItem="p2D-KN-s9L" secondAttribute="trailing" id="WXR-eI-zww"/>
<constraint firstItem="lJa-Eg-GAR" firstAttribute="leading" secondItem="p2D-KN-s9L" secondAttribute="leading" id="bHd-K7-gbE"/>
<constraint firstItem="lJa-Eg-GAR" firstAttribute="top" secondItem="p2D-KN-s9L" secondAttribute="top" id="vR8-Ls-hba"/>
<constraint firstItem="lJa-Eg-GAR" firstAttribute="bottom" secondItem="p2D-KN-s9L" secondAttribute="bottom" id="xVz-8x-JrH"/>
</constraints>
<viewLayoutGuide key="safeArea" id="p2D-KN-s9L"/>
</view>
<connections>
<outlet property="dateRangeLabelHeightConstraint" destination="hJN-CB-9IL" id="whx-Hw-6dG"/>
<outlet property="fromDateLabel" destination="W5a-gp-mdv" id="3j3-id-7Zc"/>
<outlet property="searchTextField" destination="Y2X-bs-0NT" id="Q9B-ie-seX"/>
<outlet property="segmentedControl" destination="Nqp-Xe-KAa" id="xLd-qf-mMh"/>
<outlet property="tableView" destination="V5c-xg-UKz" id="FbE-4L-pJk"/>
<outlet property="toDateLabel" destination="AHn-8d-aGF" id="J3c-pf-B14"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="pCp-ps-wXp" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="631" y="76"/>
</scene>
</scenes>
<resources>
<image name="ic_calender" width="25" height="25"/>
</resources>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</document>

157
GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryDatePicker.storyboard

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
<array key="SanFranciscoDisplay-Regular.otf">
<string>SanFranciscoDisplay-Regular</string>
</array>
<array key="SanFranciscoText-Regular.otf">
<string>SanFranciscoText-Regular</string>
</array>
</customFonts>
<scenes>
<!--Date Picker View Controller-->
<scene sceneID="iYG-BI-6pQ">
<objects>
<viewController storyboardIdentifier="DatePickerViewController" modalTransitionStyle="crossDissolve" modalPresentationStyle="overCurrentContext" id="d6i-cC-L4t" customClass="DatePickerViewController" customModule="GMERemittance" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="bQE-Xw-KV7">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ULD-Eu-tB1">
<rect key="frame" x="16" y="212" width="343" height="243"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="From" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="egs-MP-XU0">
<rect key="frame" x="16" y="25" width="33" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select start date" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="pCR-cq-obj">
<rect key="frame" x="16" y="53" width="308" height="43"/>
<constraints>
<constraint firstAttribute="height" constant="43" id="Dk4-ZC-Ey4"/>
</constraints>
<color key="textColor" red="0.29019607843137252" green="0.29019607843137252" blue="0.29019607843137252" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="To" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8R4-ao-hRh">
<rect key="frame" x="16" y="107" width="15.5" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select end date" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="I48-21-OzR">
<rect key="frame" x="16" y="135" width="308" height="43"/>
<constraints>
<constraint firstAttribute="height" constant="43" id="3EU-b3-51N"/>
</constraints>
<color key="textColor" red="0.29019607843137252" green="0.29019607843137252" blue="0.29019607843137252" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
</textField>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nPo-RO-gkQ">
<rect key="frame" x="0.0" y="200" width="343" height="1"/>
<color key="backgroundColor" red="0.7843137255" green="0.78039215689999997" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="e5f-OB-PCo"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aSy-Xt-xYB">
<rect key="frame" x="0.0" y="201" width="343" height="42"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="1" translatesAutoresizingMaskIntoConstraints="NO" id="bCn-Ov-est">
<rect key="frame" x="0.0" y="0.0" width="343" height="42"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="d6F-Zw-V5J">
<rect key="frame" x="0.0" y="0.0" width="171" height="42"/>
<color key="backgroundColor" red="0.90980392160000001" green="0.90980392160000001" blue="0.90980392160000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="17"/>
<state key="normal" title="Cancel">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="cancel:" destination="d6i-cC-L4t" eventType="touchUpInside" id="k5O-nR-fMk"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rgV-Oy-aLC">
<rect key="frame" x="172" y="0.0" width="171" height="42"/>
<color key="backgroundColor" red="0.90980392160000001" green="0.90980392160000001" blue="0.90980392160000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="17"/>
<state key="normal" title="Search">
<color key="titleColor" red="0.92549019610000005" green="0.10980392160000001" blue="0.14117647059999999" alpha="0.90000000000000002" colorSpace="calibratedRGB"/>
</state>
<connections>
<action selector="searcg:" destination="d6i-cC-L4t" eventType="touchUpInside" id="Dj2-nZ-Hs4"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.90980392160000001" green="0.2705078125" blue="0.90980392160000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</stackView>
</subviews>
<color key="backgroundColor" red="0.7843137255" green="0.78039215689999997" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="bCn-Ov-est" secondAttribute="bottom" id="0Sh-Ug-bQu"/>
<constraint firstItem="bCn-Ov-est" firstAttribute="leading" secondItem="aSy-Xt-xYB" secondAttribute="leading" id="5yT-pJ-H5B"/>
<constraint firstAttribute="trailing" secondItem="bCn-Ov-est" secondAttribute="trailing" id="RBp-Nm-PWi"/>
<constraint firstItem="bCn-Ov-est" firstAttribute="top" secondItem="aSy-Xt-xYB" secondAttribute="top" id="Zjm-uS-Jfa"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="0.90980392160000001" green="0.90980392160000001" blue="0.90980392160000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="8R4-ao-hRh" firstAttribute="leading" secondItem="ULD-Eu-tB1" secondAttribute="leading" constant="16" id="0LV-ar-87s"/>
<constraint firstItem="8R4-ao-hRh" firstAttribute="top" secondItem="pCR-cq-obj" secondAttribute="bottom" constant="11" id="0oF-Hk-lvr"/>
<constraint firstAttribute="trailing" secondItem="pCR-cq-obj" secondAttribute="trailing" constant="19" id="413-CZ-J8T"/>
<constraint firstAttribute="trailing" secondItem="nPo-RO-gkQ" secondAttribute="trailing" id="AFU-Hr-KmU"/>
<constraint firstAttribute="bottom" secondItem="aSy-Xt-xYB" secondAttribute="bottom" id="BTL-N4-Ozp"/>
<constraint firstItem="pCR-cq-obj" firstAttribute="leading" secondItem="ULD-Eu-tB1" secondAttribute="leading" constant="16" id="Eac-MA-GgN"/>
<constraint firstAttribute="trailing" secondItem="I48-21-OzR" secondAttribute="trailing" constant="19" id="FpV-8q-7uU"/>
<constraint firstItem="I48-21-OzR" firstAttribute="leading" secondItem="ULD-Eu-tB1" secondAttribute="leading" constant="16" id="KmQ-gF-QZu"/>
<constraint firstItem="aSy-Xt-xYB" firstAttribute="leading" secondItem="ULD-Eu-tB1" secondAttribute="leading" id="LVI-hw-VsL"/>
<constraint firstItem="egs-MP-XU0" firstAttribute="top" secondItem="ULD-Eu-tB1" secondAttribute="top" constant="25" id="OH4-Ni-ZY1"/>
<constraint firstItem="I48-21-OzR" firstAttribute="top" secondItem="8R4-ao-hRh" secondAttribute="bottom" constant="11" id="QPH-PK-huz"/>
<constraint firstItem="nPo-RO-gkQ" firstAttribute="leading" secondItem="ULD-Eu-tB1" secondAttribute="leading" id="SH3-Wr-k5R"/>
<constraint firstAttribute="height" constant="243" id="USC-vh-uuz"/>
<constraint firstItem="egs-MP-XU0" firstAttribute="leading" secondItem="ULD-Eu-tB1" secondAttribute="leading" constant="16" id="Z4f-ia-o2g"/>
<constraint firstItem="pCR-cq-obj" firstAttribute="top" secondItem="egs-MP-XU0" secondAttribute="bottom" constant="11" id="bl6-pu-TZF"/>
<constraint firstItem="aSy-Xt-xYB" firstAttribute="top" secondItem="nPo-RO-gkQ" secondAttribute="bottom" id="kXh-ad-lTJ"/>
<constraint firstAttribute="trailing" secondItem="aSy-Xt-xYB" secondAttribute="trailing" id="mQH-fh-PdD"/>
<constraint firstItem="nPo-RO-gkQ" firstAttribute="top" secondItem="I48-21-OzR" secondAttribute="bottom" constant="22" id="n5T-gB-JvY"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" white="0.29024367559523806" alpha="0.55325704225352113" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<gestureRecognizers/>
<constraints>
<constraint firstItem="ULD-Eu-tB1" firstAttribute="centerY" secondItem="bQE-Xw-KV7" secondAttribute="centerY" id="K3C-Xo-Dj4"/>
<constraint firstItem="OTz-yN-Foh" firstAttribute="trailing" secondItem="ULD-Eu-tB1" secondAttribute="trailing" constant="16" id="WWg-39-nhB"/>
<constraint firstItem="ULD-Eu-tB1" firstAttribute="leading" secondItem="OTz-yN-Foh" secondAttribute="leading" constant="16" id="zgz-ev-N5r"/>
</constraints>
<viewLayoutGuide key="safeArea" id="OTz-yN-Foh"/>
</view>
<connections>
<outlet property="fromTextfield" destination="pCR-cq-obj" id="rgN-1c-pJb"/>
<outlet property="toTextfield" destination="I48-21-OzR" id="nBT-06-403"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="FmM-Wk-2zF" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="7265" y="-236"/>
</scene>
</scenes>
</document>

218
GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryViewController.swift

@ -0,0 +1,218 @@
//
// TransactionHistoryViewController.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
enum TransactionModelType: String {
case paid = "Paid"
case all = "all"
case received = "received"
}
class TransactionHistoryViewController: UIViewController {
enum SegmentIndex: Int {
case all = 0
case sent
case delivered
}
struct Constant {
static let heightOfDateRangeLabel: CGFloat = 35
}
@IBOutlet weak var fromDateLabel: UILabel!
@IBOutlet weak var toDateLabel: UILabel!
// MARK: IBOutlets
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var dateRangeLabelHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var searchTextField: UITextField!
// MARK: Properties
var from: String?
var to: String?
var transactions: [TransactionModel] = [] {
didSet {
self.tableView.reloadData()
guard let fromDate = from, let toDate = to else {
self.dateRangeLabelHeightConstraint.constant = 0
return
}
self.fromDateLabel.text = self.getHUmanReadableDate(date: fromDate)
self.toDateLabel.text = self.getHUmanReadableDate(date: toDate)
UIView.animate(withDuration: 0.33, animations: {
self.dateRangeLabelHeightConstraint.constant = Constant.heightOfDateRangeLabel
})
}
}
var transactionType: TransactionModelType? {
didSet {
// filter for transaction type
if self.transactionType != oldValue {
guard let type = self.transactionType else {return}
self.presenter?.filterTransaction(type: type)
}
}
}
var presenter: TransactionHistoryModuleInterface?
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
presenter?.viewIsReady()
setupNavigation()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "Transaction History"
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = ""
}
// MARK: IBActions
@IBAction func openSearchFilter(_ sender: UIButton) {
// open search filter
let viewController = UIStoryboard.init(name: "TransactionHistoryDatePicker", bundle: nil).instantiateViewController(withIdentifier: "DatePickerViewController") as! DatePickerViewController
viewController.completion = self.selectedDate
self.present(viewController, animated: true, completion: nil)
}
@IBAction func segmentChanged(_ sender: UISegmentedControl) {
guard let index = SegmentIndex(rawValue: sender.selectedSegmentIndex) else {return}
switch index {
case .all:
self.transactionType = .all
case .sent:
self.transactionType = .received
case .delivered:
self.transactionType = .paid
}
}
// MARK: Other Functions
private func selectedDate(from: String?, to: String?) {
self.from = from
self.to = to
guard let fromDate = from, let toDate = to else {return}
self.presenter?.fetchTransactionHistories(fromDate: fromDate, toDate: toDate)
}
private func getHUmanReadableDate(date: String?) -> String? {
if let date = DateFormatter.toDate(dateString: date ?? "", format: AppConstants.dateFormat) {
let dateString = DateFormatter.toString(date: date, format: AppConstants.humanReadableDateFormat)
return dateString
}
return nil
}
private func setup() {
// all setup should be done here
setupSearchTextField()
setupDelegates()
self.transactionType = .all
self.dateRangeLabelHeightConstraint.constant = 0
}
private func setupSearchTextField() {
let imageview = UIImageView(image: #imageLiteral(resourceName: "ic_search"))
self.searchTextField.leftView = imageview
self.searchTextField.leftViewMode = .always
self.searchTextField.addTarget(self, action: #selector(search(sender:)), for: UIControlEvents.editingChanged)
}
@objc func search(sender: UITextField) {
let searchText = sender.text!
self.presenter?.search(text: searchText)
}
private func setupDelegates() {
self.tableView.delegate = self
self.tableView.dataSource = self
}
private func setupNavigation() {
var backBtnImage = #imageLiteral(resourceName: "backIconBlack")
backBtnImage = backBtnImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
self.navigationController!.navigationBar.backIndicatorImage = backBtnImage
self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backBtnImage
self.navigationController?.navigationBar.barTintColor = UIColor.white
}
}
// MARK: TransactionHistoryViewInterface
extension TransactionHistoryViewController: TransactionHistoryViewInterface {
func showLoading() {
self.showProgressHud()
}
func hideLoading() {
self.hideProgressHud()
}
func show(error: String) {
self.alert(message: error)
}
func show(models: [TransactionModel]) {
self.transactions = models
}
}
// MARK: TableViewDelegate
extension TransactionHistoryViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.presenter?.showDetailOf(index: indexPath.row)
}
}
// MARK: TableViewDatasource
extension TransactionHistoryViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return transactions.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TransactionHistoryTableViewCell") as! TransactionHistoryTableViewCell
cell.model = self.transactions.elementAt(index: indexPath.row)
cell.setup()
return cell
}
}
extension DateFormatter {
static func toDate(dateString: String, format: String = AppConstants.dateFormat) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
// dateFormatter.locale = Locale(identifier: "en_Us")
return dateFormatter.date(from: dateString)
}
static func toString(date: Date, format: String = AppConstants.humanReadableDateFormat) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
// dateFormatter.locale = Locale(identifier: "en_US")
return dateFormatter.string(from: date)
}
}

14
GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryViewInterface.swift

@ -0,0 +1,14 @@
//
// TransactionHistoryViewInterface.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
protocol TransactionHistoryViewInterface: class {
func showLoading()
func hideLoading()
func show(error: String)
func show(models: [TransactionModel])
}

43
GMERemittance/Module/TransactionHistory/User Interface/Wireframe/TransactionHistoryWireframe.swift

@ -0,0 +1,43 @@
//
// TransactionHistoryWireframe.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class TransactionHistoryWireframe {
weak var view: UIViewController!
let reciptWireframe = SendMoneyReceiptWireframe()
}
extension TransactionHistoryWireframe: TransactionHistoryWireframeInput {
var storyboardName: String {return "TransactionHistory"}
func getMainView() -> UIViewController {
let service = TransactionHistoryService()
let interactor = TransactionHistoryInteractor(service: service)
let presenter = TransactionHistoryPresenter()
let viewController = viewControllerFromStoryboard(of: TransactionHistoryViewController.self)
viewController.presenter = presenter
interactor.output = presenter
presenter.interactor = interactor
presenter.wireframe = self
presenter.view = viewController
self.view = viewController
return viewController
}
func openReciept(transactionId: String) {
if let navigation = self.view.navigationController {
reciptWireframe.openRecieptWithBackButton(transactionId: transactionId, source: navigation)
}
}
}

13
GMERemittance/Module/TransactionHistory/User Interface/Wireframe/TransactionHistoryWireframeInput.swift

@ -0,0 +1,13 @@
//
// TransactionHistoryWireframeInput.swift
// GMERemittance
//
// Created by gme_2 on 28/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
protocol TransactionHistoryWireframeInput: WireframeInput {
func openReciept(transactionId: String)
}

2
GMERemittance/TrackTransfer/TrackTransfer.storyboard

@ -428,7 +428,7 @@
<rect key="frame" x="0.0" y="0.0" width="355" height="250"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="In Process" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eeS-49-KIn">
<rect key="frame" x="122.5" y="22" width="110.5" height="29"/>
<rect key="frame" x="123" y="22" width="110.5" height="29"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Semibold" family="San Francisco Display" pointSize="24"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>

34
GMERemittance/TrackTransfer/Transaction.swift

@ -8,6 +8,40 @@
import Foundation
//"{
//""ErrorCode"": ""0"",
//""Msg"": ""2 paid txn"",
//""Id"": null,
//""Data"": [
//{
//""User"": ""pathaksumitra4@gmail.com"",
//""TranId"": ""100000000"",
//""ControlNo"": ""80654160261"",
//""PayoutAmt"": ""120019.0000"",
//""PCurr"": ""NPR"",
//""CollAmt"": ""1323000.0000"",
//""CollCurr"": ""KRW"",
//""PayStatus"": ""Paid"",
//""PayoutMode"": ""CASH PAYMENT"",
//""SendDate"": ""10/10/2017"",
//""PaidDate"": ""10/10/2017""
//},
//{
//""User"": ""pathaksumitra4@gmail.com"",
//""TranId"": ""100000001"",
//""ControlNo"": ""80205019782"",
//""PayoutAmt"": ""200001.0000"",
//""PCurr"": ""NPR"",
//""CollAmt"": ""2200000.0000"",
//""CollCurr"": ""KRW"",
//""PayStatus"": ""Paid"",
//""PayoutMode"": ""BANK DEPOSIT"",
//""SendDate"": ""10/10/2017"",
//""PaidDate"": ""10/11/2017""
//}
//]
//}"
struct Transaction: Codable {
var transactionId: String!

4
GMERemittance/Transaction/TransactionStatement.storyboard

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="JMv-C0-usj">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="JMv-C0-usj">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
@ -105,7 +105,7 @@
<rect key="frame" x="10" y="53" width="355" height="546"/>
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="transactionStatementCell" rowHeight="86" id="8xm-jU-zFA" customClass="TranscationTableViewCell" customModule="GMERemittance" customModuleProvider="target">
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="TranscationTableViewCell" rowHeight="86" id="8xm-jU-zFA" customClass="TranscationTableViewCell" customModule="GMERemittance" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="355" height="86"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="8xm-jU-zFA" id="aLw-yY-VDD">

3
GMERemittance/Transaction/TranscationTableViewCell.swift

@ -14,7 +14,6 @@ protocol TableViewCellTransactionDelegate : class {
class TranscationTableViewCell: UITableViewCell {
var loadMoreDelegate: TableViewCellTransactionDelegate?
@IBOutlet weak var labelDate: UILabel!
@IBOutlet weak var labelName: UILabel!
@ -24,7 +23,7 @@ class TranscationTableViewCell: UITableViewCell {
@IBOutlet weak var loadMoreButtonOutlet: UIButton!
@IBAction func loadMoreButtonAction(_ sender: Any) {
loadMoreDelegate?.loadMoreButtonAction(sender: self)
}
override func awakeFromNib() {

19
GMERemittance/UrlManager.swift

@ -8,20 +8,25 @@
import Foundation
class UrlManager {
static let sharedInstance = UrlManager()
// 121.156.120.71:5001
let baseURL: String = "http://gmeuat.gmeremit.com:5011/api/v1/"
// let baseURL: String = "http://121.156.120.71:9091/api/v1/"
// let baseURL: String = "http://10.15.18.101:9091/api/v1/"
// let baseSocialURL : String = "http://172.16.4.55:8081/v1/"
var baseURL = ""
let baseSocialURL = ""
let staggingServer = "http://gmeuat.gmeremit.com:5011/api/v1/"
let uatServer = "http://gmeuat.gmeremit.com:5012/api/v1/"
let baseSocialURL : String = "http://10.1.1.171:8080/v1/"
init() {
self.baseURL = isDevelopment ? uatServer : staggingServer
}
// let baseSocialURL : String = "http://172.16.4.55:8081/v1/"
func getSignupURL() -> String {
return baseURL + "users"
}

11
GMERemittance/Utility/AppConstants.swift

@ -12,7 +12,8 @@ import Foundation
class AppConstants {
static let uuid = "uuid"
static let dateFormat = "yyyy-MM-dd"
static let humanReadableDateFormat = "MMM d, yyyy"
static let errorBorderWidth: CGFloat = 0.1
}
enum Devices {
@ -26,7 +27,7 @@ enum Devices {
class Utility {
static func getDeviceModel() -> Devices {
if UIDevice().userInterfaceIdiom == .phone {
switch UIScreen.main.nativeBounds.height {
@ -45,6 +46,12 @@ class Utility {
return .ipad
}
}
static func getMyUserName() -> String {
let defaults = UserDefaults.standard
let myUsername = defaults.string(forKey: UserKeys.userId) ?? ""
return myUsername
}
static func isValidEmail(email: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"

8
GMERemittance/_Home/_Home.storyboard

@ -1156,7 +1156,7 @@
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8WZ-lQ-Im6" userLabel="LoadMoreView">
<rect key="frame" x="0.0" y="0.0" width="375" height="44.5"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7wo-T4-XhL">
<rect key="frame" x="155.5" y="8.5" width="63" height="29"/>
@ -1560,7 +1560,7 @@
<rect key="frame" x="0.0" y="50" width="375" height="617"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ccr" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JsQ-yR-2jU">
<rect key="frame" x="53" y="18" width="121" height="21.5"/>
<rect key="frame" x="53" y="18" width="121" height="21"/>
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="18"/>
<color key="textColor" red="0.92549019610000005" green="0.10980392160000001" blue="0.14117647059999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -1573,13 +1573,13 @@
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="9849192759" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0uy-Jf-gcM">
<rect key="frame" x="53" y="53.5" width="121" height="17"/>
<rect key="frame" x="53" y="53" width="121" height="17"/>
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="sis.ccr@gmail.com" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KaU-d1-nW6">
<rect key="frame" x="53" y="76.5" width="121" height="17"/>
<rect key="frame" x="53" y="76" width="121" height="17"/>
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/>
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>

23
GMERemittance/_Home/_HomeViewController.swift

@ -115,7 +115,7 @@ class _HomeViewController: UIViewController, TableViewCellDelegate, FBSDKSharin
self.tabBarController?.tabBar.isHidden = false
setNavBar()
setActionBarIcons(showNotificationParameter: false)
setActionBarIcons(showNotificationParameter: true)
bindUserStatusToUI()
@ -163,7 +163,14 @@ class _HomeViewController: UIViewController, TableViewCellDelegate, FBSDKSharin
sideMenuController?.showLeftViewAnimated()
}
func isVerifiedUser() -> Bool {
let val = (UserDefaults.standard.object(forKey: UserKeys.verified) as? Bool ) ?? false
print("value is")
print(val)
return val
}
/**
Update User data in view
@ -1364,10 +1371,8 @@ extension _HomeViewController: UICollectionViewDelegate, UICollectionViewDataSou
switch collectionViewMenuIndexArray[indexPath.row] {
case 0:
if isVerifiedUser() {
// self.performSegue(withIdentifier: "recipientList", sender: nil)
// RecipientListViewController
// recipientList
if self.isVerifiedUser() {
let viewcontroller = UIStoryboard.init(name: "RecipientListViewController", bundle: nil).instantiateViewController(withIdentifier: "RecipientListViewController") as! RecipientListViewController
self.navigationController?.pushViewController(viewcontroller, animated: true)
} else {
@ -1392,7 +1397,11 @@ extension _HomeViewController: UICollectionViewDelegate, UICollectionViewDataSou
self.performSegue(withIdentifier: "trackTransfer", sender: nil)
case 4:
self.performSegue(withIdentifier: "transactionStatement", sender: nil)
let wireframe = TransactionHistoryWireframe()
if let navigation = self.navigationController {
wireframe.pushMainView(in: navigation)
}
case 5:
self.alert(message: "This feature is coming soon")

Loading…
Cancel
Save