Диплом: Автоматизация продаж билетов на лекции в организации «Лекторий правое полушарие интроверта»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
78
Рисунок П2.5. Окно процедуры оплаты
79
Рисунок П2.6. Окно ввода данных карты
80
Приложение 3
Листинг программных модулей
import UIKit
import Kingfisher
import SafariServices
import UIKit
import Firebase
import WebKit
import YandexCheckoutPayments
import YandexCheckoutPaymentsApi
import PassKit
import Alamofire
import FirebaseFirestore
import SkeletonView
import Themeable
final class Shared {
static let shared = Shared()
var getCode: String?
}
class Promo {
var code: String
var value: Int
var id: String?
init(dictionary: [String: Any]) {
self.code = dictionary["code"] as! String
self.id = dictionary["id"] as? String
81
self.value = dictionary["value"] as! Int
}
}
class GetPromo {
var code: String
var value: Int
init(dictionary: [String: Any]) {
self.code = dictionary["getCode"] as! String
self.value = dictionary["value"] as! Int
}
}
class CartViewController: UIViewController, SFSafariViewControllerDelegate, UITextFieldDelegate
{
// MARK: - IBOutlet
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var buyButton: UIButton!
@IBOutlet weak var salesLabel: UILabel!
@IBOutlet weak var ticketCountLabel: UILabel!
@IBOutlet weak var cashLabel: UILabel!
@IBOutlet weak var cashView: UIView!
@IBOutlet weak var bonusCountLabel: UILabel!
@IBOutlet weak var bonusTitleLabel: UILabel!
@IBOutlet weak var bonusCountTF: UITextField!
// MARK: - Public
var localCart: [CartApiClient.Cart]?
82
let fireManager = FirebaseManager()
let cartApiClient = CartApiClient()
let payApi = PayApiClient()
var salesValue: Double = 0
var totalCash: Double = 0
var totalPrice = Int()
var bonus = Int()
var usedBonus = Int()
var token: Tokens?
var paymentMethodType: PaymentMethodType?
let userApiClient = UserApiClient()
var db: Firestore!
var status = String()
var id = String()
var invitationСode = ""
var invitationCodeUser = ""
var invitationCodeUid = ""
var getСode = [GetPromo]()
var myPurchase = Bool()
var arrayPromo = [Promo]()
var valueSales = 0
var promoCoreUsd = String()
let paymentNetworks = [PKPaymentNetwork.visa, PKPaymentNetwork.masterCard]
let applePayMerchantID = "merchant.pravoePolusharie"
var transactionId = ""
let date = Date().toMillis()
83
var typeValue = [String]()
var sessionManager: NetworkManager?
func stopAnim() {
[salesLabel, ticketCountLabel, cashLabel].forEach{ $0?.hideSkeleton() }
}
override func viewDidLoad() {
super.viewDidLoad()
setUpTheming()
salesLabel.isSkeletonable = true
ticketCountLabel.isSkeletonable = true
cashLabel.isSkeletonable = true
[salesLabel, ticketCountLabel, cashLabel].forEach{ $0?.showAnimatedGradientSkeleton() }
db = Firestore.firestore()
sessionManager = NetworkManager()
tableView.keyboardDismissMode = .onDrag
bonusCountTF.delegate = self
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), for:
.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
let rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "button.templatedClose"),
style: .done, target: self, action: #selector(goBack))
self.navigationItem.leftBarButtonItem = rightBarButtonItem
84
cartApiClient.getAllCart() {[weak self] (cart) in
guard let `self` = self else { return }
self.localCart = cart
self.stopAnim()
DispatchQueue.main.async {
self.tableView.reloadData()
self.updateResultView()
}
}
userApiClient.getCurrentUser() {[weak self] (user) in
guard let `self` = self else { return }
DispatchQueue.main.async {
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont(name: "Roboto-Bold", size: 14)!]
let attributes2: [NSAttributedString.Key: Any] = [
.font: UIFont(name: "Roboto-Regular", size: 14)!]
let myString = NSMutableAttributedString(string: "\(String(describing: user.bonus ?? 0))",
attributes: attributes)
let myString2 = NSAttributedString(string: " бонусов", attributes: attributes2)
myString.append(myString2)
self.bonusCountLabel.attributedText = myString
self.bonus = user.bonus ?? 0
if user.bonus != 0 {
self.bonusCountTF.isEnabled = true
}else{
self.bonusCountTF.isEnabled = false
}
85
}
}
PromoVoidObject.PromoVoid(arrayPromo: { [weak self] (arrayPromos) in
guard let `self` = self else { return }
self.arrayPromo = arrayPromos
}, invitationСode: { [weak self] (invitationСode) in
guard let `self` = self else { return }
self.invitationСode = invitationСode
}, myPurchase: { [weak self] (bool) in
guard let `self` = self else { return }
self.myPurchase = bool
}) { [weak self] (getСodes) in
guard let `self` = self else { return }
self.getСode = getСodes
}
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
guard let text = textField.text else { return true }
let newLength = text.count + string.count - range.length
return newLength <= 5
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name:
UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name:
UIResponder.keyboardWillHideNotification, object: nil)
86
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
view.endEditing(true)
super.touchesBegan(touches, with: event)
}
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as?
NSValue)?.cgRectValue {
if self.view.frame.origin.y == 0 {
self.view.frame.origin.y -= keyboardSize.height
}
}
}
@objc func keyboardWillHide(notification: NSNotification) {
if self.view.frame.origin.y != 0 {
self.view.frame.origin.y = 0
}
}
@IBAction func bonTF(_ sender: UITextField) {
DispatchQueue.main.async {
self.tableView.reloadData()
87
self.updateResultView()
}
}
@IBAction func presentInfoCount(_ sender: UIButton) {
let alert = UIAlertController(title: "Бонусная система", message: "Получайте 5% в виде
бонусов с любой покупки на нашем сайте! Бонусы являются накопительными, и вы можете
оплачивать ими до 99% стоимости любых наших продуктов.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Отлично!", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
}
@IBAction func salesButtonDidPress(_ sender: UIBarButtonItem) {
let alert = UIAlertController(title: "Получить скидку еще проще - простого", message: "При
покупке 3 или 4 билетов мы дарим скидку 10%\n\nПри покупке 5 и более скидка будет
15%\n\nИ не забудьте использовать промо-коды, все скидки суммируются", preferredStyle:
.alert)
alert.addAction(UIAlertAction(title: "Ок", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
@IBAction func buyButtonDidPress(_ sender: Any) {
PromoVoidObject.presentAlert(viewController: self, saleValue: { [weak self] (saleValue) in
guard let `self` = self else { return }
self.valueSales = saleValue
}, promoCoreUsd: { [weak self] (promoCore) in
guard let `self` = self else { return }
self.promoCoreUsd = promoCore
}, updateResultView: {
self.updateResultView()
}, pay: {
DispatchQueue.main.async {
self.updateResultView()

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")