· 5 years ago · Jul 17, 2020, 07:26 AM
1//
2// TmhOrderConfirmViewController.m
3// Prigorod
4//
5// Created by Стеценко Руслан on 12.05.14.
6// Copyright (c) 2014 Tmh. All rights reserved.
7//
8
9#import "TmhOrderConfirmViewController.h"
10#import "TmhSettings.h"
11#import "TmhHistoryCell.h"
12#import "TmhOrderConfirmInfoCell.h"
13#import "TmhOrderConfirmTicketCell.h"
14#import "TmhOrderConfirmSumCell.h"
15#import "TmhAPI.h"
16#import "UIView+TmhToast.h"
17#import "TmhOrderConfirmTicketCellWithoutPlaces.h"
18#import "AFNetworking/AFNetworking.h"
19#import "TmhDate.h"
20#import "TmhCat.h"
21#import <PassKit/PassKit.h>
22
23#import "NSData+Base64.h"
24#import "NSString+Base64.h"
25#import "NSData+CommonCrypto.h"
26
27#import "TmhBonusConfirmCell.h"
28
29@implementation TmhOrderConfirmViewController
30{
31 TmhOrder *order;
32 TmhSettings *settings;
33 TmhTrainTarif *tarif;
34 TmhTrainTarif *round_tarif;
35 NSArray *tarifs;
36
37 TmhTrainTarif *tarifBack;
38 NSArray *tarifsBack;
39
40 NSArray *arr;
41 NSArray *arrBack;
42 NSArray *round_arr;
43
44 int bag;
45 int pet;
46 int bike;
47
48 int coastsLoaded;
49
50 int ld;
51
52 NSArray *b_types;
53 BOOL alreadyAppeared;
54 int totalCount;
55 int countReserves;
56 BOOL failCosts;
57 BOOL hasDiscount;
58 NSString *discountCost;
59 NSString *discountName;
60 float price;
61 BOOL apple_payed;
62 BOOL apple_stop;
63 BOOL apple_reserved;
64
65 int lgota_count;
66 int lgota_checked;
67 BOOL only_lgota;
68
69 int picker_type;
70
71 NSMutableArray *phones;
72 TmhOrderTicket *lgota_ticket;
73
74 BOOL hasBonus;
75 BOOL canPayBonus;
76 BOOL canBonusPayment;
77 NSDictionary *bonusObject;
78 NSDictionary *backBonusObject;
79 int noMoneyPay; // 1 = Lgota, 2 = Bonus
80}
81
82- (void)customizeInterface
83{
84 self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"line-texture"]];
85 self.nextButton.title = order.method == TmhOrderMethodBuy ? NSLocalizedString(@"METHOD BUY", nil) : NSLocalizedString(@"METHOD REGISTER", nil);
86 self.nextButton.tintColor = UIColor.whiteColor;
87}
88
89- (void)defineVariables
90{
91 settings = [TmhSettings new];
92 hasBonus = ([settings getString:@"bonusUserId"] != nil) && ([[settings getString:@"bonusUserId"] length] > 0);
93 canPayBonus = NO;
94 canBonusPayment = [settings getString:@"canBonusProgramm"] != nil && [[settings getString:@"canBonusProgramm"] isEqualToString:@"1"];
95 hasDiscount = NO;
96 order = settings.order;
97 alreadyAppeared = NO;
98 failCosts = NO;
99 apple_payed = NO;
100 apple_stop = NO;
101 apple_reserved = NO;
102 only_lgota = NO;
103}
104
105- (void)viewDidLoad
106{
107 [super viewDidLoad];
108
109 [self defineVariables];
110 [self customizeInterface];
111 b_types = [settings getBiletTypes];
112 [self.navigationController.view showWait];
113 coastsLoaded = 0;
114 order.PPK = [[TmhSettings new] ppk];
115 ld=0;
116 lgota_count = 0;
117 lgota_checked = 0;
118 for(TmhOrderTicket *tick in order.tickets) {
119 if(tick.type == 666) {
120 lgota_count++;
121 }
122 }
123 NSLog(@"lgota_count = %d", lgota_count);
124 if(lgota_count > 0) {
125 [self loadCheck];
126 return;
127 }
128 [self loadCosts:NO];
129}
130
131- (void)setUpAlertCode
132{
133 picker_type = 6661;
134 UIAlertView * alert = [[UIAlertView alloc] initWithTitle:noMoneyPay==2?@"Оплата бонусами":@"Код из СМС" message:@"Введите код, отправленный вам в СМС сообщении. Запрос кода в СМС возможен не чаще 1 раза в 5 минут." delegate:self cancelButtonTitle:@"Отмена" otherButtonTitles:nil];
135 [alert addButtonWithTitle:@"Продолжить"];
136 alert.alertViewStyle = UIAlertViewStylePlainTextInput;
137 [[alert textFieldAtIndex:0] setKeyboardType:UIKeyboardTypeNumberPad];
138 alert.delegate = self;
139 [alert show];
140}
141
142- (BOOL)onlyLgota
143{
144 BOOL res = YES;
145 for(TmhOrderTicket *tick in order.tickets) {
146 if(tick.type == 666 || tick.type == 777) {
147 if(tick.isBaggage+tick.isAnimal+tick.isBike+tick.isBaggageBack+tick.isAnimalBack+tick.isBikeBack > 0) {
148 res = NO;
149 }
150 } else {
151 res = NO;
152 }
153 }
154 only_lgota = res;
155 return res;
156}
157
158- (void)checkValid
159{
160 lgota_checked++;
161 if(lgota_checked == lgota_count) {
162 if([self onlyLgota]) {
163 for(TmhOrderTicket *tick in order.tickets) {
164 tick.price = 0.0;
165 tick.costs = @[@"0",@"0",@"0"];
166 }
167 if(order.isBack && order.train.type == TmhTrainTypeComfortable)
168 for(TmhOrderTicket *tick in order.backTickets) {
169 tick.price = 0.0;
170 tick.costs = @[@"0",@"0",@"0"];
171 }
172 [self.navigationController.view hideWait];
173 [self.nextButton setEnabled:YES];
174 [self.tableView reloadData];
175 [self loadCosts:NO];
176 } else {
177 [self loadCosts:NO];
178 }
179 }
180}
181
182- (void)checkErrorWitnCode:(NSString *)message
183{
184 [self.navigationController.view hideWait];
185 [self.navigationController.view showErrorWithText:message];
186 [self.nextButton setEnabled:NO];
187
188}
189
190- (void)sendConfirmPhone:(NSString *)phone
191{
192 NSLog(@"sendConfirmPhone %@", phone);
193 [self.navigationController.view showWaitString:@"Отправка"];
194 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
195 NSString *address = @"https://mobile.svrpk.ru/v3.1/api.php";
196 NSDictionary *params = @{
197 @"action": @"send_confirm_code",
198 @"result_type": @"json",
199 @"phone": phone,
200 @"key_client": [[TmhSettings new] key],
201 @"hash_client": [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"],
202 @"ppk_id": [[TmhSettings new] ppk]
203 };
204 NSLog(@"address = %@ params = %@", address, params);
205 [manager GET:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
206
207 [self.navigationController.view hideWait];
208 [[NSUserDefaults standardUserDefaults] setValue:[NSDate new] forKey:@"lgota_time"];
209 NSLog(@"Response of send_confirm_code: %@", responseObject);
210 if(responseObject == nil) {
211 [self.navigationController.view showErrorWithText:@"Ошибка обработки данных"];
212 [self.navigationController popViewControllerAnimated:YES];
213 return;
214 }
215 NSString *res = responseObject[@"ConfirmCodeResult"][@"@attributes"][@"IsSucceeded"];
216 if ([res isEqualToString:@"True"]) {
217 [self setUpAlertCode];
218 } else {
219 [self.navigationController.view showErrorWithText:responseObject[@"ConfirmCodeResult"][@"@attributes"][@"ErrorMessage"]];
220 [self.navigationController popViewControllerAnimated:YES];
221 }
222 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
223 NSLog(@"Erorr: %@", error);
224 [self.navigationController.view hideWait];
225 [self.navigationController.view showErrorWithText:@"Отсутствует интернет соединение"];
226 [self.navigationController popViewControllerAnimated:YES];
227 }];
228}
229
230static NSString *toString(id object) {
231 return [NSString stringWithFormat: @"%@", object];
232}
233
234static NSString *urlEncode(id object) {
235 NSString *string = toString(object);
236 return [string stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
237}
238
239-(NSString*) urlEncodedString:(NSDictionary *)dict {
240 NSMutableArray *parts = [NSMutableArray array];
241 for (id key in dict) {
242 id value = [dict objectForKey: key];
243 NSString *part = [NSString stringWithFormat: @"%@=%@", urlEncode(key), urlEncode(value)];
244 [parts addObject: part];
245 }
246 return [parts componentsJoinedByString: @"&"];
247}
248
249- (void)loadCheck
250{
251 for(TmhOrderTicket *tick in order.tickets) {
252 if(tick.type == 666) {
253 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
254 NSString *address = @"https://mobile.svrpk.ru/v3.1/api.php";
255
256 NSDictionary *params = @{
257 @"action": @"check_profile",
258 @"result_type": @"json",
259 @"key_client": [[TmhSettings new] key],
260 @"hash_client": [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"],
261 @"ppk_id": [[TmhSettings new] ppk],
262 @"personalId": tick.personalId
263 };
264 NSLog(@"params = %@", params);
265 NSString *url = [NSString stringWithFormat:@"%@?%@", address, [self urlEncodedString:params]];
266 NSLog(@"checkurl = %@", url);
267 [manager GET:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
268 NSLog(@"Response of check_profile: %@", responseObject);
269 NSDictionary *attr = responseObject[@"CheckProfileResult"][@"@attributes"];
270 if ([[attr objectForKey:@"IsActive"] isEqualToString:@"True"]) {
271 [self checkValid];
272 }
273 else {
274 [self checkErrorWitnCode:[attr objectForKey:@"ErrorMessage"]];
275 }
276 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
277 NSLog(@"Erorr: %@", error);
278 [self.navigationController.view hideWait];
279 [self.navigationController.view showErrorWithText:@"Ошибка. Отсутствует подключение к интернету."];
280 [self.nextButton setEnabled:NO];
281 }];
282 }
283 }
284}
285
286- (void)onCanceled
287{
288 countReserves++;
289 NSLog(@"reserve canceled. count = %d", countReserves);
290 if(countReserves == totalCount) {
291 [self.navigationController.view hideWait];
292 [self.navigationController.view showErrorWithText:[NSString stringWithFormat:@"Ошибка при %@. Все брони с выбранных мест сняты.", order.method==TmhOrderMethodBuy ? @"оплате" : @"бронировании"]];
293 self.navigationItem.hidesBackButton = NO;
294 [self.navigationController popToRootViewControllerAnimated:YES];
295 }
296
297}
298
299- (void)cancelReserve
300{
301 totalCount = order.tickets.count + (order.isBack ? order.backTickets.count : 0);
302 countReserves = 0;
303 NSLog(@"totalCount = %d", totalCount);
304 for (TmhOrderTicket *ticket in [order.tickets copy]) {
305 NSLog(@"cancel Reserve ID = %@", ticket.reserveId);
306 TmhAPI *api = [TmhAPI new];
307 if(![ticket.placeNumber isEqualToString:@"0"] && ticket.reserveId.length>0) {
308 [api cancelTicket:ticket onSuccess:^{
309 [self onCanceled];
310 } onError:^(int statusCode, NSDictionary *data) {
311 [self onCanceled];
312 }];
313 } else {
314 [self onCanceled];
315 }
316
317 }
318 if(order.isBack)
319 for (TmhOrderTicket *ticket in [order.backTickets copy]) {
320 TmhAPI *api = [TmhAPI new];
321 if(![ticket.placeNumber isEqualToString:@"0"]) {
322 [api cancelTicket:ticket onSuccess:^{
323 [self onCanceled];
324 } onError:^(int statusCode, NSDictionary *data) {
325 [self onCanceled];
326 }];
327 } else {
328 [self onCanceled];
329 }
330
331 }
332 //order.identifier = nil;
333}
334
335- (NSString *)getBiletTypes:(NSString *)name
336{
337 NSDictionary *dict = [settings storageObject:@"trip_categories"];
338 for(NSDictionary *cat in dict) {
339 NSDictionary *obj = cat[@"@attributes"];
340 //if([[obj valueForKey:@"SaleType"] intValue]==1) {
341 NSLog(@"nnname = %@", obj[@"Name"]);
342 TmhCat *item = [[TmhCat alloc] init];
343 if([obj[@"Name"] isEqualToString:name])
344 return obj[@"Id"];
345 item.name = obj[@"Name"];
346 item.type = obj[@"Id"];
347 item.lgota = @"0";
348 //res = [res arrayByAddingObject:item];
349 //}
350 }
351 return @"";
352}
353
354- (void)viewDidAppear:(BOOL)animated {
355 if(alreadyAppeared && order.train.type == TmhTrainTypeComfortable) {
356 self.navigationItem.hidesBackButton = YES;
357 }
358 [super viewDidAppear:animated];
359 NSLog(alreadyAppeared ? @"SECOND APPEAR" : @"FIRST APPEAR");
360 if(alreadyAppeared && order.train.type == TmhTrainTypeComfortable) {
361 self.navigationItem.hidesBackButton = YES;
362 [self.navigationController.view showWaitString:@"Снятие резервов"];
363 [self cancelReserve];
364 }
365 alreadyAppeared = YES;
366}
367
368#pragma mark - Action
369
370- (void)onLoaded {
371 int max = 1;
372 if(order.train.type==TmhTrainTypeComfortable && order.isBack)
373 max = 2;
374 coastsLoaded++;
375 if(coastsLoaded==max)
376 [self.navigationController.view hideWait];
377 if(order.train.type==TmhTrainTypeComfortable && order.isBack && ld==0) {
378 ld=1;
379 [self loadCosts:YES];
380 }
381
382}
383
384- (NSString *)generate_n:(NSString *)value count:(int)count {
385 NSString *res = @"";
386 for(int i = 0; i < count; i++) {
387 res = [NSString stringWithFormat:@"%@%@,",res,value];
388 }
389 return res;
390}
391
392- (void)loadCosts:(BOOL)back {
393 NSString *cats = @"";
394 int count_cats = 0;
395 int count_bens = 0;
396 NSString *benefits = @"";
397 NSArray *types = [settings getAllTypes];
398 for(TmhCat *cat in types) {
399 if([cat.lgota isEqualToString:@"0"]) {
400 cats = [NSString stringWithFormat:@"%@%@%@", cats, count_cats>0?@",":@"", cat.type];
401 count_cats++;
402 }else{
403 benefits = [NSString stringWithFormat:@"%@%@%@", benefits, count_bens>0?@",":@"", cat.lgota];
404 count_bens++;
405 }
406
407 }
408 for(TmhOrderTicket *ticket in order.tickets) {
409 if(ticket.type == 666) {
410 benefits = [NSString stringWithFormat:@"%@%@%@", benefits, count_bens>0?@",":@"", ticket.code_lgoty];
411 count_bens++;
412 }
413 }
414 //[self.navigationController.view showWait];
415 NSDateFormatter *format = [[NSDateFormatter alloc]init];
416 [format setDateFormat:@"dd.MM.yyyy"];
417 [format setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ru_RU"]];
418 //[format setTimeZone:MOSCOW_TIMEZONE];
419 NSString *cart = @"";
420 int has_bag = 0;
421 int has_anim = 0;
422 int has_bike = 0;
423 for(TmhOrderTicket *ticket in order.tickets) {
424 if(ticket.type == 666) {
425 cart = [NSString stringWithFormat:@"%@%@,", cart, ticket.code_lgoty];
426 } else {
427 cart = [NSString stringWithFormat:@"%@%i%@,", cart, [self getTickLgota:ticket]>10 ? [self getTickLgota:ticket] : [self getTickType:ticket], order.train.type==TmhTrainTypeComfortable?[NSString stringWithFormat:@"(%@-%@)", ticket.carriageNumber, ![ticket.placeNumber isEqualToString:@"0"] ?ticket.placeNumber:@"3"]:@""];
428 }
429 if(!back) {
430 if(ticket.isBaggage > 0)
431 has_bag+=ticket.isBaggage;
432 if(ticket.isAnimal > 0)
433 has_anim+=ticket.isAnimal;
434 if(ticket.isBike > 0)
435 has_bike+=ticket.isBike;
436 } else {
437 if(ticket.isBaggageBack > 0)
438 has_bag+=ticket.isBaggageBack;
439 if(ticket.isAnimalBack > 0)
440 has_anim+=ticket.isAnimalBack;
441 if(ticket.isBikeBack > 0)
442 has_bike+=ticket.isBikeBack;
443 }
444
445 }
446 if(has_bag>0)
447 cart = [NSString stringWithFormat:@"%@%@", cart, [self generate_n:[self getBiletTypes:@"Ручная кладь"] count:has_bag]];
448 if(has_anim>0)
449 cart = [NSString stringWithFormat:@"%@%@", cart, [self generate_n:[self getBiletTypes:@"Живность"] count:has_anim]];
450 if(has_bike>0)
451 cart = [NSString stringWithFormat:@"%@%@", cart, [self generate_n:[self getBiletTypes:@"Велосипед"] count:has_bike]];
452 cart = [cart substringToIndex:[cart length] - 1];
453 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
454 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=price_gate&categories=%@&benefits=%@&ppk_id=%@&result_type=json&key_client=%@&st1=%@&st2=%@&date=%@&trains=%@&cart=%@", cats, benefits, [[TmhSettings new] ppk], [TmhAPI getKey], back ? order.toStation.identifier : order.fromStation.identifier, back ? order.fromStation.identifier : order.toStation.identifier, [format stringFromDate:back ? order.backDate : order.date], back ? order.backTrain.identifier:order.train.identifier, cart];
455 if(hasBonus) {
456 address = [NSString stringWithFormat:@"%@&bonusUserId=%@", address, [settings getString:@"bonusUserId"]];
457 }
458 NSLog(@"address = %@", address);
459 [manager POST:address parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
460 NSLog(@"TARIFS RESPONSE: %@", responseObject);
461 NSDictionary *res = [responseObject objectForKey:@"PriceInfoExResult"];
462 if(hasBonus) {
463 NSString *cost = order.isBack?(order.train.type==TmhTrainTypeComfortable?@"BonusCost":@"BonusCost2Way"):@"BonusCost";
464 if(!back) {
465 bonusObject = res[@"@attributes"];
466 double BonusBalance = [bonusObject[@"BonusBalance"] doubleValue];
467 double BonusCost = [bonusObject[cost] doubleValue];
468 canPayBonus = (BonusBalance >= BonusCost && BonusCost > 0);
469 NSLog(@"BonusBalance = %f, BonusCost = %f", BonusBalance, BonusCost);
470 } else {
471 backBonusObject = res[@"@attributes"];
472 double BonusBalance = [backBonusObject[@"BonusBalance"] doubleValue];
473 double BonusCost = [backBonusObject[cost] doubleValue];
474 canPayBonus = (BonusBalance >= BonusCost && BonusCost > 0);
475 NSLog(@"BACK BonusBalance = %f, BonusCost = %f", BonusBalance, BonusCost);
476 }
477 }
478 NSDictionary *tr = [res objectForKey:@"TrainInfo"];
479 NSDictionary *list = [tr objectForKey:@"PriceList"];
480 if(!back)
481 tarifs = @[]; else
482 tarifsBack = @[];
483 //if (![list isKindOfClass:NSArray.class]) {
484 // list = @[list];
485 //}
486 if ([list isKindOfClass:NSArray.class]) {
487 for(NSDictionary *price in list) {
488 TmhTrainTarif *t = [[TmhTrainTarif alloc] init];
489 t.name = price[@"@attributes"][@"Class"];
490 t.type = price[@"@attributes"][@"PlaceType"];
491 t.arr = @[];
492 NSLog(@"name = %@ type = %@", t.name, t.type);
493 NSDictionary *costs = price[@"Cost"];
494 if (![costs isKindOfClass:NSArray.class] && costs != nil) {
495 costs = @[costs];
496 }
497 int i = 0;
498 for(NSDictionary *cost in costs) {
499 TmhCat *cat = [[TmhCat alloc] init];
500 cat.name = cost[@"@attributes"][@"Name"];
501 cat.type = [cost[@"@attributes"][@"LgotCode"] isEqualToString:@"0"] ? cost[@"@attributes"][@"Category"] : @"3";
502 cat.lgota = cost[@"@attributes"][@"LgotCode"];
503 cat.cost = cost[@"@attributes"][@"Cost"];
504 cat.cost2way = cost[@"@attributes"][@"Cost2Way"];
505 NSLog(@"parsed cat = %@, cost = %@", cat.name, cat.cost);
506
507 if(price[@"@attributes"][@"DiscountName"] != nil) {
508 cat.discount = YES;
509 cat.discountText = price[@"@attributes"][!order.isBack ? @"DiscountName" : @"DiscountName2Way"];
510 cat.discountCost = price[@"@attributes"][!order.isBack ? @"DiscountCost" : @"DiscountCost2Way"];
511 } else {
512 cat.discount = NO;
513 cat.discountText = @"";
514 cat.discountCost = @"";
515 }
516 t.arr = [t.arr arrayByAddingObject:cat];
517 }
518 NSLog(@"t.arr = %@", t.arr);
519 //NSLog(@"full = %f child = %f ben1 = %f", t.full, t.child, t.ben1);
520 if(!back)
521 tarifs = [tarifs arrayByAddingObject:t]; else
522 tarifsBack = [tarifsBack arrayByAddingObject:t];
523
524 }
525 NSLog(@"GENERATES TARIFS = %@", tarifs);
526 NSLog(@"GENERATES TARIFS BACK = %@", tarifsBack);
527 } else { // DISCOMFORT
528 NSDictionary *cost = [list objectForKey:@"Cost"];
529 round_arr = @[];
530 if(!back)
531 arr = @[]; else
532 arrBack = @[];
533 TmhTrainTarif *tt = [TmhTrainTarif new];
534 tt.arr = @[];
535 tt.arr2way = @[];
536 round_tarif = [TmhTrainTarif new];
537 int i = 0;
538 if (![cost isKindOfClass:NSArray.class])
539 cost = @[cost];
540 for(NSDictionary *data in cost) {
541 NSDictionary *attr = [data objectForKey:@"@attributes"];
542
543 TmhCat *cat = [[TmhCat alloc] init];
544 cat.name = attr[@"Name"];
545 cat.type = [attr[@"LgotCode"] isEqualToString:@"0"]?attr[@"Category"]:@"3";
546 cat.lgota = attr[@"LgotCode"];
547 cat.cost = attr[@"Cost"];
548 cat.cost2way = attr[@"Cost2Way"];
549
550 if(list[@"@attributes"][@"DiscountName"] != nil) {
551 hasDiscount = YES;
552 cat.discount = YES;
553 cat.discountText = list[@"@attributes"][!order.isBack ? @"DiscountName" : @"DiscountName2Way"];
554 cat.discountCost = list[@"@attributes"][!order.isBack ? @"DiscountCost" : @"DiscountCost2Way"];
555 discountCost = cat.discountCost;
556 discountName = cat.discountText;
557 } else {
558 cat.discount = NO;
559 cat.discountText = @"";
560 cat.discountCost = @"";
561 }
562
563 tt.arr = [tt.arr arrayByAddingObject:cat];
564 //tt.arr = [tt.arr arrayByAddingObject:cost[@"@attributes"][@"Cost"]];
565 //tt.arr2way = [tt.arr2way arrayByAddingObject:cost[@"@attributes"][@"Cost2Way"]];
566
567 NSString *tmp = [NSString stringWithFormat:@"%.2f" , [[attr valueForKey:@"Cost2Way"] floatValue]];
568 round_arr = [round_arr arrayByAddingObject:[attr valueForKey:@"Cost2Way"]];
569 if(!back)
570 tarif = tt; else
571 tarifBack = tt;
572 tmp = [NSString stringWithFormat:@"%.2f" , [[attr valueForKey:@"Cost"] floatValue]];
573 if(!back)
574 arr = [arr arrayByAddingObject:tmp]; else
575 arrBack = [arrBack arrayByAddingObject:tmp];
576 i++;
577 }
578 NSLog(@"arr = %@", arr);
579 NSLog(@"arrBack = %@", arrBack);
580 NSLog(@"round_arr = %@", round_arr);
581 }
582
583 //if()
584 [self setCosts:back];
585 [self onLoaded];
586 NSLog(@"tarif arr = %@", arr);
587
588 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
589 NSLog(@"Erorr: %@", error);
590 [self.navigationController.view hideWait];
591 [self.navigationController.view showError:@"ERROR GET COAST"];
592 [self.nextButton setEnabled:NO];
593
594 }];
595
596}
597
598- (void)fail:(NSString *)cat {
599 failCosts = YES;
600 [self.navigationController.view showErrorWithText:[NSString stringWithFormat:@"В данный момент покупка билета \"%@\" невозможна. Пожалуйста, попробуйте позже.", cat]];
601 [self.nextButton setEnabled:NO];
602}
603
604- (NSString *)getTicketName:(int)type {
605 NSLog(@"ticket type = %d", type);
606 NSArray *types = [settings getBiletTypes];
607 return ((TmhCat *)types[type]).name;
608}
609
610- (float)getTickPrice:(int *)type {
611 float r = 0;
612
613 return r;
614}
615
616- (void)setCosts:(BOOL)back {
617 NSLog(@"bback = %@", back ? @"1" : @"0");
618 NSLog(@"tariffs count = %d", tarifs.count);
619 if(back?tarifsBack.count<1:tarifs.count<1) {
620
621 if(!back)
622
623 [[order tickets]enumerateObjectsUsingBlock:^(TmhOrderTicket *ticket, NSUInteger idx, BOOL * _Nonnull stop) {
624 if (ticket != nil) {
625 int pos = ticket.type>2 ? ticket.type+3 : ticket.type;
626 //if(order.train.type==TmhTrainTypeComfortable)
627 // pos = ticket.type>2 ? ticket.type+3 : ticket.type;
628 if(order.isBack && (order.train.type!=TmhTrainTypeComfortable)) {
629 //NSLog(@"ticket.type = %d", pos);
630
631 //ticket.price = [[round_arr objectAtIndex:pos] floatValue]/2.0;
632 if(ticket.type != 666) {
633 TmhCat *c = b_types[ticket.type];
634 NSLog(@"ticket.type = %d", ticket.type);
635 for(TmhCat *cat in b_types) {
636 NSLog(@"cat in b_types = %@", cat.name);
637 }
638 NSLog(@"c.type = %@, lgota = %@", c.type, c.lgota);
639 for(TmhCat *cat in tarif.arr) {
640 NSLog(@"cat.type = %@, lgota = %@, cat.name = %@", cat.type, cat.lgota, cat.name);
641 if([cat.lgota isEqualToString:c.lgota] && [cat.type isEqualToString:c.type]) {
642 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
643 ticket.price = [cat.cost2way floatValue]/2.0;
644 }
645 }
646 ticket.tarif = [[TmhTrainTarif alloc] init];
647
648 if(ticket.price<0) {
649 [self fail:[self getTicketName:ticket.type]];
650 return;
651 }
652
653 NSString *bg;
654 NSString *an;
655 NSString *bk;
656 for(TmhCat *cat in tarif.arr) {
657 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
658 bg = cat.cost2way;
659 if([cat.name isEqualToString:@"Живность"])
660 an = cat.cost2way;
661 if([cat.name isEqualToString:@"Велосипед"])
662 bk = cat.cost2way;
663 ticket.discount = @[cat.discount ? @"1" : @"0", cat.discountText, cat.discountCost];
664 }
665 if(bg == nil)
666 bg = @"-1";
667 if(an == nil)
668 an = @"-1";
669 if(bk == nil)
670 bk = @"-1";
671 NSArray *ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
672
673 if(ticket.isBaggage)
674 if([ar[3] floatValue]<0) {
675 [self fail:@"доп. ручная кладь"];
676 return;
677 }
678 if(ticket.isAnimal)
679 if([ar[4] floatValue]<0) {
680 [self fail:@"Живность"];
681 return;
682 }
683 if(ticket.isBike)
684 if([ar[5] floatValue]<0) {
685 [self fail:@"Велосипед"];
686 return;
687 }
688
689 ticket.costs = @[ar[3],ar[4],ar[5]];
690 } else {
691 for(TmhCat *cat in tarif.arr) {
692 NSLog(@"cat.name = %@, cat.lgota = %@, cat.type = %@, cost = %@", cat.name, cat.lgota, cat.type, cat.cost);
693 if([cat.lgota isEqualToString:ticket.code_lgoty]) {
694 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
695 ticket.price = [cat.cost floatValue];
696 }
697 }
698 ticket.tarif = [[TmhTrainTarif alloc] init];
699
700 if(ticket.price<0) {
701 [self fail:[self getTicketName:ticket.type]];
702 return;
703 }
704
705 NSString *bg;
706 NSString *an;
707 NSString *bk;
708 for(TmhCat *cat in tarif.arr) {
709 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
710 bg = cat.cost2way;
711 if([cat.name isEqualToString:@"Живность"])
712 an = cat.cost2way;
713 if([cat.name isEqualToString:@"Велосипед"])
714 bk = cat.cost2way;
715 ticket.discount = @[cat.discount ? @"1" : @"0", cat.discountText, cat.discountCost];
716 }
717 if(bg == nil)
718 bg = @"-1";
719 if(an == nil)
720 an = @"-1";
721 if(bk == nil)
722 bk = @"-1";
723 NSArray *ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
724
725 if(ticket.isBaggage)
726 if([ar[3] floatValue]<0) {
727 [self fail:@"доп. ручная кладь"];
728 return;
729 }
730 if(ticket.isAnimal)
731 if([ar[4] floatValue]<0) {
732 [self fail:@"Живность"];
733 return;
734 }
735 if(ticket.isBike)
736 if([ar[5] floatValue]<0) {
737 [self fail:@"Велосипед"];
738 return;
739 }
740
741 ticket.costs = @[ar[3],ar[4],ar[5]];
742 }
743 NSLog(@"ticket costs = %@", ticket.costs);
744 } else {
745 NSLog(@"qwerqwer");
746 //NSLog(@"ticket.type = %d", pos);
747 //ticket.price = [[arr objectAtIndex:pos] floatValue];
748 if(ticket.type != 666) {
749 TmhCat *c = b_types[ticket.type];
750 for(TmhCat *cat in tarif.arr) {
751 NSLog(@"cat.name = %@, cat.lgota = %@, cat.type = %@, cost = %@", cat.name, cat.lgota, cat.type, cat.cost);
752 NSLog(@"cat.name = %@, cat.lgota = %@, cat.type = %@, cost = %@", c.name, c.lgota, c.type, cat.cost);
753 if([cat.lgota isEqualToString:c.lgota] && [cat.type isEqualToString:c.type]) {
754 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
755 ticket.price = [cat.cost floatValue];
756 }
757 }
758 ticket.tarif = [[TmhTrainTarif alloc] init];
759
760 if(ticket.price<0) {
761 [self fail:[self getTicketName:ticket.type]];
762 return;
763 }
764
765 NSString *bg;
766 NSString *an;
767 NSString *bk;
768
769 for(TmhCat *cat in tarif.arr) {
770 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
771 bg = cat.cost;
772 if([cat.name isEqualToString:@"Живность"])
773 an = cat.cost;
774 if([cat.name isEqualToString:@"Велосипед"])
775 bk = cat.cost;
776 ticket.discount = @[cat.discount ? @"1" : @"0", cat.discountText, cat.discountCost];
777 }
778
779 NSArray *ar = @[@"", @"", @"", @"-1", @"-1", @"-1", @"", @"", @""];
780 //if(bg == nil || an == nil || bk == nil) {
781 //[self fail:@"Квитанции"];
782 if(bg == nil)
783 bg = @"-1";
784 if(an == nil)
785 an = @"-1";
786 if(bk == nil)
787 bk = @"-1";
788 //} else
789 ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
790
791 ticket.tarif = [[TmhTrainTarif alloc] init];
792 //NSLog(@"tarif.bag = %f", tarif.bag);
793 NSLog(@"bag = %d, anim = %d, bike = %d", ticket.isBaggage, ticket.isAnimal, ticket.isBike);
794 if(ticket.isBaggage > 0)
795 if([ar[3] floatValue]<0) {
796 [self fail:@"доп. ручная кладь"];
797 return;
798 }
799 if(ticket.isAnimal > 0)
800 if([ar[4] floatValue]<0) {
801 [self fail:@"Живность"];
802 return;
803 }
804 if(ticket.isBike > 0)
805 if([ar[5] floatValue]<0) {
806 [self fail:@"Велосипед"];
807 return;
808 }
809 NSLog(@"proverka");
810 ticket.costs = @[ar[3],ar[4],ar[5]];
811 NSLog(@"ticket costs = %@", ticket.costs);
812 //NSLog(@"ticket.price = %f", ticket.price);
813 } else {
814 for(TmhCat *cat in tarif.arr) {
815 NSLog(@"cat.name = %@, cat.lgota = %@, cat.type = %@, cost = %@", cat.name, cat.lgota, cat.type, cat.cost);
816 if([cat.lgota isEqualToString:ticket.code_lgoty]) {
817 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
818 ticket.price = [cat.cost floatValue];
819 }
820 }
821
822 NSString *bg;
823 NSString *an;
824 NSString *bk;
825
826 for(TmhCat *cat in tarif.arr) {
827 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
828 bg = cat.cost;
829 if([cat.name isEqualToString:@"Живность"])
830 an = cat.cost;
831 if([cat.name isEqualToString:@"Велосипед"])
832 bk = cat.cost;
833 ticket.discount = @[cat.discount ? @"1" : @"0", cat.discountText, cat.discountCost];
834 }
835
836 NSArray *ar = @[@"", @"", @"", @"-1", @"-1", @"-1", @"", @"", @""];
837 //if(bg == nil || an == nil || bk == nil) {
838 //[self fail:@"Квитанции"];
839 if(bg == nil)
840 bg = @"-1";
841 if(an == nil)
842 an = @"-1";
843 if(bk == nil)
844 bk = @"-1";
845 //} else
846 ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
847
848 ticket.tarif = [[TmhTrainTarif alloc] init];
849 //NSLog(@"tarif.bag = %f", tarif.bag);
850 NSLog(@"bag = %d, anim = %d, bike = %d", ticket.isBaggage, ticket.isAnimal, ticket.isBike);
851 if(ticket.isBaggage > 0)
852 if([ar[3] floatValue]<0) {
853 [self fail:@"доп. ручная кладь"];
854 return;
855 }
856 if(ticket.isAnimal > 0)
857 if([ar[4] floatValue]<0) {
858 [self fail:@"Живность"];
859 return;
860 }
861 if(ticket.isBike > 0)
862 if([ar[5] floatValue]<0) {
863 [self fail:@"Велосипед"];
864 return;
865 }
866 NSLog(@"proverka");
867 ticket.costs = @[ar[3],ar[4],ar[5]];
868 NSLog(@"ticket costs = %@", ticket.costs);
869 }
870 }
871 }
872 }]; else
873
874
875 [[order backTickets]enumerateObjectsUsingBlock:^(TmhOrderTicket *ticket, NSUInteger idx, BOOL * _Nonnull stop) {
876 if (ticket != nil) {
877
878
879 //ticket.price = [[arrBack objectAtIndex:ticket.type] floatValue];
880 ticket.tarif = tarif;
881 TmhCat *c;
882 if(ticket.type != 666) {
883 c = b_types[ticket.type];
884
885 for(TmhCat *cat in tarifBack.arr) {
886 if([cat.lgota isEqualToString:c.lgota] && [cat.type isEqualToString:c.type]) {
887 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
888 ticket.price = [cat.cost floatValue];
889 }
890 }
891 for(TmhCat *cat in tarifBack.arr) {
892 NSLog(@"CAT IN ARR = %@. COST = %@", cat.name, cat.cost);
893 }
894 ticket.tarif = [[TmhTrainTarif alloc] init];
895
896 if(ticket.price<0) {
897 [self fail:[self getTicketName:ticket.type]];
898 return;
899 }
900
901 NSString *bg;
902 NSString *an;
903 NSString *bk;
904
905
906
907 for(TmhCat *cat in tarifBack.arr) {
908 NSLog(@"cat = %@. cost = %@", cat.name, cat.cost);
909 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
910 bg = cat.cost;
911 if([cat.name isEqualToString:@"Живность"])
912 an = cat.cost;
913 if([cat.name isEqualToString:@"Велосипед"])
914 bk = cat.cost;
915 }
916 if(bg == nil)
917 bg = @"-1";
918 if(an == nil)
919 an = @"-1";
920 if(bk == nil)
921 bk = @"-1";
922 NSArray *ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
923
924 /*if(ticket.price<0) {
925 [self fail:[self getTicketName:ticket.type]];
926 return;
927 }*/
928
929 if(ticket.isBaggage)
930 if([ar[3] floatValue]<0) {
931 [self fail:@"доп. ручная кладь"];
932 return;
933 }
934 if(ticket.isAnimal)
935 if([ar[4] floatValue]<0) {
936 [self fail:@"Живность"];
937 return;
938 }
939 if(ticket.isBike)
940 if([ar[5] floatValue]<0) {
941 [self fail:@"Велосипед"];
942 return;
943 }
944
945 ticket.costs = @[ar[3],ar[4],ar[5]];
946 } else {
947 for(TmhCat *cat in tarif.arr) {
948 NSLog(@"cat.name = %@, cat.lgota = %@, cat.type = %@, cost = %@", cat.name, cat.lgota, cat.type, cat.cost);
949 if([cat.lgota isEqualToString:ticket.code_lgoty]) {
950 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
951 ticket.price = [cat.cost floatValue];
952 }
953 }
954
955 NSString *bg;
956 NSString *an;
957 NSString *bk;
958
959 for(TmhCat *cat in tarif.arr) {
960 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
961 bg = cat.cost;
962 if([cat.name isEqualToString:@"Живность"])
963 an = cat.cost;
964 if([cat.name isEqualToString:@"Велосипед"])
965 bk = cat.cost;
966 ticket.discount = @[cat.discount ? @"1" : @"0", cat.discountText, cat.discountCost];
967 }
968
969 NSArray *ar = @[@"", @"", @"", @"-1", @"-1", @"-1", @"", @"", @""];
970 //if(bg == nil || an == nil || bk == nil) {
971 //[self fail:@"Квитанции"];
972 if(bg == nil)
973 bg = @"-1";
974 if(an == nil)
975 an = @"-1";
976 if(bk == nil)
977 bk = @"-1";
978 //} else
979 ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
980
981 ticket.tarif = [[TmhTrainTarif alloc] init];
982 //NSLog(@"tarif.bag = %f", tarif.bag);
983 NSLog(@"bag = %d, anim = %d, bike = %d", ticket.isBaggage, ticket.isAnimal, ticket.isBike);
984 if(ticket.isBaggage > 0)
985 if([ar[3] floatValue]<0) {
986 [self fail:@"доп. ручная кладь"];
987 return;
988 }
989 if(ticket.isAnimal > 0)
990 if([ar[4] floatValue]<0) {
991 [self fail:@"Живность"];
992 return;
993 }
994 if(ticket.isBike > 0)
995 if([ar[5] floatValue]<0) {
996 [self fail:@"Велосипед"];
997 return;
998 }
999 NSLog(@"proverka");
1000 ticket.costs = @[ar[3],ar[4],ar[5]];
1001 NSLog(@"ticket costs = %@", ticket.costs);
1002 }
1003 }
1004 }];
1005 } else {
1006 if(!back)
1007
1008 [[order tickets]enumerateObjectsUsingBlock:^(TmhOrderTicket *ticket, NSUInteger idx, BOOL * _Nonnull stop) {
1009 if (ticket != nil) {
1010 NSLog(@"ASFASFAFS");
1011 if(ticket.type != 666) {
1012 for(TmhTrainTarif *t in tarifs) {
1013
1014 if([t.type isEqualToString:[NSString stringWithFormat:@"%d", ticket.placeType]] && [t.name isEqualToString:[NSString stringWithFormat:@"%@", ticket.carriageService]]) {
1015 NSLog(@"somelog");
1016
1017 TmhCat *c = b_types[ticket.type];
1018 for(TmhCat *cat in t.arr) {
1019 NSLog(@"ticket pass = %@ %@ %@, cat.type = %@, cat.lgota = %@", ticket.lastName, ticket.firstName, ticket.middleName, cat.type, cat.lgota);
1020 if([cat.lgota isEqualToString:c.lgota] && [cat.type isEqualToString:c.type]) {
1021 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
1022
1023 ticket.price = [cat.cost floatValue];
1024 }
1025 }
1026 NSLog(@"ticket.price=%f", ticket.price);
1027 if(ticket.price<0) {
1028 [self fail:[self getTicketName:ticket.type]];
1029 return;
1030 }
1031
1032 NSString *bg;
1033 NSString *an;
1034 NSString *bk;
1035
1036 for(TmhCat *cat in t.arr) {
1037 NSLog(@"cc name = %@", cat.name);
1038 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
1039 bg = cat.cost;
1040 if([cat.name isEqualToString:@"Живность"])
1041 an = cat.cost;
1042 if([cat.name isEqualToString:@"Велосипед"])
1043 bk = cat.cost;
1044 ticket.discount = @[cat.discount ? @"1" : @"0", cat.discountText, cat.discountCost];
1045 }
1046 if(bg == nil)
1047 bg = @"-1";
1048 if(an == nil)
1049 an = @"-1";
1050 if(bk == nil)
1051 bk = @"-1";
1052 NSArray *ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
1053
1054 //ticket.tarif = [[TmhTrainTarif alloc] init];
1055 //NSLog(@"tarif.bag = %f", tarif.bag);
1056 ticket.tarif = t;
1057
1058 if(ticket.isBaggage)
1059 if([ar[3] floatValue]<0) {
1060 [self fail:@"доп. ручная кладь"];
1061 return;
1062 }
1063 if(ticket.isAnimal)
1064 if([ar[4] floatValue]<0) {
1065 [self fail:@"Живность"];
1066 return;
1067 }
1068 if(ticket.isBike)
1069 if([ar[5] floatValue]<0) {
1070 [self fail:@"Велосипед"];
1071 return;
1072 }
1073 //NSLog(@"somelog");
1074 ticket.costs = @[ar[3],ar[4],ar[5]];
1075
1076
1077 }
1078 }
1079 } else {
1080
1081 for(TmhTrainTarif *t in tarifs) {
1082
1083 if([t.type isEqualToString:[NSString stringWithFormat:@"%d", ticket.placeType]] && [t.name isEqualToString:[NSString stringWithFormat:@"%@", ticket.carriageService]]) {
1084 NSLog(@"somelog");
1085
1086 for(TmhCat *cat in t.arr) {
1087 NSLog(@"cat.name = %@, cat.lgota = %@, cat.type = %@, cost = %@", cat.name, cat.lgota, cat.type, cat.cost);
1088 if([cat.lgota isEqualToString:ticket.code_lgoty]) {
1089 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
1090 ticket.price = [cat.cost floatValue];
1091 }
1092 }
1093 NSLog(@"ticket.price=%f", ticket.price);
1094 if(ticket.price<0) {
1095 [self fail:[self getTicketName:ticket.type]];
1096 return;
1097 }
1098
1099 NSString *bg;
1100 NSString *an;
1101 NSString *bk;
1102
1103 for(TmhCat *cat in t.arr) {
1104 NSLog(@"cc name = %@", cat.name);
1105 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
1106 bg = cat.cost;
1107 if([cat.name isEqualToString:@"Живность"])
1108 an = cat.cost;
1109 if([cat.name isEqualToString:@"Велосипед"])
1110 bk = cat.cost;
1111 ticket.discount = @[cat.discount ? @"1" : @"0", cat.discountText, cat.discountCost];
1112 }
1113 if(bg == nil)
1114 bg = @"-1";
1115 if(an == nil)
1116 an = @"-1";
1117 if(bk == nil)
1118 bk = @"-1";
1119 NSArray *ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
1120
1121 //ticket.tarif = [[TmhTrainTarif alloc] init];
1122 //NSLog(@"tarif.bag = %f", tarif.bag);
1123 ticket.tarif = t;
1124
1125 if(ticket.isBaggage)
1126 if([ar[3] floatValue]<0) {
1127 [self fail:@"доп. ручная кладь"];
1128 return;
1129 }
1130 if(ticket.isAnimal)
1131 if([ar[4] floatValue]<0) {
1132 [self fail:@"Живность"];
1133 return;
1134 }
1135 if(ticket.isBike)
1136 if([ar[5] floatValue]<0) {
1137 [self fail:@"Велосипед"];
1138 return;
1139 }
1140 //NSLog(@"somelog");
1141 ticket.costs = @[ar[3],ar[4],ar[5]];
1142
1143
1144 }
1145 }
1146
1147 }
1148 }
1149 }]; else
1150
1151
1152 [[order backTickets]enumerateObjectsUsingBlock:^(TmhOrderTicket *ticket, NSUInteger idx, BOOL * _Nonnull stop) {
1153 if (ticket != nil) {
1154
1155 if(ticket.type != 666) {
1156
1157 for(TmhTrainTarif *t in tarifsBack) {
1158
1159 //if(t.type == ticket.placeType) {
1160
1161 if([t.type isEqualToString:[NSString stringWithFormat:@"%d", ticket.placeType]] && [t.name isEqualToString:[NSString stringWithFormat:@"%@", ticket.carriageService]]) {
1162
1163 ticket.tarif = t;
1164
1165 TmhCat *c = b_types[ticket.type];
1166 for(TmhCat *cat in t.arr) {
1167 if([cat.lgota isEqualToString:c.lgota] && [cat.type isEqualToString:c.type]) {
1168 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
1169 ticket.price = [cat.cost floatValue];
1170 }
1171 }
1172
1173 if(ticket.price<0) {
1174 [self fail:[self getTicketName:ticket.type]];
1175 return;
1176 }
1177
1178 NSString *bg;
1179 NSString *an;
1180 NSString *bk;
1181
1182 for(TmhCat *cat in t.arr) {
1183 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
1184 bg = cat.cost;
1185 if([cat.name isEqualToString:@"Живность"])
1186 an = cat.cost;
1187 if([cat.name isEqualToString:@"Велосипед"])
1188 bk = cat.cost;
1189 }
1190 if(bg == nil)
1191 bg = @"-1";
1192 if(an == nil)
1193 an = @"-1";
1194 if(bk == nil)
1195 bk = @"-1";
1196 NSArray *ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
1197
1198 //ticket.tarif = [[TmhTrainTarif alloc] init];
1199 //NSLog(@"tarif.bag = %f", tarif.bag);
1200 ticket.tarif = t;
1201
1202 if(ticket.isBaggage)
1203 if([ar[3] floatValue]<0) {
1204 [self fail:@"доп. ручная кладь"];
1205 return;
1206 }
1207 if(ticket.isAnimal)
1208 if([ar[4] floatValue]<0) {
1209 [self fail:@"Живность"];
1210 return;
1211 }
1212 if(ticket.isBike)
1213 if([ar[5] floatValue]<0) {
1214 [self fail:@"Велосипед"];
1215 return;
1216 }
1217
1218 ticket.costs = @[ar[3],ar[4],ar[5]];
1219
1220 }
1221 }
1222 } else {
1223
1224 for(TmhTrainTarif *t in tarifsBack) {
1225
1226 //if(t.type == ticket.placeType) {
1227
1228 if([t.type isEqualToString:[NSString stringWithFormat:@"%d", ticket.placeType]] && [t.name isEqualToString:[NSString stringWithFormat:@"%@", ticket.carriageService]]) {
1229
1230 ticket.tarif = t;
1231
1232 /*TmhCat *c = b_types[ticket.type];
1233 for(TmhCat *cat in t.arr) {
1234 if([cat.lgota isEqualToString:c.lgota] && [cat.type isEqualToString:c.type]) {
1235 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
1236 ticket.price = [cat.cost floatValue];
1237 }
1238 }*/
1239
1240 for(TmhCat *cat in t.arr) {
1241 NSLog(@"cat.name = %@, cat.lgota = %@, cat.type = %@, cost = %@", cat.name, cat.lgota, cat.type, cat.cost);
1242 if([cat.lgota isEqualToString:ticket.code_lgoty]) {
1243 NSLog(@"cat = %@, price = %@", cat.name, cat.cost);
1244 ticket.price = [cat.cost floatValue];
1245 }
1246 }
1247
1248 if(ticket.price<0) {
1249 [self fail:[self getTicketName:ticket.type]];
1250 return;
1251 }
1252
1253 NSString *bg;
1254 NSString *an;
1255 NSString *bk;
1256
1257 for(TmhCat *cat in t.arr) {
1258 if([cat.name isEqualToString:@"Багаж"] || [cat.name isEqualToString:@"Ручная кладь"])
1259 bg = cat.cost;
1260 if([cat.name isEqualToString:@"Живность"])
1261 an = cat.cost;
1262 if([cat.name isEqualToString:@"Велосипед"])
1263 bk = cat.cost;
1264 }
1265 if(bg == nil)
1266 bg = @"-1";
1267 if(an == nil)
1268 an = @"-1";
1269 if(bk == nil)
1270 bk = @"-1";
1271 NSArray *ar = @[@"", @"", @"", bg, an, bk, @"", @"", @""];
1272
1273 //ticket.tarif = [[TmhTrainTarif alloc] init];
1274 //NSLog(@"tarif.bag = %f", tarif.bag);
1275 ticket.tarif = t;
1276
1277 if(ticket.isBaggage)
1278 if([ar[3] floatValue]<0) {
1279 [self fail:@"доп. ручная кладь"];
1280 return;
1281 }
1282 if(ticket.isAnimal)
1283 if([ar[4] floatValue]<0) {
1284 [self fail:@"Живность"];
1285 return;
1286 }
1287 if(ticket.isBike)
1288 if([ar[5] floatValue]<0) {
1289 [self fail:@"Велосипед"];
1290 return;
1291 }
1292
1293 ticket.costs = @[ar[3],ar[4],ar[5]];
1294
1295 }
1296 }
1297
1298 }
1299 }
1300 }];
1301 }
1302
1303
1304 [self.tableView reloadData];
1305}
1306
1307- (void)onlyLgotaBuyN7:(NSString *)code
1308{
1309 [self.navigationController.view showWaitString:@"Отправка"];
1310 TmhAPI *api = [[TmhAPI new] init];
1311 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
1312 @"items" : [api getComfortItems:order],
1313 @"benefitPhone" : lgota_ticket.phone,
1314 @"phoneCode" : code,
1315 @"personalId" : lgota_ticket.personalId
1316 }];
1317 if(order.isBack) {
1318 NSString *reserves = @"";
1319 for(int i = 0; i < order.tickets.count; i++)
1320 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.tickets[i]).reserveId];
1321 for(int i = 0; i < order.backTickets.count; i++)
1322 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.backTickets[i]).reserveId];
1323
1324 reserves = [reserves substringToIndex:[reserves length] - 1];
1325 [params setValue:reserves forKey:@"items_sort"];
1326 }
1327 //[payment.token.paymentData base64EncodedStringWithOptions:nil]
1328 NSLog(@"%@", params);
1329 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
1330 [manager.requestSerializer setTimeoutInterval:100.0];
1331
1332 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=moneyless_n7&result_type=json&email=%@&phone=%@&key_client=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@&order_id=%@", /*order.train.type==TmhTrainTypeComfortable ? @"":order.email*/ [self urlEncode:order.email], [self urlEncode:settings.phone], [TmhAPI getKey], [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], order.identifier];
1333 NSLog(@"address = %@", address);
1334
1335 [manager POST:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
1336 [self.nextButton setEnabled:YES];
1337 NSLog(@"response Object of register = %@", responseObject);
1338 NSString *stringRes = responseObject[@"order"][@"@attributes"][@"IsSucceeded"];
1339 NSLog(@"stringRes = %@", stringRes);
1340 if(![stringRes isEqualToString:@"True"]) {
1341 [self.navigationController.view showErrorWithText:@"Ошибка при оплате"];
1342 [self.nextButton setEnabled:YES];
1343 return;
1344 }
1345 NSDictionary *res = responseObject[@"order"][@"PayOrderResult"];
1346 NSLog(@"res = %@", res);
1347 order.identifier = responseObject[@"order"][@"@attributes"][@"id"];
1348 __block NSArray *newTickets = @[];
1349 __block NSArray *newBackTickets = @[];
1350 if ([res isKindOfClass:NSDictionary.class]) {
1351 TmhOrderTicket *ticket = [order.tickets firstObject];
1352 NSDictionary *attr = res[@"@attributes"];
1353 ticket.orderId = attr[@"OrderId"];
1354 ticket.reserveId = nil;
1355 if(order.isBack)
1356 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1357 newTickets = [newTickets arrayByAddingObject:ticket];
1358 order.tickets = newTickets;
1359 order.backTickets = newBackTickets;
1360 } else {
1361 int i = 0;
1362 for(NSDictionary *item in res) {
1363 if(i < order.tickets.count) {
1364 TmhOrderTicket *ticket = [order.tickets objectAtIndex:i];
1365 NSDictionary *attr = item[@"@attributes"];
1366 ticket.orderId = attr[@"OrderId"];
1367 ticket.reserveId = nil;
1368 newTickets = [newTickets arrayByAddingObject:ticket];
1369 } else {
1370 TmhOrderTicket *ticket = [order.backTickets objectAtIndex:i-order.tickets.count];
1371 NSDictionary *attr = item[@"@attributes"];
1372 ticket.orderId = attr[@"OrderId"];
1373 ticket.reserveId = nil;
1374 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1375 }
1376 i++;
1377 }
1378 order.tickets = newTickets;
1379 order.backTickets = newBackTickets;
1380 }
1381 [self.navigationController.view hideWait];
1382 order.buyDate = [[TmhSettings new] getMSKDate];
1383 order.email = [NSString stringWithFormat:@"%d", [settings offset]];
1384 if([[NSUserDefaults standardUserDefaults]objectForKey:@"hash"])
1385 order.from_hash = @[]; else
1386 order.from_hash = nil;
1387 [settings addOrder:order];
1388 [self.navigationController popToRootViewControllerAnimated:NO];
1389
1390 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
1391 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
1392 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
1393 NSLog(@"err = %@", error);
1394 [self.navigationController.view hideWait];
1395 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1396 [self.nextButton setEnabled:YES];
1397 }];
1398}
1399
1400- (void)onlyLgotaBuyN6:(NSString *)code
1401{
1402 [self.navigationController.view showWaitString:@"Отправка"];
1403 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
1404 @"item" : [self createOrderWithOrder:order],
1405 @"benefitPhone" : lgota_ticket.phone,
1406 @"phoneCode" : code,
1407 @"personalId" : lgota_ticket.personalId
1408 }];
1409 //[payment.token.paymentData base64EncodedStringWithOptions:nil]
1410 NSLog(@"%@", params);
1411 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
1412 [manager.requestSerializer setTimeoutInterval:100.0];
1413
1414 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=bonus_transaction_n7&result_type=json&email=%@&phone=%@&key_client=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@", /*order.train.type==TmhTrainTypeComfortable ? @"":order.email*/ [self urlEncode:order.email], [self urlEncode:settings.phone], [TmhAPI getKey], [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token]];
1415
1416 [manager POST:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
1417 [self.navigationController.view hideWait];
1418 [self.nextButton setEnabled:YES];
1419 NSLog(@"response Object of register = %@", responseObject);
1420 NSString *stringRes = responseObject[@"order"][@"@attributes"][@"IsSucceeded"];
1421 NSLog(@"stringRes = %@", stringRes);
1422 if(![stringRes isEqualToString:@"True"]) {
1423 [self.navigationController.view showErrorWithText:@"Ошибка при оплате"];
1424 [self.nextButton setEnabled:YES];
1425 return;
1426 }
1427 NSDictionary *res = responseObject[@"order"][@"PayOrderResult"];
1428 NSLog(@"res = %@", res);
1429 order.identifier = responseObject[@"order"][@"@attributes"][@"id"];
1430 __block NSArray *newTickets = @[];
1431 __block NSArray *newBackTickets = @[];
1432 if ([res isKindOfClass:NSDictionary.class]) {
1433 TmhOrderTicket *ticket = [order.tickets firstObject];
1434 NSDictionary *attr = res[@"@attributes"];
1435 ticket.orderId = attr[@"OrderId"];
1436 ticket.reserveId = nil;
1437 if(order.isBack)
1438 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1439 newTickets = [newTickets arrayByAddingObject:ticket];
1440 order.tickets = newTickets;
1441 order.backTickets = newBackTickets;
1442 } else {
1443 int i = 0;
1444 for(NSDictionary *item in res) {
1445 TmhOrderTicket *ticket = [order.tickets objectAtIndex:i];
1446 NSDictionary *attr = item[@"@attributes"];
1447 ticket.orderId = attr[@"OrderId"];
1448 ticket.reserveId = nil;
1449 newTickets = [newTickets arrayByAddingObject:ticket];
1450 i++;
1451 }
1452 order.tickets = newTickets;
1453 order.backTickets = newBackTickets;
1454 }
1455 [self.navigationController.view hideWait];
1456 order.buyDate = [[TmhSettings new] getMSKDate];
1457 order.email = [NSString stringWithFormat:@"%d", [settings offset]];
1458 if([[NSUserDefaults standardUserDefaults]objectForKey:@"hash"])
1459 order.from_hash = @[]; else
1460 order.from_hash = nil;
1461 [settings addOrder:order];
1462 [self.navigationController popToRootViewControllerAnimated:NO];
1463
1464 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
1465 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
1466 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
1467 NSLog(@"err = %@", error);
1468 [self.navigationController.view hideWait];
1469 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1470 [self.nextButton setEnabled:YES];
1471 }];
1472}
1473
1474- (void)bonusBuyN7:(NSString *)code
1475{
1476 [self.navigationController.view showWaitString:@"Отправка"];
1477 TmhAPI *api = [[TmhAPI new] init];
1478 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
1479 @"items" : [api getComfortItems:order],
1480 @"benefitPhone" : [settings getString:@"user_phone"],
1481 @"phoneCode" : code,
1482 @"bonusUserId" : [settings getString:@"bonusUserId"]
1483 }];
1484
1485 if(order.isBack) {
1486 NSString *reserves = @"";
1487 for(int i = 0; i < order.tickets.count; i++)
1488 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.tickets[i]).reserveId];
1489 for(int i = 0; i < order.backTickets.count; i++)
1490 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.backTickets[i]).reserveId];
1491
1492 reserves = [reserves substringToIndex:[reserves length] - 1];
1493 [params setValue:reserves forKey:@"items_sort"];
1494 }
1495 //[payment.token.paymentData base64EncodedStringWithOptions:nil]
1496 NSLog(@"%@", params);
1497 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
1498 [manager.requestSerializer setTimeoutInterval:100.0];
1499
1500 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=bonus_transaction_n7&result_type=json&email=%@&phone=%@&key_client=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@&order_id=%@", /*order.train.type==TmhTrainTypeComfortable ? @"":order.email*/ [self urlEncode:order.email], [self urlEncode:settings.phone], [TmhAPI getKey], [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], order.identifier];
1501 NSLog(@"address = %@", address);
1502
1503 [manager POST:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
1504 [self.nextButton setEnabled:YES];
1505 NSLog(@"response Object of register = %@", responseObject);
1506 NSString *stringRes = responseObject[@"order"][@"@attributes"][@"IsSucceeded"];
1507 NSLog(@"stringRes = %@", stringRes);
1508 if(![stringRes isEqualToString:@"True"]) {
1509 [self.navigationController.view showErrorWithText:@"Ошибка при оплате"];
1510 [self.nextButton setEnabled:YES];
1511 return;
1512 }
1513 NSDictionary *res = responseObject[@"order"][@"PayOrderResult"];
1514 NSLog(@"res = %@", res);
1515 order.identifier = responseObject[@"order"][@"@attributes"][@"id"];
1516 __block NSArray *newTickets = @[];
1517 __block NSArray *newBackTickets = @[];
1518 if ([res isKindOfClass:NSDictionary.class]) {
1519 TmhOrderTicket *ticket = [order.tickets firstObject];
1520 NSDictionary *attr = res[@"@attributes"];
1521 ticket.orderId = attr[@"OrderId"];
1522 ticket.reserveId = nil;
1523 if(order.isBack)
1524 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1525 newTickets = [newTickets arrayByAddingObject:ticket];
1526 order.tickets = newTickets;
1527 order.backTickets = newBackTickets;
1528 } else {
1529 int i = 0;
1530 for(NSDictionary *item in res) {
1531 if(i < order.tickets.count) {
1532 TmhOrderTicket *ticket = [order.tickets objectAtIndex:i];
1533 NSDictionary *attr = item[@"@attributes"];
1534 ticket.orderId = attr[@"OrderId"];
1535 ticket.reserveId = nil;
1536 newTickets = [newTickets arrayByAddingObject:ticket];
1537 } else {
1538 TmhOrderTicket *ticket = [order.backTickets objectAtIndex:i-order.tickets.count];
1539 NSDictionary *attr = item[@"@attributes"];
1540 ticket.orderId = attr[@"OrderId"];
1541 ticket.reserveId = nil;
1542 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1543 }
1544 i++;
1545 }
1546 order.tickets = newTickets;
1547 order.backTickets = newBackTickets;
1548 }
1549 [self.navigationController.view hideWait];
1550 order.buyDate = [[TmhSettings new] getMSKDate];
1551 order.email = [NSString stringWithFormat:@"%d", [settings offset]];
1552 if([[NSUserDefaults standardUserDefaults]objectForKey:@"hash"])
1553 order.from_hash = @[]; else
1554 order.from_hash = nil;
1555 [settings addOrder:order];
1556 [self.navigationController popToRootViewControllerAnimated:NO];
1557
1558 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
1559 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
1560 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
1561 NSLog(@"err = %@", error);
1562 [self.navigationController.view hideWait];
1563 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1564 [self.nextButton setEnabled:YES];
1565 }];
1566}
1567
1568- (void)bonusBuyN6:(NSString *)code
1569{
1570 [self.navigationController.view showWaitString:@"Отправка"];
1571 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
1572 @"item" : [self createOrderWithOrder:order],
1573 @"benefitPhone" : [settings getString:@"user_phone"],
1574 @"phoneCode" : code,
1575 @"bonusUserId" : [settings getString:@"bonusUserId"]
1576 }];
1577 NSLog(@"%@", params);
1578 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
1579 [manager.requestSerializer setTimeoutInterval:100.0];
1580
1581 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=bonus_transaction_n6&result_type=json&email=%@&phone=%@&key_client=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@", /*order.train.type==TmhTrainTypeComfortable ? @"":order.email*/ [self urlEncode:order.email], [self urlEncode:settings.phone], [TmhAPI getKey], [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token]];
1582 NSLog(@"address = %@", address);
1583
1584 [manager POST:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
1585 [self.navigationController.view hideWait];
1586 [self.nextButton setEnabled:YES];
1587 NSLog(@"response Object of register = %@", responseObject);
1588 NSString *stringRes = responseObject[@"order"][@"@attributes"][@"IsSucceeded"];
1589 NSLog(@"stringRes = %@", stringRes);
1590 if(![stringRes isEqualToString:@"True"]) {
1591 [self.navigationController.view showErrorWithText:@"Ошибка при оплате"];
1592 [self.nextButton setEnabled:YES];
1593 return;
1594 }
1595 NSDictionary *res = responseObject[@"order"][@"PayOrderResult"];
1596 NSLog(@"res = %@", res);
1597 order.identifier = responseObject[@"order"][@"@attributes"][@"id"];
1598 __block NSArray *newTickets = @[];
1599 __block NSArray *newBackTickets = @[];
1600 if ([res isKindOfClass:NSDictionary.class]) {
1601 TmhOrderTicket *ticket = [order.tickets firstObject];
1602 NSDictionary *attr = res[@"@attributes"];
1603 ticket.orderId = attr[@"OrderId"];
1604 ticket.reserveId = nil;
1605 if(order.isBack)
1606 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1607 newTickets = [newTickets arrayByAddingObject:ticket];
1608 order.tickets = newTickets;
1609 order.backTickets = newBackTickets;
1610 } else {
1611 int i = 0;
1612 for(NSDictionary *item in res) {
1613 TmhOrderTicket *ticket = [order.tickets objectAtIndex:i];
1614 NSDictionary *attr = item[@"@attributes"];
1615 ticket.orderId = attr[@"OrderId"];
1616 ticket.reserveId = nil;
1617 newTickets = [newTickets arrayByAddingObject:ticket];
1618 i++;
1619 }
1620 order.tickets = newTickets;
1621 order.backTickets = newBackTickets;
1622 }
1623 [self.navigationController.view hideWait];
1624 order.buyDate = [[TmhSettings new] getMSKDate];
1625 order.email = [NSString stringWithFormat:@"%d", [settings offset]];
1626 if([[NSUserDefaults standardUserDefaults]objectForKey:@"hash"])
1627 order.from_hash = @[]; else
1628 order.from_hash = nil;
1629 [settings addOrder:order];
1630 [self.navigationController popToRootViewControllerAnimated:NO];
1631
1632 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
1633 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
1634 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
1635 NSLog(@"err = %@", error);
1636 [self.navigationController.view hideWait];
1637 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1638 [self.nextButton setEnabled:YES];
1639 }];
1640}
1641
1642- (void)showPhonePicker
1643{
1644 picker_type = 6660;
1645 phones = [[NSMutableArray alloc] init];
1646 int count = 0;
1647 UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"Выберите телефон для СМС подтверждения"
1648 delegate:self
1649 cancelButtonTitle:nil
1650 destructiveButtonTitle:nil
1651 otherButtonTitles:nil];
1652 for (TmhOrderTicket *c in order.tickets) {
1653 if(c.type == 666) {
1654 [as addButtonWithTitle:[NSString stringWithFormat:@"%@ %@.%@. - %@", c.lastName, [c.firstName substringToIndex:1], [c.middleName substringToIndex:1], c.phone]];
1655 }
1656 [phones addObject:c.phone];
1657 count++;
1658 }
1659 as.cancelButtonIndex = count;
1660 [as showInView:self.view];
1661}
1662
1663- (IBAction)nextButton:(id)sender
1664{
1665 [self.nextButton setEnabled:NO];
1666 if(self.tabBarController.selectedIndex!=1) {
1667 UIViewController *vc1 = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier:@"nav_schedule"];
1668 NSMutableArray *controllers = self.tabBarController.viewControllers;
1669 controllers[1] = vc1;
1670 [self.tabBarController setViewControllers:controllers];
1671 }
1672 /*BOOL hasParents = NO;
1673 for(TmhOrderTicket *tick in order.tickets)
1674 if(tick.type==0 || tick.type>2) {
1675 hasParents = YES;
1676 }
1677 for(TmhOrderTicket *tick in order.backTickets)
1678 if(tick.type==0 || tick.type>2) {
1679 hasParents = YES;
1680 }
1681 if(!hasParents) {
1682 UIAlertView *mess = [[UIAlertView alloc]
1683 initWithTitle:@"Ошибка" message:@"Нельзя оформить заказ без взрослых билетов" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
1684 [mess show];
1685 return;
1686 }*/
1687 if(order.train.type != TmhTrainTypeComfortable && [[self totalCostDiscomf] doubleValue]==0.0) {
1688 NSLog(@"only_lgota DISCOMF");
1689 if(order.tickets.count == 1) {
1690 NSLog(@"oneTicket");
1691 lgota_ticket = (TmhOrderTicket *)order.tickets[0];
1692 [self sendConfirmPhone:((TmhOrderTicket *)order.tickets[0]).phone];
1693 } else {
1694 NSLog(@"MANY Tickets");
1695 [self showPhonePicker];
1696 }
1697 return;
1698 }
1699 if(order.train.type == TmhTrainTypeComfortable && [[self totalCostComfort] doubleValue]==0.0) {
1700 NSLog(@"only_lgota DISCOMF");
1701 if(order.tickets.count == 1) {
1702 NSLog(@"oneTicket");
1703 lgota_ticket = (TmhOrderTicket *)order.tickets[0];
1704 [self sendConfirmPhone:((TmhOrderTicket *)order.tickets[0]).phone];
1705 } else {
1706 NSLog(@"MANY Tickets");
1707 [self showPhonePicker];
1708 }
1709 return;
1710 }
1711 if (order.method == TmhOrderMethodBuy) {
1712 [self showBuy];
1713 } else {
1714 [self registerOrder];
1715 }
1716}
1717
1718- (NSString *)urlEncode:(NSString*)str {
1719 return [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
1720}
1721
1722/*- (int)getTickType:(TmhOrderTicket *)ticket {
1723 NSArray *arr_cat = [[TmhSettings new] getBiletTypes];
1724 return [((TmhCat *)arr_cat[ticket.type]).type intValue];
1725}
1726
1727- (int)getTickLgota:(TmhOrderTicket *)ticket {
1728 NSArray *arr_cat = [[TmhSettings new] getBiletTypes];
1729 return [((TmhCat *)arr_cat[ticket.type]).lgota intValue];
1730}*/
1731
1732- (int)getTickType:(TmhOrderTicket *)ticket {
1733 NSArray *arr_cat = [[TmhSettings new] getBiletTypes];
1734 int t = [((TmhCat *)arr_cat[ticket.type]).type intValue];
1735 for(TmhCat *tt in arr_cat) {
1736 if([tt.name isEqualToString:ticket.lgotaString]) {
1737 t = [tt.type intValue];
1738 }
1739 }
1740 return t;
1741}
1742
1743- (int)getTickLgota:(TmhOrderTicket *)ticket {
1744 NSArray *arr_cat = [[TmhSettings new] getBiletTypes];
1745 int t = [((TmhCat *)arr_cat[ticket.type]).lgota intValue];
1746 for(TmhCat *tt in arr_cat) {
1747 if([tt.name isEqualToString:ticket.lgotaString]) {
1748 t = [tt.lgota intValue];
1749 }
1750 }
1751 return t;
1752}
1753
1754- (void)paymentAuthorizationViewControllerWillAuthorizePayment:(PKPaymentAuthorizationViewController *)controller {
1755 NSLog(@"paymentAuthorizationViewControllerWillAuthorizePayment");
1756
1757}
1758
1759- (NSString*)base64forData:(NSData*)theData {
1760
1761 const uint8_t* input = (const uint8_t*)[theData bytes];
1762 NSInteger length = [theData length];
1763
1764 static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
1765
1766 NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
1767 uint8_t* output = (uint8_t*)data.mutableBytes;
1768
1769 NSInteger i;
1770 for (i=0; i < length; i += 3) {
1771 NSInteger value = 0;
1772 NSInteger j;
1773 for (j = i; j < (i + 3); j++) {
1774 value <<= 8;
1775
1776 if (j < length) {
1777 value |= (0xFF & input[j]);
1778 }
1779 }
1780
1781 NSInteger theIndex = (i / 3) * 4;
1782 output[theIndex + 0] = table[(value >> 18) & 0x3F];
1783 output[theIndex + 1] = table[(value >> 12) & 0x3F];
1784 output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '=';
1785 output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '=';
1786 }
1787
1788 return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] ;
1789}
1790
1791- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion {
1792 NSLog(@"did authorize payment token: %@, %@", payment.token, payment.token.transactionIdentifier);
1793 if (order.train.type != TmhTrainTypeComfortable) {
1794 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
1795 @"item" : [self createOrderWithOrder:order],
1796 @"paymentData" : [self base64forData:payment.token.paymentData],
1797 @"paymentDataType" : @"applePay"
1798 }];
1799 //[payment.token.paymentData base64EncodedStringWithOptions:nil]
1800 NSLog(@"%@", params);
1801 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
1802 [manager.requestSerializer setTimeoutInterval:100.0];
1803 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=token_pay_n6&result_type=json&email=%@&phone=%@&key_client=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@&bonusUserId=%@", /*order.train.type==TmhTrainTypeComfortable ? @"":order.email*/ [self urlEncode:order.email], [self urlEncode:settings.phone], [TmhAPI getKey], [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], canBonusPayment ? [settings getString:@"bonusUserId"] : @""];
1804 NSLog(@"address = %@", address);
1805
1806 [manager POST:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
1807 [self.nextButton setEnabled:YES];
1808 NSLog(@"response Object of register = %@", responseObject);
1809 NSString *stringRes = responseObject[@"order"][@"@attributes"][@"IsSucceeded"];
1810 NSLog(@"stringRes = %@", stringRes);
1811 if(![stringRes isEqualToString:@"True"]) {
1812 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1813 completion(PKPaymentAuthorizationStatusFailure);
1814 return;
1815 }
1816 NSDictionary *res = responseObject[@"order"][@"PayOrderResult"];
1817 NSLog(@"res = %@", res);
1818 order.identifier = responseObject[@"order"][@"@attributes"][@"id"];
1819 __block NSArray *newTickets = @[];
1820 __block NSArray *newBackTickets = @[];
1821 if ([res isKindOfClass:NSDictionary.class]) {
1822 TmhOrderTicket *ticket = [order.tickets firstObject];
1823 NSDictionary *attr = res[@"@attributes"];
1824 ticket.orderId = attr[@"OrderId"];
1825 ticket.reserveId = nil;
1826 if(order.isBack)
1827 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1828 newTickets = [newTickets arrayByAddingObject:ticket];
1829 order.tickets = newTickets;
1830 order.backTickets = newBackTickets;
1831 } else {
1832 int i = 0;
1833 for(NSDictionary *item in res) {
1834 TmhOrderTicket *ticket = [order.tickets objectAtIndex:i];
1835 NSDictionary *attr = item[@"@attributes"];
1836 ticket.orderId = attr[@"OrderId"];
1837 ticket.reserveId = nil;
1838 newTickets = [newTickets arrayByAddingObject:ticket];
1839 i++;
1840 }
1841 order.tickets = newTickets;
1842 order.backTickets = newBackTickets;
1843 }
1844 [self.navigationController.view hideWait];
1845 order.buyDate = [[TmhSettings new] getMSKDate];
1846 order.email = [NSString stringWithFormat:@"%d", [settings offset]];
1847 if([[NSUserDefaults standardUserDefaults]objectForKey:@"hash"])
1848 order.from_hash = @[]; else
1849 order.from_hash = nil;
1850 [settings addOrder:order];
1851 apple_payed = YES;
1852
1853
1854
1855
1856 //[self.navigationController popToRootViewControllerAnimated:NO];
1857
1858 //UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
1859 //[[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
1860 completion(PKPaymentAuthorizationStatusSuccess);
1861 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
1862 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1863 [self.nextButton setEnabled:YES];
1864 completion(PKPaymentAuthorizationStatusFailure);
1865 }];
1866 } else {
1867 TmhAPI *api = [TmhAPI new];
1868
1869
1870 NSMutableArray *tmp = @[[NSData new], [NSData new]];
1871 for(int i = 0; i < order.childs.count; i++)
1872 ((TmhOrderTicket *)order.childs[i]).images = tmp;
1873 apple_reserved = YES;
1874 [api cancelOrder:order
1875 onSuccess:^(TmhOrder *order_) {
1876 [api registerOrderForBuy:order
1877 onSuccess:^(TmhOrder *order__) {
1878 //NSString *url = [NSString stringWithFormat:@"%@&key_client=%@&order_id=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@%@", [api urlNoCache:@"token_pay_n7"], [TmhAPI getKey], order.identifier, [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], [self generateTickets]];
1879 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
1880 @"paymentData" : [self base64forData:payment.token.paymentData],
1881 @"paymentDataType" : @"applePay",
1882 @"items" : [api getComfortItems:order]
1883 }];
1884
1885 if(order.isBack) {
1886 NSString *reserves = @"";
1887 for(int i = 0; i < order.tickets.count; i++)
1888 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.tickets[i]).reserveId];
1889 for(int i = 0; i < order.backTickets.count; i++)
1890 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.backTickets[i]).reserveId];
1891
1892 reserves = [reserves substringToIndex:[reserves length] - 1];
1893 [params setValue:reserves forKey:@"items_sort"];
1894 }
1895
1896
1897 NSLog(@"params = %@", params);
1898
1899
1900 NSString *url = [NSString stringWithFormat:@"%@&key_client=%@&order_id=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@&email=%@&bonusUserId=%@", [api urlNoCache:@"token_pay_n7"], [TmhAPI getKey], order.identifier, [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], [self urlEncode:order.email], canBonusPayment ? [settings getString:@"bonusUserId"] : @""];
1901 NSLog(@"payurl = %@", url);
1902 if(apple_stop) {
1903 NSLog(@"apple_stop = YES");
1904 completion(PKPaymentAuthorizationStatusFailure);
1905 return;
1906 }
1907 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
1908 [manager.requestSerializer setTimeoutInterval:150.0];
1909 //manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
1910 //AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
1911 //[manager setResponseSerializer:responseSerializer];
1912 [manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
1913
1914 NSLog(@"response Object of register = %@", responseObject);
1915
1916 NSDictionary *data = responseObject;
1917 NSString *stringRes = responseObject[@"order"][@"@attributes"][@"IsSucceeded"];
1918 NSLog(@"stringRes = %@", stringRes);
1919 if(![stringRes isEqualToString:@"True"]) {
1920 completion(PKPaymentAuthorizationStatusFailure);
1921 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1922 return;
1923 }
1924 NSArray *result = data[@"order"][@"PayOrderResult"];
1925 if ([result isKindOfClass:NSDictionary.class]) {
1926 result = @[result];
1927 }
1928 if (result.count) {
1929 NSArray *newTickets = @[];
1930 NSArray *newBackTickets = @[];
1931 for (NSDictionary *d in result) {
1932 NSDictionary *dict = d[@"@attributes"];
1933 NSString *reserveId = dict[@"oldReserveId"];
1934 BOOL isFound = NO;
1935 for (TmhOrderTicket *ticket in order.tickets) {
1936 if ([ticket.reserveId isEqualToString:reserveId]
1937 && [dict[@"IsSucceeded"] boolValue]) {
1938 ticket.orderId = dict[@"OrderId"];
1939 ticket.url = dict[@"TicketURL"];
1940 ticket.reserveId = nil;
1941 isFound = YES;
1942 newTickets = [newTickets arrayByAddingObject:ticket];
1943 break;
1944 }
1945 }
1946 if (! isFound) {
1947 for (TmhOrderTicket *ticket in order.backTickets) {
1948 if ([ticket.reserveId isEqualToString:reserveId]
1949 && [dict[@"IsSucceeded"] boolValue]) {
1950 ticket.orderId = dict[@"OrderId"];
1951 ticket.url = dict[@"TicketURL"];
1952 ticket.reserveId = nil;
1953 isFound = YES;
1954 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
1955 break;
1956 }
1957 }
1958 }
1959 if (! isFound) {
1960 completion(PKPaymentAuthorizationStatusFailure);
1961 return;
1962 }
1963 }
1964 order.tickets = newTickets;
1965 order.backTickets = newBackTickets;
1966
1967
1968 }
1969
1970 [self.navigationController.view hideWait];
1971
1972
1973 order.buyDate = [[TmhSettings new] getMSKDate];
1974 order.canMakeReturn = [settings canMakeReturn];
1975 order.restrictionReturn = [settings restrictionReturn];
1976 order.TimetoReturn = [settings TimetoReturn];
1977 order.email = [NSString stringWithFormat:@"%d", [settings offset]];
1978 if([[NSUserDefaults standardUserDefaults]objectForKey:@"hash"])
1979 order.from_hash = @[]; else
1980 order.from_hash = nil;
1981 [settings addOrder:order];
1982 apple_payed = YES;
1983 completion(PKPaymentAuthorizationStatusSuccess);
1984
1985 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
1986 NSLog(@"error = %@", error);
1987 [self.navigationController.view showErrorWithText:@"Сбой оплаты"];
1988 completion(PKPaymentAuthorizationStatusFailure);
1989 }];
1990 /*[api pay:order
1991 paymentData:[self base64forData:payment.token.paymentData]
1992 success:^(NSDictionary *responseObject) {
1993 [self.navigationController.view hideWait];
1994 NSLog(@"response Object of register = %@", responseObject);
1995
1996 NSDictionary *data = responseObject;
1997 NSString *stringRes = responseObject[@"order"][@"@attributes"][@"IsSucceeded"];
1998 NSLog(@"stringRes = %@", stringRes);
1999 if(![stringRes isEqualToString:@"True"]) {
2000 completion(PKPaymentAuthorizationStatusFailure);
2001 return;
2002 }
2003 NSArray *result = data[@"order"][@"PayOrderResult"];
2004 if ([result isKindOfClass:NSDictionary.class]) {
2005 result = @[result];
2006 }
2007 if (result.count) {
2008 NSArray *newTickets = @[];
2009 NSArray *newBackTickets = @[];
2010 for (NSDictionary *d in result) {
2011 NSDictionary *dict = d[@"@attributes"];
2012 NSString *reserveId = dict[@"oldReserveId"];
2013 BOOL isFound = NO;
2014 for (TmhOrderTicket *ticket in order.tickets) {
2015 if ([ticket.reserveId isEqualToString:reserveId]
2016 && [dict[@"IsSucceeded"] boolValue]) {
2017 ticket.orderId = dict[@"OrderId"];
2018 ticket.url = dict[@"TicketURL"];
2019 ticket.reserveId = nil;
2020 isFound = YES;
2021 newTickets = [newTickets arrayByAddingObject:ticket];
2022 break;
2023 }
2024 }
2025 if (! isFound) {
2026 for (TmhOrderTicket *ticket in order.backTickets) {
2027 if ([ticket.reserveId isEqualToString:reserveId]
2028 && [dict[@"IsSucceeded"] boolValue]) {
2029 ticket.orderId = dict[@"OrderId"];
2030 ticket.url = dict[@"TicketURL"];
2031 ticket.reserveId = nil;
2032 isFound = YES;
2033 newBackTickets = [newBackTickets arrayByAddingObject:ticket];
2034 break;
2035 }
2036 }
2037 }
2038 if (! isFound) {
2039 completion(PKPaymentAuthorizationStatusFailure);
2040 return;
2041 }
2042 }
2043 order.tickets = newTickets;
2044 order.backTickets = newBackTickets;
2045
2046
2047 }
2048
2049 [self.navigationController.view hideWait];
2050
2051
2052 order.buyDate = [[TmhSettings new] getMSKDate];
2053 order.canMakeReturn = [settings canMakeReturn];
2054 order.restrictionReturn = [settings restrictionReturn];
2055 order.TimetoReturn = [settings TimetoReturn];
2056 order.email = [NSString stringWithFormat:@"%d", [settings offset]];
2057 if([[NSUserDefaults standardUserDefaults]objectForKey:@"hash"])
2058 order.from_hash = @[]; else
2059 order.from_hash = nil;
2060 [settings addOrder:order];
2061 apple_payed = YES;
2062 completion(PKPaymentAuthorizationStatusSuccess);
2063 } error:nil];*/
2064 }
2065 onError:nil];
2066 } onError:nil];
2067 }
2068 //completion(PKPaymentAuthorizationStatusFailure);
2069}
2070
2071- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
2072 NSLog(@"finish");
2073 apple_stop = YES;
2074 [self.view hideWait];
2075 [controller dismissViewControllerAnimated:controller completion:^{
2076 if(order.train.type != TmhTrainTypeComfortable) {
2077 if(apple_payed) {
2078 [self.navigationController popToRootViewControllerAnimated:NO];
2079
2080 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
2081 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
2082 } else {
2083 [self.nextButton setEnabled:YES];
2084 }
2085 }
2086 if(order.train.type == TmhTrainTypeComfortable) {
2087 if(apple_payed) {
2088 if([@"1" isEqualToString:@"1"]) {
2089 [self.navigationController popToRootViewControllerAnimated:NO];
2090 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone"
2091 bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
2092 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
2093 } else {
2094 [self dismissViewControllerAnimated:NO completion:^{
2095 [self.navigationController popToRootViewControllerAnimated:NO];
2096 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone"
2097 bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessBuy"];
2098 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
2099 }];
2100 }
2101 } else {
2102 if(!apple_reserved) {
2103 [self.nextButton setEnabled:YES];
2104 } else {
2105 self.navigationItem.hidesBackButton = YES;
2106 [self.navigationController.view showWaitString:@"Снятие резервов"];
2107 [self cancelReserve];
2108 }
2109 }
2110 }
2111 }];
2112}
2113
2114- (NSString *)totalCostDiscomf
2115{
2116 TmhOrderTicket *ticket = [order.tickets firstObject];
2117 price = 0;
2118
2119 bag = 0;
2120 pet = 0;
2121 bike = 0;
2122
2123 [[order tickets] enumerateObjectsUsingBlock:^(TmhOrderTicket *tick, NSUInteger idx, BOOL * _Nonnull stop) {
2124 bag = bag + (tick.isBaggage) + (tick.isBaggageBack);
2125 pet = pet + (tick.isAnimal) + (tick.isAnimalBack);
2126 bike = bike + (tick.isBike) + (tick.isBikeBack);
2127 }];
2128
2129 NSLog(@"bag = %d", bag);
2130 NSLog(@"pet = %d", pet);
2131 NSLog(@"bike = %d", bike);
2132
2133
2134 [[order tickets] enumerateObjectsUsingBlock:^(TmhOrderTicket *tick, NSUInteger idx, BOOL * _Nonnull stop) {
2135
2136 price += (float)tick.price;
2137
2138 if (tick.isBaggage) {
2139 price += [ticket.costs[0] floatValue]*tick.isBaggage;
2140 }
2141
2142 if (tick.isAnimal) {
2143 price += [ticket.costs[1] floatValue]*tick.isAnimal;
2144 }
2145
2146 if (tick.isBike) {
2147 price += [ticket.costs[2] floatValue]*tick.isBike;
2148 }
2149 if(order.isBack) {
2150 price += (float)tick.price;
2151 }
2152 }];
2153 NSLog(@"price = %f", price);
2154 return [NSString stringWithFormat:@"%.2f", price];
2155}
2156
2157- (NSString *)totalCostComfort
2158{
2159 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
2160 //formatter.roundingIncrement = [NSNumber numberWithFloat:0.02];
2161 //[formatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
2162 formatter.numberStyle = NSNumberFormatterDecimalStyle;
2163 [formatter setGroupingSeparator:@""];
2164 NSString *resInt = [formatter stringFromNumber: [NSNumber numberWithInt: [order totalPrice]]];
2165 NSArray *arr = [[NSString stringWithFormat:@"%.2f", [order totalPrice]] componentsSeparatedByString:@"."];
2166 NSLog(@"costapple = %@", [NSString stringWithFormat:@"%@.%@", resInt, arr[1]]);
2167 return [NSString stringWithFormat:@"%@.%@", resInt, arr[1]];
2168}
2169
2170- (void)applePayDiscomf
2171{
2172 if([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa, PKPaymentNetworkMasterCard]]) {
2173 NSLog(@"PKPayment can make payments");
2174 } else {
2175 NSLog(@"payment is zhopa");
2176 //[self.view showErrorWithText:@"Данное устройство не может совершать платежи."];
2177 [self.navigationController.view showErrorWithText:@"Данное устройство не может совершать платежи."];
2178 [self.nextButton setEnabled:YES];
2179 return;
2180 }
2181 [self.view showWait];
2182
2183 PKPaymentRequest *payment = [[PKPaymentRequest alloc] init];
2184 PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:[settings getString:@"ppkEngName"] amount:[NSDecimalNumber decimalNumberWithString:[self totalCostDiscomf]]];
2185 payment.paymentSummaryItems = @[total];
2186 payment.currencyCode = @"RUB";
2187 payment.countryCode = @"RU";
2188 payment.merchantIdentifier = [settings getMerchant];
2189 payment.merchantCapabilities = PKMerchantCapability3DS;
2190 payment.supportedNetworks = @[PKPaymentNetworkVisa, PKPaymentNetworkMasterCard];
2191 NSLog(@"payment: %@", payment);
2192 PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:payment];
2193 vc.delegate = self;
2194 [self presentViewController:vc animated:YES completion:NULL];
2195}
2196
2197- (void)applePayComfort
2198{
2199 if([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa, PKPaymentNetworkMasterCard]]) {
2200 NSLog(@"PKPayment can make payments");
2201 } else {
2202 NSLog(@"payment is zhopa");
2203 [self.navigationController.view showErrorWithText:@"Данное устройство не может совершать платежи."];
2204 [self.nextButton setEnabled:YES];
2205 return;
2206 }
2207 [self.view showWait];
2208
2209 PKPaymentRequest *payment = [[PKPaymentRequest alloc] init];
2210 PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"Билеты" amount:[NSDecimalNumber decimalNumberWithString:[self totalCostComfort]]];
2211 payment.paymentSummaryItems = @[total];
2212 payment.currencyCode = @"RUB";
2213 payment.countryCode = @"RU";
2214 payment.merchantIdentifier = [settings getMerchant];
2215 payment.merchantCapabilities = PKMerchantCapability3DS;
2216 payment.supportedNetworks = @[PKPaymentNetworkVisa, PKPaymentNetworkMasterCard];
2217 NSLog(@"payment: %@", payment);
2218 PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:payment];
2219 vc.delegate = self;
2220 [self presentViewController:vc animated:YES completion:NULL];
2221}
2222
2223- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
2224 if(buttonIndex == 1) {
2225 if(noMoneyPay == 1) {
2226 if(order.train.type == TmhTrainTypeComfortable) {
2227 [self onlyLgotaBuyN7:[[alertView textFieldAtIndex:0] text]];
2228 } else {
2229 [self onlyLgotaBuyN6:[[alertView textFieldAtIndex:0] text]];
2230 }
2231 } else {
2232 if(order.train.type == TmhTrainTypeComfortable) {
2233 [self bonusBuyN7:[[alertView textFieldAtIndex:0] text]];
2234 } else {
2235 [self bonusBuyN6:[[alertView textFieldAtIndex:0] text]];
2236 }
2237 }
2238 } else {
2239 [self.nextButton setEnabled:YES];
2240 }
2241}
2242
2243- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
2244{
2245 if(picker_type == 1) {
2246 if (order.train.type != TmhTrainTypeComfortable) {
2247 if(buttonIndex == 1 && [[settings getApplePay] isEqualToString:@"1"]) {
2248 [self applePayDiscomf];
2249 } else if(buttonIndex == 0) {
2250 [self payDiscomf];
2251 } else if(buttonIndex == 2 && canPayBonus && [[settings getApplePay] isEqualToString:@"1"]) {
2252 noMoneyPay = 2;
2253 [self sendConfirmPhone:[settings getString:@"user_phone"]];
2254 } else if(buttonIndex == 1 && canPayBonus && ![[settings getApplePay] isEqualToString:@"1"]) {
2255 noMoneyPay = 2;
2256 [self sendConfirmPhone:[settings getString:@"user_phone"]];
2257 } else if(buttonIndex == 2+(canPayBonus?1:0)) {
2258 [self.nextButton setEnabled:YES];
2259 }
2260 } else {
2261 if(buttonIndex == 1) {
2262 [self applePayComfort];
2263 } else if(buttonIndex == 0) {
2264 [self payComfort];
2265 } else if(buttonIndex == 2 && canPayBonus) {
2266 noMoneyPay = 2;
2267 [self sendConfirmPhone:[settings getString:@"user_phone"]];
2268 } else if(buttonIndex == 2+(canPayBonus?1:0)) {
2269 [self.nextButton setEnabled:YES];
2270 }
2271 }
2272 }
2273 if(picker_type == 6660) {
2274 noMoneyPay = 1;
2275 for(TmhOrderTicket *tick in order.tickets)
2276 if(tick.type == 666 && [phones[buttonIndex] isEqualToString:tick.phone])
2277 lgota_ticket = tick;
2278 [self sendConfirmPhone:phones[buttonIndex]];
2279 }
2280}
2281
2282- (void)payComfort
2283{
2284 self.navigationItem.hidesBackButton = YES;
2285 [self.navigationController.view showWait];
2286
2287 TmhAPIError errorBlock = ^(int statusCode, NSDictionary *data) {
2288 self.navigationItem.hidesBackButton = NO;
2289 [self.navigationController.view hideWait];
2290 switch (statusCode) {
2291 case TmhConnectionStatusInternet:
2292 [self.navigationController.view showError:@"ERROR INTERNET"];
2293 break;
2294 default:
2295 [self.navigationController.view showError:@"ERROR PAY"];
2296 break;
2297 }
2298 };
2299 NSMutableArray *tmp = @[[NSData new], [NSData new]];
2300 for(int i = 0; i < order.childs.count; i++)
2301 ((TmhOrderTicket *)order.childs[i]).images = tmp;
2302 TmhAPI *api = [TmhAPI new];
2303 /*[api cancelOrder:order
2304 onSuccess:^(TmhOrder *order_) {
2305 [api registerOrderForBuy:order
2306 onSuccess:^(TmhOrder *order__) {*/
2307 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
2308 @"items" : [api getComfortItems:order]
2309 }];
2310 /*for(TmhOrderTicket *ticket in order.tickets) {
2311 [params setValue:[NSString stringWithFormat:@"%.2f", ticket.price] forKey:[NSString stringWithFormat:@"%@_price", ticket.reserveId]];
2312 }*/
2313
2314
2315 if(order.isBack) {
2316 NSString *reserves = @"";
2317 for(int i = 0; i < order.tickets.count; i++)
2318 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.tickets[i]).reserveId];
2319 for(int i = 0; i < order.backTickets.count; i++)
2320 reserves = [NSString stringWithFormat:@"%@%@,", reserves, ((TmhOrderTicket *)order.backTickets[i]).reserveId];
2321
2322 reserves = [reserves substringToIndex:[reserves length] - 1];
2323 [params setValue:reserves forKey:@"items_sort"];
2324 }
2325
2326
2327 NSLog(@"params = %@", params);
2328
2329 NSString *url = [NSString stringWithFormat:@"%@&key_client=%@&order_id=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@&email=%@&bonusUserId=%@", [api urlNoCache:@"pay"], [TmhAPI getKey], order.identifier, [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], [self urlEncode:order.email], canBonusPayment ? [settings getString:@"bonusUserId"] : @""];
2330 NSLog(@"payurl = %@", url);
2331 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2332 [manager.requestSerializer setTimeoutInterval:100.0];
2333
2334 [manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
2335 [self.navigationController.view hideWait];
2336 NSLog(@"response Object of register = %@", responseObject);
2337 NSString *url = [responseObject objectForKey:@"reply"];
2338 order.payUrl = [NSURL URLWithString:url];
2339
2340 [self performSegueWithIdentifier:@"OrderPay" sender:nil];
2341
2342 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
2343 [self.navigationController.view hideWait];
2344 [self.navigationController.view showError:@"ERROR INTERNET"];
2345 }];
2346 /*[api pay:order
2347 success:^(NSURL *url) {
2348 [self.navigationController.view hideWait];
2349 order.payUrl = url;
2350 [self performSegueWithIdentifier:@"OrderPay" sender:nil];
2351 } error:errorBlock];*/
2352 /*}
2353 onError:errorBlock];
2354 } onError:errorBlock];*/
2355}
2356
2357- (void)payDiscomf
2358{
2359 [self.nextButton setEnabled:NO];
2360 [self.navigationController.view showWait];
2361
2362 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
2363 @"item" : [self createOrderWithOrder:order]
2364 }];
2365 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2366 [manager.requestSerializer setTimeoutInterval:100.0];
2367 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=pay_n6&result_type=json&email=%@&phone=%@&key_client=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@&bonusUserId=%@", /*order.train.type==TmhTrainTypeComfortable ? @"":order.email*/ [self urlEncode:order.email], [self urlEncode:settings.phone], [TmhAPI getKey], [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], canBonusPayment ? [settings getString:@"bonusUserId"] : @""];
2368 NSLog(@"address = %@", address);
2369
2370 [manager POST:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
2371 [self.navigationController.view hideWait];
2372 [self.nextButton setEnabled:YES];
2373 NSLog(@"response Object of register = %@", responseObject);
2374
2375 NSString *url = [responseObject objectForKey:@"reply"];
2376 NSString *orderId = [responseObject objectForKey:@"order_id"];
2377 BOOL showAlert = NO;
2378 if([responseObject objectForKey:@"show_alert"] != nil) {
2379 showAlert = [[responseObject objectForKey:@"show_alert"] boolValue];
2380 }
2381 BOOL canBuy = YES;
2382 if([responseObject objectForKey:@"can_buy"] != nil) {
2383 canBuy = [[responseObject objectForKey:@"can_buy"] boolValue];
2384 }
2385
2386 order.payUrl = [NSURL URLWithString:url];
2387 order.identifier = orderId;
2388
2389 if(showAlert) {
2390 NSString *alertMsg = [responseObject objectForKey:@"alert_msg"];
2391 if(alertMsg == nil) {
2392 alertMsg = @"В вашей истории заказов уже есть заказ на выбранную дату и пассажиров. Продолжить и перейти к оплате?";
2393 }
2394 UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Внимание"
2395 message:alertMsg
2396 preferredStyle:UIAlertControllerStyleAlert];
2397 if(canBuy) {
2398 UIAlertAction* payAction = [UIAlertAction actionWithTitle:@"Продолжить оплату" style:UIAlertActionStyleDefault
2399 handler:^(UIAlertAction * action) {
2400 [self performSegueWithIdentifier:@"OrderPay" sender:nil];
2401 }];
2402 [alert addAction:payAction];
2403 }
2404
2405 UIAlertAction* historyAction = [UIAlertAction actionWithTitle:@"Отмена" style:UIAlertActionStyleDefault
2406 handler:^(UIAlertAction * action) {
2407 [self.navigationController popViewControllerAnimated:true];
2408 }];
2409
2410 [alert addAction:historyAction];
2411 [self presentViewController:alert animated:YES completion:nil];
2412 } else {
2413 [self performSegueWithIdentifier:@"OrderPay" sender:nil];
2414 }
2415
2416
2417 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
2418 [self.navigationController.view hideWait];
2419 [self.navigationController.view showError:@"ERROR INTERNET"];
2420 [self.nextButton setEnabled:YES];
2421 }];
2422}
2423
2424
2425
2426- (void)showBuy
2427{
2428 if(true) {
2429 picker_type = 1;
2430 UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"Способ оплаты"
2431 delegate:self
2432 cancelButtonTitle:nil
2433 destructiveButtonTitle:nil
2434 otherButtonTitles:nil];
2435 [as addButtonWithTitle:@"Оплатить картой"];
2436 if([[settings getApplePay] isEqualToString:@"1"])
2437 [as addButtonWithTitle:@"Apple Pay"];
2438 if(canPayBonus && canBonusPayment)
2439 [as addButtonWithTitle:@"Оплатить бонусами"];
2440 [as addButtonWithTitle:NSLocalizedString(@"CANCEL", nil)];
2441 as.cancelButtonIndex = 2+(canPayBonus?1:0);
2442 UIFont *font = [UIFont systemFontOfSize:20.0f];
2443 NSDictionary *attrs = @{ NSForegroundColorAttributeName : [UIColor colorWithRed:0.5 green:0 blue:0 alpha:1] , NSFontAttributeName: font};
2444 NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"Способ оплаты" attributes:attrs];
2445 UIAlertController *alertController = [as valueForKey:@"_alertController"];
2446 [alertController setValue:attrString forKey:@"_attributedTitle"];
2447 [as showInView:self.view];
2448 } else {
2449 if (order.train.type != TmhTrainTypeComfortable)
2450 [self payDiscomf]; else
2451 [self payComfort];
2452 }
2453 return;
2454 if (order.train.type != TmhTrainTypeComfortable) {
2455
2456 NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:@{
2457 @"item" : [self createOrderWithOrder:order]
2458 }];
2459
2460 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2461 NSString *address = [NSString stringWithFormat:@"https://mobile.svrpk.ru/v3.1/api.php?action=pay_n6&result_type=json&email=%@&phone=%@&key_client=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@", /*order.train.type==TmhTrainTypeComfortable ? @"":order.email*/ [self urlEncode:order.email], [self urlEncode:settings.phone], [TmhAPI getKey], [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token]];
2462 NSLog(@"address = %@", address);
2463
2464 /*[manager POST:address parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
2465 [self.nextButton setEnabled:YES];
2466 NSLog(@"response Object of register = %@", responseObject);
2467
2468 NSString *url = [responseObject objectForKey:@"reply"];
2469 NSString *orderId = [responseObject objectForKey:@"order_id"];
2470
2471 order.payUrl = [NSURL URLWithString:url];
2472 order.identifier = orderId;
2473
2474 [self performSegueWithIdentifier:@"OrderPay" sender:nil];
2475
2476 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
2477 [self.navigationController.view showError:@"ERROR INTERNET"];
2478 [self.nextButton setEnabled:YES];
2479 }];*/
2480 [self applePayDiscomf];
2481 }
2482 else
2483 {
2484 self.navigationItem.hidesBackButton = YES;
2485 [self.navigationController.view showWait];
2486
2487 TmhAPIError errorBlock = ^(int statusCode, NSDictionary *data) {
2488 self.navigationItem.hidesBackButton = NO;
2489 [self.navigationController.view hideWait];
2490 switch (statusCode) {
2491 case TmhConnectionStatusInternet:
2492 [self.navigationController.view showError:@"ERROR INTERNET"];
2493 break;
2494 default:
2495 [self.navigationController.view showError:@"ERROR PAY"];
2496 break;
2497 }
2498 };
2499 NSMutableArray *tmp = @[[NSData new], [NSData new]];
2500 for(int i = 0; i < order.childs.count; i++)
2501 ((TmhOrderTicket *)order.childs[i]).images = tmp;
2502 TmhAPI *api = [TmhAPI new];
2503 /*[api cancelOrder:order
2504 onSuccess:^(TmhOrder *order_) {
2505 [api registerOrderForBuy:order
2506 onSuccess:^(TmhOrder *order__) {*/
2507 NSString *url = [NSString stringWithFormat:@"%@&key_client=%@&order_id=%@&ppk_id=%@&hash_client=%@&mac=1&token=%@%@", [api urlNoCache:@"pay"], [TmhAPI getKey], order.identifier, [[TmhSettings new] ppk], [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] != nil ? [[NSUserDefaults standardUserDefaults]objectForKey:@"hash"] : @"", [[TmhSettings new] token], [self generateTickets]];
2508 NSLog(@"payurl = %@", url);
2509 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2510 [manager POST:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
2511 [self.navigationController.view hideWait];
2512 NSLog(@"response Object of register = %@", responseObject);
2513 NSString *url = [responseObject objectForKey:@"reply"];
2514 order.payUrl = [NSURL URLWithString:url];
2515
2516 [self performSegueWithIdentifier:@"OrderPay" sender:nil];
2517
2518 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
2519 [self.navigationController.view hideWait];
2520 [self.navigationController.view showError:@"ERROR INTERNET"];
2521 }];
2522 /*[api pay:order
2523 success:^(NSURL *url) {
2524 [self.navigationController.view hideWait];
2525 order.payUrl = url;
2526 [self performSegueWithIdentifier:@"OrderPay" sender:nil];
2527 } error:errorBlock];*/
2528 /*}
2529 onError:errorBlock];
2530 } onError:errorBlock];*/
2531
2532 }
2533}
2534
2535- (NSString *)generateTickets {
2536 static NSString *const kParamOrderStringForBuy = @"<OrderN7 ReserveType=\"%i\" TripDate=\"%@\" StationFrom=\"%@\" StationTo=\"%@\" TrainId=\"%@\" TrainName=\"%@\" BuyPackagePlace=\"%i\" BuyAnimalPlace=\"%i\" BuyBikePlace=\"%i\"><Pass OrderType=\"%i\" Lgota=\"%i\" PassengerName=\"%@ %@ %@\" DocumentType=\"%i\" Document=\"%@\" CarriageNumber=\"%@\" PlaceNumber=\"%@\" PackagePlaceCost=\"%@\" AnimalPlaceCost=\"%@\" BikePlaceCost=\"%@\" Discount=\"0\" DiscountName=\"0\" DiscountCost=\"0\"/>";
2537 static NSString *const kParamOrderStringForChild = @"<Pass OrderType=\"2\" Lgota=\"0\" PassengerName=\"%@ %@ %@\" DocumentType=\"%i\" Document=\"1\" CarriageNumber=\"0\" PlaceNumber=\"0\" />";
2538 static NSString *const kParamOrderCancelTag = @"</OrderN7>";
2539 NSString *res = @""; //PersonalId=\"%@\"
2540 static NSString *const kParamOrderStringForBuyLgota = @"<OrderN7 ReserveType=\"%i\" TripDate=\"%@\" StationFrom=\"%@\" StationTo=\"%@\" TrainId=\"%@\" TrainName=\"%@\" BuyPackagePlace=\"%i\" BuyAnimalPlace=\"%i\" BuyBikePlace=\"%i\"><Pass OrderType=\"%i\" Lgota=\"%@\" PassengerName=\"%@ %@ %@\" DocumentType=\"%i\" Document=\"%@\" PersonalId=\"%@\" CarriageNumber=\"%@\" PlaceNumber=\"%@\" PackagePlaceCost=\"%@\" AnimalPlaceCost=\"%@\" BikePlaceCost=\"%@\" Discount=\"0\" DiscountName=\"0\" DiscountCost=\"0\"/>";
2541
2542 NSDateFormatter *dateFormat = [NSDateFormatter new];
2543 [dateFormat setDateFormat:@"dd.MM.yyyy"];
2544 [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ru_RU"]];
2545 //[dateFormat setTimeZone:MOSCOW_TIMEZONE];
2546
2547
2548 int i = 0;
2549 for (TmhOrderTicket *ticket in order.tickets) {
2550 NSLog(@"ticksss");
2551 NSString *orderString;
2552 if(ticket.type != 666) {
2553 orderString = [NSString stringWithFormat:kParamOrderStringForBuy, (order.method==TmhOrderMethodRegister?0:1), [dateFormat stringFromDate:ticket.date], ticket.from.identifier, ticket.to.identifier, ticket.train.identifier, order.train.name, ticket.isBaggage, ticket.isAnimal, ticket.isBike, [self getTickType:ticket], [self getTickLgota:ticket], ticket.lastName, ticket.firstName, ticket.middleName, ticket.documentType, ticket.document, ticket.carriageNumber, ticket.placeNumber, ticket.costs[0], ticket.costs[1], ticket.costs[2]];
2554 } else {
2555 orderString = [NSString stringWithFormat:kParamOrderStringForBuyLgota, (order.method==TmhOrderMethodRegister?0:1), [dateFormat stringFromDate:ticket.date], ticket.from.identifier, ticket.to.identifier, ticket.train.identifier, order.train.name, ticket.isBaggage, ticket.isAnimal, ticket.isBike, @"3", ticket.code_lgoty, ticket.lastName, ticket.firstName, ticket.middleName, ticket.documentType, ticket.document, ticket.personalId, ticket.carriageNumber, ticket.placeNumber, ticket.costs[0], ticket.costs[1], ticket.costs[2]];
2556 }
2557 if(order.childs.count>=i) {
2558 int k = i;
2559 for (int c = i; c <= k+1; c++) {
2560 if(c<order.childs.count) {
2561 TmhOrderTicket *child = order.childs[c];
2562 orderString = [NSString stringWithFormat: @"%@<Pass OrderType=\"2\" Lgota=\"0\" PassengerName=\"%@ %@ %@\" DocumentType=\"1\" Document=\"%@\" CarriageNumber=\"0\" PlaceNumber=\"0\" />", orderString, child.lastName, child.firstName, child.middleName, child.document];
2563 i++;
2564 }
2565 }
2566 }
2567 orderString = [NSString stringWithFormat:@"%@%@", orderString, kParamOrderCancelTag];
2568 //[items setObject:orderString forKey:ticket.reserveId];
2569 res = [NSString stringWithFormat:@"%@&items[%@]=%@", res, ticket.reserveId, [self urlEncode:orderString]];
2570
2571 }
2572
2573 i = 0;
2574 for (TmhOrderTicket *ticket in order.backTickets) {
2575 NSString *orderString;
2576 if(ticket.type != 666) {
2577 orderString = [NSString stringWithFormat:kParamOrderStringForBuy, (order.method==TmhOrderMethodRegister?0:1), [dateFormat stringFromDate:ticket.date], ticket.from.identifier, ticket.to.identifier, ticket.train.identifier, order.backTrain.name, ticket.isBaggage, ticket.isAnimal, ticket.isBike, [self getTickType:ticket], [self getTickLgota:ticket], ticket.lastName, ticket.firstName, ticket.middleName, ticket.documentType, ticket.document, ticket.carriageNumber, ticket.placeNumber, ticket.costs[0], ticket.costs[1], ticket.costs[2]];
2578 } else {
2579 orderString = [NSString stringWithFormat:kParamOrderStringForBuyLgota, (order.method==TmhOrderMethodRegister?0:1), [dateFormat stringFromDate:ticket.date], ticket.from.identifier, ticket.to.identifier, ticket.train.identifier, order.train.name, ticket.isBaggage, ticket.isAnimal, ticket.isBike, @"3", ticket.code_lgoty, ticket.lastName, ticket.firstName, ticket.middleName, ticket.documentType, ticket.document, ticket.personalId, ticket.carriageNumber, ticket.placeNumber, ticket.costs[0], ticket.costs[1], ticket.costs[2]];
2580 }
2581 if(order.childs.count>=i) {
2582 int k = i;
2583 for (int c = i; c <= k+1; c++) {
2584 if(c<order.childs.count) {
2585 TmhOrderTicket *child = order.childs[c];
2586 orderString = [NSString stringWithFormat: @"%@<Pass OrderType=\"2\" Lgota=\"0\" PassengerName=\"%@ %@ %@\" DocumentType=\"1\" Document=\"%@\" CarriageNumber=\"0\" PlaceNumber=\"0\" />", orderString, child.lastName, child.firstName, child.middleName, child.document];
2587 i++;
2588 }
2589 }
2590 }
2591 orderString = [NSString stringWithFormat:@"%@%@", orderString, kParamOrderCancelTag];
2592 res = [NSString stringWithFormat:@"%@&items[%@]=%@", res, ticket.reserveId, [self urlEncode:orderString]];
2593 }
2594
2595 return res;
2596}
2597
2598- (void)registerOrder
2599{
2600 [self.navigationController.view showWait];
2601
2602 TmhAPIError errorBlock = ^(int statusCode, NSDictionary *data) {
2603 [self.navigationController.view hideWait];
2604 switch (statusCode) {
2605 case TmhConnectionStatusInternet:
2606 [self.navigationController.view showError:@"ERROR INTERNET"];
2607 break;
2608 default:
2609 [self.navigationController.view showError:@"ERROR REGISTER"];
2610 break;
2611 }
2612 };
2613
2614 TmhAPI *api = [TmhAPI new];
2615 [api cancelOrder:order
2616 onSuccess:^(TmhOrder *order_) {
2617 [api registerOrder:order
2618 onSuccess:^(TmhOrder *order__) {
2619 [self.navigationController.view hideWait];
2620 order.buyDate = [[TmhSettings new] getMSKDate];
2621 [settings addOrder:order];
2622
2623 [self dismissViewControllerAnimated:YES completion:^{
2624 UIViewController *vc = [[UIStoryboard storyboardWithName:IPAD ? @"Main_iPad" : @"Main_iPhone"
2625 bundle: nil] instantiateViewControllerWithIdentifier:@"SuccessRegister"];
2626 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:vc animated:YES completion:nil];
2627 }];
2628 }
2629 onError:errorBlock];
2630 } onError:errorBlock];
2631}
2632
2633#pragma mark - Order create
2634- (NSString*)createOrderWithOrder:(TmhOrder*)order{
2635
2636 __block NSMutableString *result = [NSMutableString new];
2637
2638 NSDateFormatter *dateFormat = [NSDateFormatter new];
2639 [dateFormat setDateFormat:@"dd.MM.yyyy"];
2640 [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ru_RU"]];
2641 //[dateFormat setTimeZone:MOSCOW_TIMEZONE];
2642
2643 TmhOrderTicket *ticket = [order.tickets firstObject];
2644
2645 id from = ticket.from.identifier;
2646 id to = ticket.to.identifier;
2647
2648 if (order.isBack) {
2649 from = ticket.to.identifier;
2650 to = ticket.from.identifier;
2651 }
2652
2653 bag = 0;
2654 pet = 0;
2655 bike = 0;
2656
2657 [[order tickets] enumerateObjectsUsingBlock:^(TmhOrderTicket *tick, NSUInteger idx, BOOL * _Nonnull stop) {
2658 bag = bag + (tick.isBaggage) + (tick.isBaggageBack);
2659 pet = pet + (tick.isAnimal) + (tick.isAnimalBack);
2660 bike = bike + (tick.isBike) + (tick.isBikeBack);
2661 }];
2662
2663 NSLog(@"bag = %d", bag);
2664 NSLog(@"pet = %d", pet);
2665 NSLog(@"bike = %d", bike);
2666
2667 [result appendString:[NSString stringWithFormat:@"<OrderN6 TripDate=\"%@\" StationFrom=\"%@\" StationTo=\"%@\" Train=\"%@\" IsRound=\"%@\">", [dateFormat stringFromDate:ticket.date], from, to, ticket.train.identifier, order.isBack?@"True":@"False"]];
2668
2669 [[order tickets] enumerateObjectsUsingBlock:^(TmhOrderTicket *tick, NSUInteger idx, BOOL * _Nonnull stop) {
2670 float price = (float)tick.price;
2671
2672 //if(!order.isBack)
2673 // NSLog(@"%f %f %f", [arr[3] floatValue], [arr[4] floatValue], [arr[5] floatValue]); else
2674 // NSLog(@"%f %f %f", [round_arr[3] floatValue], [round_arr[4] floatValue], [round_arr[5] floatValue]);
2675
2676 if (tick.isBaggage) {
2677 //price += [order.isBack?(round_arr[3]):(arr[3]) floatValue];
2678 price += [ticket.costs[0] floatValue]*tick.isBaggage;
2679 }
2680
2681 if (tick.isAnimal) {
2682 //price += [order.isBack?(round_arr[4]):(arr[4]) floatValue];
2683 price += [ticket.costs[1] floatValue]*tick.isAnimal;
2684 }
2685
2686 if (tick.isBike) {
2687 //price += [order.isBack?(round_arr[5]):(arr[5]) floatValue];
2688 price += [ticket.costs[2] floatValue]*tick.isBike;
2689 }
2690
2691 NSLog(@"price = %f", price);
2692 NSArray *dis = tick.discount;
2693 if(tick.type == 666) {
2694 [result appendString:[NSString stringWithFormat:@"<Pass OrderType=\"3\" Lgota=\"%@\" PassengerName=\"%@ %@ %@\" Document=\"%@\" DocumentType=\"%lu\" PersonalId=\"%@\" TicketPrice=\"%f\" BuyPackagePlace=\"%d\" BuyAnimalPlace=\"%d\" BuyBikePlace=\"%d\" PackagePlaceCost=\"%@\" AnimalPlaceCost=\"%@\" BikePlaceCost=\"%@\" Discount=\"%@\" DiscountName=\"%@\" DiscountCost=\"%@\"/>", tick.code_lgoty, tick.lastName, tick.firstName, tick.middleName, tick.document, (unsigned long)tick.documentType, tick.personalId, order.isBack ? price +(float)tick.price : price,
2695
2696 0 + (tick.isBaggage) + (tick.isBaggageBack),
2697 0 + (tick.isAnimal) + (tick.isAnimalBack),
2698 0 + (tick.isBike) + (tick.isBikeBack),
2699 tick.costs[0],
2700 tick.costs[1],
2701 tick.costs[2],
2702 dis[0],
2703 dis[1],
2704 dis[2]]];
2705 } else {
2706 [result appendString:[NSString stringWithFormat:@"<Pass OrderType=\"%i\" Lgota=\"%d\" PassengerName=\"%@ %@ %@\" Document=\"%@\" DocumentType=\"%lu\" TicketPrice=\"%f\" BuyPackagePlace=\"%d\" BuyAnimalPlace=\"%d\" BuyBikePlace=\"%d\" PackagePlaceCost=\"%@\" AnimalPlaceCost=\"%@\" BikePlaceCost=\"%@\" Discount=\"%@\" DiscountName=\"%@\" DiscountCost=\"%@\"/>", [self getTickType:tick], [self getTickLgota:tick], tick.lastName, tick.firstName, tick.middleName, tick.document, (unsigned long)tick.documentType, order.isBack ? price +(float)tick.price : price,
2707
2708 0 + (tick.isBaggage) + (tick.isBaggageBack),
2709 0 + (tick.isAnimal) + (tick.isAnimalBack),
2710 0 + (tick.isBike) + (tick.isBikeBack),
2711 tick.costs[0],
2712 tick.costs[1],
2713 tick.costs[2],
2714 dis[0],
2715 dis[1],
2716 dis[2]]];
2717 }
2718 //tick.price = order.isBack ? price +(float)tick.price : price;
2719 }];
2720
2721 [result appendString:@"</OrderN6>"];
2722 NSLog(@"\n\nRESULT OF CREATING ORDER\n\n%@\n\n", result);
2723 return result;
2724}
2725
2726#pragma mark - Table view data source
2727
2728- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
2729{
2730 return 5;
2731}
2732
2733- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
2734{
2735 switch (section) {
2736 case 0:
2737 if(order.isBack)
2738 return 2; else
2739 return 1;
2740 case 1:
2741 return order.tickets.count ? order.tickets.count+order.childs.count + 3 + (hasDiscount?1:0) : 0;
2742 case 2:
2743 if(order.train.type != TmhTrainTypeComfortable)
2744 return 0; else
2745 return order.backTickets.count ? order.backTickets.count+order.childs.count + 3 : 0;
2746
2747 case 3:
2748 if(order.isBack && order.train.type==TmhTrainTypeComfortable)
2749 return 1; else
2750 return 0;
2751 case 4:
2752 return ((hasBonus&&[self getBonusCost]+[self getBonusEarned]>0) ? 2 : 1);
2753 }
2754 return 0;
2755}
2756
2757- (BOOL)isDiscont:(NSIndexPath *)indexPath {
2758 return false;
2759 /*TmhOrderTicket *ticket = order.tickets[indexPath.row-2];
2760 if(ticket.discount == nil)
2761 return NO;
2762 return [ticket.discount[0] isEqualToString:@"1"];*/
2763}
2764
2765- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
2766{
2767 switch (indexPath.section) {
2768 case 0:
2769 if(indexPath.row==0)
2770 return 56; else
2771 return 44;
2772 case 1:
2773 if (indexPath.row == 0) {
2774 return 80;
2775 }
2776 if (indexPath.row == 1) {
2777 return IPAD?80:100;
2778 }
2779 if(order.train.type == TmhTrainTypeComfortable || !hasDiscount) {
2780 if (indexPath.row == (order.tickets.count+order.childs.count + 2)) {
2781 return 44;
2782 }
2783 } else {
2784 if(hasDiscount && indexPath.row == (order.tickets.count+order.childs.count + 2))
2785 return 92; else
2786 if(hasDiscount && indexPath.row == (order.tickets.count+order.childs.count + 3))
2787 return 44;
2788 //}
2789 }
2790 return order.train.type == TmhTrainTypeComfortable ? 365 : ([self isDiscont:indexPath] ? 335 : 280);//280;//335;
2791 case 2:
2792 if(order.train.type == TmhTrainTypeComfortable) {
2793 if (indexPath.row == 0) {
2794 return 80;
2795 }
2796 if (indexPath.row == 1) {
2797 return IPAD?80:100;
2798 }
2799 if (indexPath.row == (order.backTickets.count+order.childs.count + 2)) {
2800 return 44;
2801 }
2802 return order.train.type == TmhTrainTypeComfortable ? 365 : 280;
2803 } else {
2804 if(indexPath.row==0)
2805 return 44; else
2806 return 60;
2807 }
2808 case 3:
2809 if(order.isBack && order.train.type == TmhTrainTypeComfortable) {
2810 if(indexPath.row==0)
2811 return 44; else
2812 return 60;
2813 } else
2814 return 60;
2815 case 4:
2816 if(hasBonus&&[self getBonusCost]+[self getBonusEarned]>0) {
2817 return (indexPath.row==0 ? (canPayBonus ? 90 : 135) : 60);
2818 } else {
2819 return 60;
2820 }
2821
2822 }
2823 return 0;
2824}
2825
2826- (UITableViewCell *)bottomCell:(NSIndexPath *)indexPath
2827{
2828 static NSString *cellIdentifier = @"BottomCell";
2829 return [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2830}
2831
2832- (UITableViewCell *)titleCell:(NSIndexPath *)indexPath
2833{
2834 static NSString *cellIdentifier = @"TitleCell";
2835 return [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2836}
2837
2838- (UITableViewCell *)nameCell:(NSIndexPath *)indexPath back:(BOOL)isBack
2839{
2840 NSLog(@"indexPath of name Cell = %@", indexPath);
2841
2842 static NSString *cellIdentifier = @"NameCell";
2843 TmhHistoryCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2844 cell.directionImageView.image = [UIImage imageNamed:isBack ? @"direction-back" : @"direction"];
2845 if(order.train.type != TmhTrainTypeComfortable && order.isBack)
2846 cell.directionImageView.image = [UIImage imageNamed:@"direction-both"];
2847 cell.nameLabel.text = isBack ? order.backTrain.name : order.train.name;
2848
2849 TmhTrain *tr;
2850 NSDate *dt;
2851 if(order.isBack) {
2852 if(indexPath.section==1) {
2853 tr = order.train;
2854 dt = order.date;
2855 //cell.directionImageView.image = [UIImage imageNamed:false ? @"direction-back" : @"direction"];
2856 //cell.nameLabel.text = false ? order.backTrain.name : order.train.name;
2857 } else {
2858 tr = (order.train.type==TmhTrainTypeComfortable) ? order.backTrain:order.train;
2859 dt = (order.train.type==TmhTrainTypeComfortable) ? order.backDate:order.date;
2860 //cell.dayLabel.text = [NSString stringWithFormat:@"%@ %@", [TmhDate monthWithDate:self.order.date andDateFormat:@"d M"], self.order.train.departureTime];
2861 //cell.directionImageView.image = [UIImage imageNamed:true ? @"direction-back" : @"direction"];
2862 //cell.nameLabel.text = order.backTrain.name;
2863 //cell.nameLabel.text = [NSString stringWithFormat:@"%@\n%@ %@", self.order.backTrain.name, [TmhDate monthWithDate:self.order.date andDateFormat:@"d M"], self.order.train.departureTime];
2864 }
2865 } else {
2866 tr = order.train;
2867 dt = order.date;
2868 //cell.dayLabel.text = [NSString stringWithFormat:@"%@ %@", [TmhDate monthWithDate:self.order.date andDateFormat:@"d M"], self.order.train.departureTime];
2869 //cell.directionImageView.image = [UIImage imageNamed:self.isBack ? @"direction-back" : @"direction"];
2870 //cell.nameLabel.text = self.isBack ? self.order.backTrain.name : self.order.train.name;
2871
2872 }
2873 //if(self.order.train.type != TmhTrainTypeComfortable && self.order.isBack)
2874 // cell.directionImageView.image = [UIImage imageNamed:@"direction-both"];
2875
2876
2877 cell.nameLabel.text = [NSString stringWithFormat:@"%@\n%@", tr.name, [TmhDate monthWithDate:dt andDateFormat:@"d M yyyy"]];
2878
2879 cell.trainNumberLabel.text = tr.number;
2880
2881 static NSArray *typeImages;
2882 if (! typeImages) {
2883 typeImages = @[
2884 [UIImage imageNamed:@"ic_prig_tr"],
2885 [UIImage imageNamed:@"ic_city_tr"],
2886 [UIImage imageNamed:@"ic_comfort_tr"],
2887 [UIImage imageNamed:@"ic_comfort_tr"]
2888 ];
2889 }
2890 static NSArray *typeTexts;
2891
2892 if (! typeTexts) {
2893 typeTexts = @[
2894 NSLocalizedString(@"SUBURB", nil),
2895 NSLocalizedString(@"CITY", nil),
2896 NSLocalizedString(@"EXPRESS", nil),
2897 NSLocalizedString(@"EXPRESS", nil)
2898 ];
2899 }
2900 cell.imgType.image = [typeImages objectAtIndex:tr.type - 1];
2901 cell.typeLabel.text = [typeTexts objectAtIndex:tr.type - 1];
2902 NSLog(@"asafasfqweqweqweqw");
2903
2904 return cell;
2905}
2906
2907- (UITableViewCell *)infoCell:(NSIndexPath *)indexPath back:(BOOL)isBack
2908{
2909 static NSString *cellIdentifier = @"InfoCell";
2910 TmhOrderConfirmInfoCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2911 [cell prepareForReuseWithOrder:order back:isBack];
2912 return cell;
2913}
2914
2915- (UITableViewCell *)bodyCell:(NSIndexPath *)indexPath back:(BOOL)isBack
2916{
2917 if (order.train.type == TmhTrainTypeComfortable) {
2918 static NSString *cellIdentifier = @"TicketCell";
2919 TmhOrderConfirmTicketCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2920 if(indexPath.row>=order.tickets.count+2)
2921 [cell prepareForReuseWithOrder:order ticket:order.childs[indexPath.row-order.tickets.count-2] number:(int)indexPath.row-1]; else
2922 [cell prepareForReuseWithOrder:order ticket:isBack?order.backTickets[indexPath.row-2]:order.tickets[indexPath.row-2] number:(int)indexPath.row-1];
2923 return cell;
2924 }
2925 else
2926 {
2927 static NSString *cellIdentifier = @"TicketCellWithoutPlaces";
2928 TmhOrderConfirmTicketCellWithoutPlaces *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2929 [cell prepareForReuseWithOrder:order ticket:isBack?order.backTickets[indexPath.row-2]:order.tickets[indexPath.row-2] number:(int)indexPath.row-1];
2930 cell.discountText.hidden = YES;
2931 cell.discountLabel.hidden = YES;
2932 cell.discountCost.hidden = YES;
2933 return cell;
2934 }
2935}
2936
2937- (UITableViewCell *)sumCell:(NSIndexPath *)indexPath back:(BOOL)isBack
2938{
2939 NSLog(@"indexPath for sum = %@", indexPath);
2940 static NSString *cellIdentifier = @"SumCell";
2941 TmhOrderConfirmSumCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2942 cell.textSumLabel.text = @"Общая стоимость";
2943 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
2944 formatter.numberStyle = NSNumberFormatterDecimalStyle;
2945 [formatter setGroupingSeparator:@" "];
2946 NSString *resInt = [formatter stringFromNumber: [NSNumber numberWithInt: [order totalPriceWithBack:isBack]]];
2947 NSArray *arr = [[NSString stringWithFormat:@"%.2f", [order totalPriceWithBack:isBack]] componentsSeparatedByString:@"."];
2948 cell.priceLabel.text = failCosts ? @"Ошибка" : [NSString stringWithFormat:@"%@.%@ %@", resInt, arr[1], NSLocalizedString(@"RUB", nil)];
2949 //cell.priceLabel.text = [NSString stringWithFormat:@"%.2f %@", , NSLocalizedString(@"RUB", nil)];
2950 return cell;
2951}
2952
2953- (UITableViewCell *)totalSumCell:(NSIndexPath *)indexPath back:(BOOL)isBack
2954{
2955 NSLog(@"indexPath for total summ = %@", indexPath);
2956 static NSString *cellIdentifier = @"SumCell";
2957 TmhOrderConfirmSumCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2958 cell.textSumLabel.text = @"Итоговая стоимость";
2959 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
2960 //formatter.roundingIncrement = [NSNumber numberWithFloat:0.02];
2961 //[formatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
2962 formatter.numberStyle = NSNumberFormatterDecimalStyle;
2963 [formatter setGroupingSeparator:@" "];
2964 NSString *resInt = [formatter stringFromNumber: [NSNumber numberWithInt: [order totalPrice]]];
2965 NSArray *arr = [[NSString stringWithFormat:@"%.2f", [order totalPrice]] componentsSeparatedByString:@"."];
2966 cell.priceLabel.text = failCosts ? @"Ошибка" : [NSString stringWithFormat:@"%@.%@ %@", resInt, arr[1], NSLocalizedString(@"RUB", nil)];
2967 //cell.priceLabel.text = [NSString stringWithFormat:@"%.2f %@", [order totalPrice], NSLocalizedString(@"RUB", nil)];
2968 return cell;
2969}
2970
2971- (UITableViewCell *)discountCell:(NSIndexPath *)indexPath back:(BOOL)isBack
2972{
2973 NSLog(@"indexPath for sum = %@", indexPath);
2974 static NSString *cellIdentifier = @"DiscountCell";
2975 TmhOrderConfirmSumCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
2976 cell.textSumLabel.text = @"Скидка";
2977 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
2978 formatter.numberStyle = NSNumberFormatterDecimalStyle;
2979 [formatter setGroupingSeparator:@" "];
2980 NSString *resInt = [formatter stringFromNumber: [NSNumber numberWithInt: [discountCost floatValue]]];
2981 NSArray *arrs = [[NSString stringWithFormat:@"%.2f", [discountCost floatValue]] componentsSeparatedByString:@"."];
2982 cell.priceLabel.text = failCosts ? @"Ошибка" : [NSString stringWithFormat:@"%@.%@ %@", resInt, arrs[1], NSLocalizedString(@"RUB", nil)];
2983 //cell.priceLabel.text = [NSString stringWithFormat:@"%.2f %@", , NSLocalizedString(@"RUB", nil)];
2984 cell.labelDiscount.text = discountName;
2985 return cell;
2986}
2987
2988- (double)getBonusCost {
2989 double BonusCost = 0;
2990 if(order.train.type == TmhTrainTypeComfortable) {
2991 if(bonusObject != nil) {
2992 BonusCost = BonusCost + [bonusObject[@"BonusCost"] doubleValue];
2993 }
2994 if(backBonusObject != nil) {
2995 BonusCost = BonusCost + [backBonusObject[@"BonusCost"] doubleValue];
2996 }
2997 } else {
2998 if(bonusObject != nil)
2999 BonusCost = [bonusObject[order.isBack?@"BonusCost2Way":@"BonusCost"] doubleValue];
3000 }
3001 return BonusCost;
3002}
3003
3004- (double)getBonusEarned {
3005 double BonusEarned = 0;
3006 if(order.train.type == TmhTrainTypeComfortable) {
3007 if(bonusObject != nil) {
3008 BonusEarned = BonusEarned + [bonusObject[@"BonusEarned"] doubleValue];
3009 }
3010 if(backBonusObject != nil) {
3011 BonusEarned = BonusEarned + [backBonusObject[@"BonusEarned"] doubleValue];
3012 }
3013 } else {
3014 if(bonusObject != nil)
3015 BonusEarned = [bonusObject[order.isBack?@"BonusEarned2Way":@"BonusEarned"] doubleValue];
3016 }
3017 return BonusEarned;
3018}
3019
3020- (UITableViewCell *)bonusCell:(NSIndexPath *)indexPath
3021{
3022 NSLog(@"BonusCell");
3023 static NSString *cellIdentifier = @"BonusCell";
3024 TmhBonusConfirmCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
3025 //cell.labelNotBonusPay.hidden = canPayBonus;
3026 double BonusBalance = [bonusObject[@"BonusBalance"] doubleValue];
3027
3028 double BonusEarned = 0;
3029 double BonusCost = 0;
3030 if(order.train.type == TmhTrainTypeComfortable) {
3031 if(bonusObject != nil) {
3032 BonusEarned = BonusEarned + [bonusObject[@"BonusEarned"] doubleValue];
3033 BonusCost = BonusCost + [bonusObject[@"BonusCost"] doubleValue];
3034 }
3035 if(backBonusObject != nil) {
3036 BonusEarned = BonusEarned + [backBonusObject[@"BonusEarned"] doubleValue];
3037 BonusCost = BonusCost + [backBonusObject[@"BonusCost"] doubleValue];
3038 }
3039 } else {
3040 BonusEarned = [bonusObject[order.isBack?@"BonusEarned2Way":@"BonusEarned"] doubleValue];
3041 BonusCost = [bonusObject[order.isBack?@"BonusCost2Way":@"BonusCost"] doubleValue];
3042 }
3043
3044 cell.labelBonusBalance.text = [NSString stringWithFormat:@"%.2f", BonusBalance];
3045 cell.labelBonusAdded.text = [NSString stringWithFormat:@"%.2f", BonusEarned];
3046 cell.labelBonusCost.text = [NSString stringWithFormat:@"%.2f", BonusCost];
3047 cell.labelNotBonusPay.hidden = (BonusCost == 0 || canPayBonus);
3048
3049 cell.labelBonusCost.hidden = [self getBonusCost]<=0;
3050 cell.labelTextCost.hidden = [self getBonusCost]<=0;
3051
3052 cell.labelBonusAdded.hidden = [self getBonusEarned]<=0;
3053 cell.labelTextAdded.hidden = [self getBonusEarned]<=0;
3054 if([self getBonusEarned]<=0) {
3055 cell.topConstraintNotBonus.constant = -21;
3056 cell.topConstraintTextCost.constant = -21;
3057 cell.topConstraintBonusCost.constant = -21;
3058 }
3059
3060
3061 return cell;
3062}
3063
3064- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3065{
3066 NSLog(@"sec = %d row = %d", indexPath.section, indexPath.row);
3067 switch (indexPath.section) {
3068 case 0:
3069 if(indexPath.row==0)
3070 return [self titleCell:indexPath]; else
3071 return [self totalSumCell:indexPath back:YES];
3072 case 1:
3073 if (indexPath.row == 0) {
3074 return [self nameCell:indexPath back:NO];
3075 }
3076 if (indexPath.row == 1) {
3077 return [self infoCell:indexPath back:NO];
3078 }
3079 if(order.train.type == TmhTrainTypeComfortable) {
3080 if (indexPath.row == (order.tickets.count+order.childs.count + 2)) {
3081 return [self sumCell:indexPath back:NO];
3082 }
3083 } else {
3084 if (indexPath.row == (order.tickets.count+order.childs.count + 2) && !hasDiscount) {
3085 return [self sumCell:indexPath back:NO];
3086 }
3087 if (indexPath.row == (order.tickets.count+order.childs.count + 2) && hasDiscount) {
3088 return [self discountCell:indexPath back:NO];
3089 }
3090 if (indexPath.row == (order.tickets.count+order.childs.count + 3) && hasDiscount) {
3091 return [self sumCell:indexPath back:NO];
3092 }
3093 }
3094 return [self bodyCell:indexPath back:NO];
3095 case 2:
3096 if(order.train.type == TmhTrainTypeComfortable) {
3097 if (indexPath.row == 0) {
3098 return [self nameCell:indexPath back:YES];
3099 }
3100 if (indexPath.row == 1) {
3101 return [self infoCell:indexPath back:YES];
3102 }
3103 if (indexPath.row == (order.backTickets.count+order.childs.count + 2)) {
3104 return [self sumCell:indexPath back:YES];
3105 }
3106 return [self bodyCell:indexPath back:YES];
3107 } else {
3108 //return [self bottomCell:indexPath];
3109 //return [self totalSumCell:indexPath back:YES];
3110 }
3111 case 3:
3112 if(order.isBack && order.train.type == TmhTrainTypeComfortable) {
3113 if(indexPath.row==0)
3114 return [self totalSumCell:indexPath back:YES]; else
3115 return [self bottomCell:indexPath];
3116 } //else
3117 // return [self bottomCell:indexPath];
3118 case 4:
3119 if(canBonusPayment && hasBonus && [self getBonusCost]+[self getBonusEarned]>0 ) {
3120 return (indexPath.row==0 ? [self bonusCell:indexPath] : [self bottomCell:indexPath]);
3121 } else {
3122 return [self bottomCell:indexPath];
3123 }
3124 }
3125 return nil;
3126}
3127
3128@end