NewInstallReceiptVC.m 62 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757
  1. //
  2. // NewInstallReceiptVC.m
  3. // IBOSS
  4. //
  5. // Created by guanhh on 17/7/14.
  6. // Copyright © 2017年 沈阳东科云信软件有限公司. All rights reserved.
  7. //
  8. // 功能描述:新增安装回执
  9. #import "NewInstallReceiptVC.h"
  10. #import "StatusInfo.h"
  11. #import "StatusInfoTextVC.h"
  12. #import "NIDropDown.h"
  13. #import "NewInstallIItemModel.h"
  14. #import "NewInstallDetailListsCell.h"
  15. #import "DKUICollectionViewCell.h"
  16. #import "DKCamera.h"
  17. #import "DKCameraViewController.h"
  18. #import "DKPhotoPickerViewController.h"
  19. #import "RegularExpression.h"
  20. #import "Util.h"
  21. #import "LeslieAsyncImageDownloader.h"
  22. #import "CustomButton.h"
  23. #define kTextFont [UIFont systemFontOfSize: LabelAndTextFontOfSize]
  24. @interface NewInstallReceiptVC ()<StatusInfoTextDelegate,UITextFieldDelegate,NewInstallDetailListsCellDelegate,SettlementTypeProtocol>{
  25. NSMutableArray* _arrayStatus;
  26. NSMutableArray* _arrayReceiptType;
  27. BOOL _isHaveDian;
  28. UIView *_contentView;
  29. UIScrollView *_scroll;
  30. NSInteger _imagesHeight;
  31. NSInteger _cellHeight;
  32. UIView *_vCollectionView;
  33. UIView *_vImage;
  34. NSInteger _btnImageHeight;
  35. NSInteger _positionHeight;
  36. UIView *_positionImage;
  37. UILabel *_lblPosition;
  38. UIImageView* _ivPosition;
  39. CGFloat _initHeight;
  40. BOOL _keyboardShow;
  41. }
  42. /**
  43. 下载管理器
  44. */
  45. @property (nonatomic,strong) ASIDownManager *mDownManager;
  46. /**
  47. 保存管理器
  48. */
  49. @property (nonatomic,strong) ASIDownManager *mSaveManager;
  50. @end
  51. @implementation NewInstallReceiptVC
  52. @synthesize vCustomTableView;
  53. #pragma mark - 公共函数
  54. /**
  55. 视图加载完成函数
  56. */
  57. - (void)viewDidLoad {
  58. [super viewDidLoad];
  59. [self initUI];
  60. [self initStatus];
  61. self.model = [[ParseNewInstallItem alloc]init];
  62. self.model.detailsArr = [[NSMutableArray alloc]init];
  63. self.mSaveManager = [[ASIDownManager alloc] init];
  64. self.mSaveManager.delegate = self;
  65. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onFocusPeopleEditingChanged:) name:@"UITextFieldTextDidChangeNotification" object:self.receiptAmount ];
  66. self.navigationItem.title = @"新增安装回执";
  67. //返回
  68. UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  69. [button setImage:[UIImage imageNamed:@"icon_back"] forState:UIControlStateNormal];
  70. [button addTarget:self action:@selector(goBack)
  71. forControlEvents:UIControlEventTouchUpInside];
  72. button.frame = CGRectMake(0, 0,45,22);
  73. UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithCustomView:button];
  74. self.navigationItem.leftBarButtonItem = menuButton;
  75. if(_sCode != nil && _sCode.length > 0){
  76. self.code.enabled = NO;
  77. [self reloadDataWithOnlyCode:_sCode];
  78. }
  79. }
  80. /**
  81. 安全区视图发生变化
  82. */
  83. -(void)viewSafeAreaInsetsDidChange{
  84. [self.view setBackgroundColor:[UIColor whiteColor]];
  85. UIImage *pic = [UIImage imageNamed:@"bt_datasave"];
  86. CGFloat h = (Screen_Width - 40) * pic.size.height / pic.size.width;
  87. _scroll.frame =CGRectMake(0, 0, Screen_Width, self.view.safeAreaLayoutGuide.layoutFrame.size.height -h);
  88. _saveBtn.frame = CGRectMake(20,
  89. self.view.safeAreaLayoutGuide.layoutFrame.size.height -h-15,
  90. Screen_Width-40,
  91. h);
  92. [super viewSafeAreaInsetsDidChange];
  93. }
  94. /**
  95. 内存释放函数
  96. */
  97. - (void)dealloc{
  98. // [self cancel];
  99. // [[NSNotificationCenter defaultCenter]removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:self.receiptAmount];
  100. }
  101. /**
  102. 初始化相册数组
  103. @return <#return value description#>
  104. */
  105. - (NSMutableArray *)assets{
  106. if (!_assets) {
  107. _assets = [NSMutableArray array];
  108. }
  109. return _assets;
  110. }
  111. /**
  112. 初始化图片路径数组
  113. @return <#return value description#>
  114. */
  115. - (NSMutableArray *)imagePaths{
  116. if (!_imagePaths) {
  117. _imagePaths = [NSMutableArray array];
  118. }
  119. return _imagePaths;
  120. }
  121. /**
  122. 初始化回执类型数组
  123. */
  124. - (void)initStatus{
  125. _arrayStatus = [[NSMutableArray alloc]init];
  126. StatusInfo *s = [[StatusInfo alloc]init];
  127. s.statusId = @"1";
  128. s.name = @"完成";
  129. [_arrayStatus addObject:s];
  130. s = [[StatusInfo alloc]init];
  131. s.statusId = @"3";
  132. s.name = @"推迟安装";
  133. [_arrayStatus addObject:s];
  134. }
  135. - (void) initStatus2 :(BOOL) flag{
  136. _arrayReceiptType = [[NSMutableArray alloc]init];
  137. StatusInfo *s = [[StatusInfo alloc]init];
  138. s.statusId = @"1";
  139. s.name = @"完成";
  140. s.tagName = @"ReceiptType";
  141. [_arrayReceiptType addObject:s];
  142. if(flag){
  143. s = [[StatusInfo alloc]init];
  144. s.statusId = @"5";
  145. s.tagName = @"ReceiptType";
  146. s.name = @"再安装";
  147. [_arrayReceiptType addObject:s];
  148. }
  149. }
  150. /**
  151. 初始化collectionView
  152. */
  153. - (void)setupCollectionView{
  154. UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
  155. flowLayout.itemSize = CGSizeMake(85, 85);
  156. flowLayout.minimumInteritemSpacing = 5;
  157. flowLayout.minimumLineSpacing = 10;
  158. flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
  159. flowLayout.sectionInset = UIEdgeInsetsMake(7, 20, 0, 20);
  160. self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, Screen_Width, (85 + 15) * 3) collectionViewLayout:flowLayout];
  161. self.collectionView.backgroundColor = [UIColor clearColor];
  162. self.collectionView.dataSource = self;
  163. self.collectionView.delegate = self;
  164. [self.collectionView registerNib:[UINib nibWithNibName:@"DKUICollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"DKUICollectionViewCell"];
  165. [_vCollectionView addSubview:self.collectionView];
  166. }
  167. #pragma mark - 委托函数
  168. /**
  169. 保存完成后更新数据
  170. @param sender <#sender description#>
  171. */
  172. - (void)onLoadFinish:(ASIDownManager *)sender {
  173. RequestResultModel *resultModel = [RequestResultModel dk_modelWithJSON:sender.mWebStr];
  174. [self cancel];
  175. int iStatus = resultModel.status;
  176. NSString *message = resultModel.message;
  177. self.navigationItem.rightBarButtonItem.enabled=YES;
  178. if (iStatus == 0) {
  179. //[self clearData];//新增后 清除画面的值
  180. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"保存成功!" preferredStyle:UIAlertControllerStyleAlert ];
  181. [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
  182. [_parentVC ReloadList];
  183. [self.navigationController popViewControllerAnimated:YES];
  184. }]];
  185. // 3.显示alertController:presentViewController
  186. [self presentViewController:alert animated:YES completion:nil];
  187. }
  188. else if(iStatus == ActionResultStatusAuthError
  189. || iStatus == ActionResultStatusNoLogin
  190. || iStatus == ActionResultStatusLogined||iStatus==ActionResultSessionOverdue){
  191. [self showReLoginDialog:message];
  192. return;
  193. }
  194. else {
  195. [self showAlertViewText:message];
  196. }
  197. }
  198. /**
  199. 保存加载失败函数
  200. @param sender <#sender description#>
  201. */
  202. - (void)onLoadFail:(ASIDownManager *)sender {
  203. [self cancel];
  204. [self showAlertViewText:@"网络异常"];
  205. }
  206. /**
  207. 回执数据加载成功接口
  208. @param sender <#sender description#>
  209. */
  210. - (void)onRequestSuccess:(ASIDownManager *)sender {
  211. RequestResultModel *resultModel = [RequestResultModel dk_modelWithJSON:sender.mWebStr];
  212. [self cancel];
  213. self.sCode = @"";
  214. int iStatus = resultModel.status;
  215. NSString *message = resultModel.message;
  216. if (iStatus == 0) {
  217. self.sCode=self.code.text;
  218. NSArray * infoArr;
  219. NSArray * infoHead;
  220. NSDictionary *dicResult = (NSDictionary*)resultModel.result;
  221. [self.model.detailsArr removeAllObjects];
  222. if(dicResult != nil){
  223. infoArr = [dicResult objectForKey:@"Table1"];
  224. infoHead = [dicResult objectForKey:@"Table"];
  225. }
  226. if (infoHead == nil|| infoHead.count == 0) {
  227. self.code.text = @"";
  228. self.sCode = @"";
  229. [self clearData];
  230. [self showAlertViewText:@"该安装单未建安排单,请重新建安排单"];
  231. return;
  232. }
  233. //单据信息 一条数据
  234. BOOL receiptFlag=false;
  235. for (int i = 0; i < infoHead.count; i++) {
  236. NSDictionary *h = infoHead[i];
  237. receiptFlag = [[h objectForKey:@"ReceiptFlag"] boolValue] ;
  238. if (receiptFlag) {
  239. self.sReceiptType = @"1";
  240. break;
  241. }else{
  242. self.sReceiptType = @"0";
  243. }
  244. self.customerId = [[h objectForKey:@"CustomerID"]stringValue];
  245. self.installationId = [[h objectForKey:@"InstallationID"]stringValue];
  246. self.orgId = [[h objectForKey:@"BusinessOrganization"]stringValue];
  247. self.salesman = [[h objectForKey:@"SalesMan"]stringValue];
  248. self.lblCustomerNameValue.text = [h objectForKey:@"CustomerName"];
  249. self.receivablesValue.text = [NSString stringWithFormat:@"%.2f",[[h objectForKey:@"Receivables"] doubleValue] - [[h objectForKey:@"ReceiptedAmount"] doubleValue]];
  250. self.lblServiceStaffName.text = [h objectForKey:@"ServiceStaffName"];
  251. if ([self.sReceiptType isEqualToString:@"3"]) {
  252. self.sDelayDate = [h objectForKey:@"NextinstallDate"];
  253. [self.delayDate setTitle:self.sDelayDate forState:UIControlStateNormal];
  254. [self.receiptType setTitle:@"推迟安装" forState:UIControlStateNormal];
  255. }else{
  256. [self.receiptType setTitle:@"完成" forState:UIControlStateNormal];
  257. self.sReceiptType = @"1";
  258. [self.delayDate setTitle:@"请选择推迟日期" forState:UIControlStateNormal];
  259. self.sDelayDate = @"";
  260. }
  261. if (self.receivablesValue.text != nil && [self.receivablesValue.text doubleValue] > 0) {
  262. self.receiptAmount.enabled = YES;
  263. }else{
  264. self.receiptAmount.enabled = NO;
  265. }
  266. self.receiptAmount.text = @"0";
  267. self.sSettlementType = @"";
  268. [self.settlementType setTitle:@"请选择收款方式" forState:UIControlStateNormal];
  269. }
  270. if (receiptFlag) {
  271. self.code.text = @"";
  272. self.sCode = @"";
  273. [self clearData];
  274. [self showAlertViewText:@"该安装单已经回执"];
  275. return;
  276. }
  277. //详细信息
  278. for (int i = 0; i <infoArr.count; i++) {
  279. NSDictionary *info = infoArr[i];
  280. NewInstallIItemModel * m = [NewInstallIItemModel dk_modelWithDictionary:info];
  281. [self.model.detailsArr addObject:m];
  282. }
  283. _btnImageHeight = 51;
  284. vCustomTableView.hidden = NO;
  285. _vImage.hidden = NO;
  286. [self.vCustomTableView reloadData];
  287. }
  288. else if(iStatus == ActionResultStatusAuthError
  289. ||iStatus == ActionResultStatusNoLogin
  290. ||iStatus == ActionResultStatusLogined||iStatus==ActionResultSessionOverdue){
  291. [self showReLoginDialog:message];
  292. return;
  293. }
  294. else {
  295. [self showAlertViewText:message];
  296. }
  297. }
  298. /**
  299. 回执数据加载失败接口
  300. @param sender <#sender description#>
  301. */
  302. - (void)onRequestFail:(ASIDownManager *)sender{
  303. [self cancel];
  304. [self showAlertViewText:@"网络异常"];
  305. }
  306. /**
  307. 限制用户输入小数点后位数的方法
  308. @param textField <#textField description#>
  309. @param range <#range description#>
  310. @param string <#string description#>
  311. @return <#return value description#>
  312. */
  313. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
  314. if ([textField.text rangeOfString:@"."].location == NSNotFound) {
  315. _isHaveDian = NO;
  316. }
  317. if ([string length] > 0) {
  318. unichar single = [string characterAtIndex:0];//当前输入的字符
  319. if ((single >= '0' && single <= '9') || single == '.') {//数据格式正确
  320. //首字母不能为0和小数点
  321. if([textField.text length] == 0){
  322. if(single == '.') {
  323. [self showAlertViewText:@"第一个数字不能为小数点"];
  324. [textField.text stringByReplacingCharactersInRange:range withString:@""];
  325. return NO;
  326. }
  327. }
  328. if([textField.text length] == 1 && [[textField.text substringToIndex:1] isEqualToString: @"0"]){
  329. if(!(single == '.')) {
  330. [textField.text stringByReplacingCharactersInRange:range withString:@""];
  331. return NO;
  332. }
  333. }
  334. //输入的字符是否是小数点
  335. if (single == '.') {
  336. if(!_isHaveDian)//text中还没有小数点
  337. {
  338. _isHaveDian = YES;
  339. return YES;
  340. }else{
  341. [self showAlertViewText:@"您已经输入过小数点了"];
  342. [textField.text stringByReplacingCharactersInRange:range withString:@""];
  343. return NO;
  344. }
  345. }else{
  346. if (_isHaveDian) {//存在小数点
  347. //判断小数点的位数
  348. NSRange ran = [textField.text rangeOfString:@"."];
  349. if (range.location - ran.location <= 6) {
  350. return YES;
  351. }
  352. else{
  353. return NO;
  354. }
  355. }else{
  356. return YES;
  357. }
  358. }
  359. }else{
  360. //输入的数据格式不正确
  361. [self showAlertViewText:@"您输入的格式不正确"];
  362. [textField.text stringByReplacingCharactersInRange:range withString:@""];
  363. return NO;
  364. }
  365. }
  366. else
  367. {
  368. return YES;
  369. }
  370. }
  371. /**
  372. 选中位置回调事件
  373. @param name <#name description#>
  374. */
  375. - (void)relocationData:(NSString *)name{
  376. _lblPosition.text = name;
  377. _positionImage.hidden = NO;
  378. if (_lblPosition.text.length > 0){
  379. _ivPosition.image = [UIImage imageNamed:@"log_position"];
  380. vCustomTableView.frame = CGRectMake(0, CGRectGetMaxY(_separatorView.frame), self.view.frame.size.width, [self getDataViewHeight:self.model.detailsArr]);
  381. _vCollectionView.frame = CGRectMake(0,CGRectGetMaxY(vCustomTableView.frame), self.view.frame.size.width, [Util getPhotoCollectionViewHeightWithPhotos:self.assets]);
  382. _positionImage.frame = CGRectMake(0,CGRectGetMaxY(_vCollectionView.frame)-10, Screen_Width, 30);
  383. _vImage.frame = CGRectMake(0,CGRectGetMaxY(_positionImage.frame)+5, Screen_Width,30);
  384. _contentView.frame = CGRectMake(0, 0, Screen_Width, CGRectGetMaxY(_vImage.frame));
  385. _scroll.contentSize = CGSizeMake(Screen_Width, _contentView.frame.size.height + 150);
  386. }
  387. }
  388. /**
  389. 单据信息中收款方式的回调函数
  390. @param model <#model description#>
  391. */
  392. - (void)showProtocolValue:(SettlementTypeModel *)model{
  393. self.sSettlementType = model.settlementId;
  394. self.sSettlementTypeName = model.settlementName;
  395. self.sExitsHandleFee = model.isNotHand;
  396. self.sEarnestFee = model.handAmount;
  397. self.sRemarks = model.remark;
  398. [self.settlementType setTitle:model.settlementName forState:UIControlStateNormal];
  399. }
  400. /**
  401. 详细信息中铺贴方式,回执类型,单据信息中回执类型的回调函数
  402. @param s <#s description#>
  403. */
  404. - (void)showStatusValue:(StatusInfo *)s{
  405. if (s == nil) {
  406. return;
  407. }
  408. if ([s.tagName isEqualToString: @"PayStyle"]) {
  409. //详细cell中铺贴方式返回值
  410. [self.model btnGoPayStyle:s.statusId Name:s.name CellIndex:self.cellIndex];
  411. //一个cell刷新
  412. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.cellIndex inSection:0];
  413. [self.vCustomTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
  414. }
  415. else if ([s.tagName isEqualToString: @"ReceiptType"]) {
  416. [self.model btnGoReceiptType:s.statusId Name:s.name CellIndex:self.cellIndex];
  417. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.cellIndex inSection:0];
  418. [self.vCustomTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
  419. }
  420. else{
  421. self.sReceiptType = s.statusId;
  422. [self.receiptType setTitle:s.name forState:UIControlStateNormal];
  423. if (![self.sReceiptType isEqualToString:@"3"]) {
  424. self.sDelayDate = @"";
  425. [self.delayDate setTitle:@"请选择回执开始日期" forState:UIControlStateNormal];
  426. [self.model updateCellInfo:NO];
  427. }
  428. else{
  429. [self.model updateCellInfo:YES];
  430. }
  431. [self.vCustomTableView reloadData];
  432. }
  433. }
  434. /**
  435. 键盘隐藏回调
  436. @param cell <#cell description#>
  437. */
  438. - (void)keyboardWillHide:(NewInstallDetailListsCell *)cell{
  439. if (cell.cellIndex == self.model.detailsArr.count - 1) {
  440. [self keyboardWillHide];
  441. }
  442. }
  443. /**
  444. 键盘弹出回调
  445. @param cell <#cell description#>
  446. */
  447. - (void)keyboardWillShow:(NewInstallDetailListsCell *)cell{
  448. if (cell.cellIndex == self.model.detailsArr.count - 1) {
  449. [self keyboardWillShow];
  450. }
  451. }
  452. /**
  453. 编辑完成回调
  454. @param cell <#cell description#>
  455. */
  456. - (void)endEdit:(NewInstallDetailListsCell *)cell{
  457. NewInstallIItemModel *m = self.model.detailsArr[self.cellIndex];
  458. cell.receiptQuantity.text = m.receiptQuantity;
  459. }
  460. /**
  461. 选中相片回调事件
  462. @param assets <#assets description#>
  463. */
  464. - (void)pickerViewControllerDoneAsstes:(NSArray *)assets{
  465. // __weak typeof(self) weakSelf = self;
  466. for (int i = (int)self.assets.count - 1;i >= 0;i-- ) {
  467. if ([self.assets[i] isKindOfClass:[DKPhotoAssets class]]) {
  468. [self.assets removeObject:self.assets[i]];
  469. }
  470. }
  471. for (DKPhotoAssets* asset in assets ) {
  472. if ([asset isKindOfClass:[DKPhotoAssets class]]) {
  473. [self.assets addObject:asset];
  474. }
  475. }
  476. [self.collectionView reloadData];
  477. }
  478. /**
  479. 详细信息中文本信息编辑
  480. @param cell <#cell description#>
  481. @param txtfield <#txtfield description#>
  482. @param qualityTxt <#qualityTxt description#>
  483. @param remark <#remark description#>
  484. */
  485. - (void)textValueChange:(NewInstallDetailListsCell *)cell txtField:(UITextField *)txtfield qualityField:(UITextField *)qualityTxt remarkField:(UITextField *)remark{
  486. self.cellIndex = cell.cellIndex;
  487. [self.model updateCellText:txtfield CellIndex:cell.cellIndex qualityField:qualityTxt remarkField:remark];
  488. if(txtfield.tag == 1110) //数量
  489. {
  490. NewInstallIItemModel *m = self.model.detailsArr[self.cellIndex];
  491. cell.receiptBox.text = m.box;
  492. cell.receiptPiece.text= m .piece;
  493. cell.mm.text = m.mm;
  494. }
  495. }
  496. /**
  497. tableview的分区数
  498. @param tableView <#tableView description#>
  499. @return <#return value description#>
  500. */
  501. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  502. return 1;
  503. }
  504. /**
  505. tableview的行数
  506. @param tableView <#tableView description#>
  507. @param section <#section description#>
  508. @return <#return value description#>
  509. */
  510. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  511. {
  512. NSInteger rowcount = [self.model.detailsArr count];
  513. vCustomTableView.frame = CGRectMake(0, CGRectGetMaxY(_separatorView.frame), self.view.frame.size.width, [self getDataViewHeight:self.model.detailsArr]);
  514. _vCollectionView.frame = CGRectMake(0,CGRectGetMaxY(vCustomTableView.frame), self.view.frame.size.width, [Util getPhotoCollectionViewHeightWithPhotos:self.assets]);
  515. _positionImage.frame = CGRectMake(0,CGRectGetMaxY(_vCollectionView.frame), Screen_Width, 0);
  516. _vImage.frame = CGRectMake(0,CGRectGetMaxY(_positionImage.frame), Screen_Width,30);
  517. _contentView.frame = CGRectMake(0, 0, Screen_Width, CGRectGetMaxY(_vImage.frame));
  518. _scroll.contentSize = CGSizeMake(Screen_Width, _contentView.frame.size.height + 150);
  519. return rowcount;
  520. }
  521. /**
  522. tableview的高度
  523. @param tableView <#tableView description#>
  524. @param indexPath <#indexPath description#>
  525. @return <#return value description#>
  526. */
  527. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  528. {
  529. return 262;
  530. }
  531. /**
  532. 获取tableview的cell
  533. @param tableView <#tableView description#>
  534. @param indexPath <#indexPath description#>
  535. @return <#return value description#>
  536. */
  537. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  538. static NSString *identifier = @"NewInstallDetailListsCell";
  539. NewInstallDetailListsCell* cell = [[NewInstallDetailListsCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
  540. NSUInteger row = [indexPath row];
  541. cell.installDelegate = self;
  542. cell.cellIndex = row;
  543. [cell parseInfoModel:self.model.detailsArr[row]type:_sReceiptType];
  544. if (!self.model.isDelay && [cell.receiptType isEqualToString:@"1"]) {
  545. cell.remark.enabled = YES;
  546. }
  547. return cell;
  548. }
  549. /**
  550. 获取collection view的分区数
  551. @param collectionView <#collectionView description#>
  552. @return <#return value description#>
  553. */
  554. - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
  555. return 1;
  556. }
  557. /**
  558. 获取collection view的项数
  559. @param collectionView <#collectionView description#>
  560. @param section <#section description#>
  561. @return <#return value description#>
  562. */
  563. - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
  564. vCustomTableView.frame = CGRectMake(0, CGRectGetMaxY(_separatorView.frame), self.view.frame.size.width, [self getDataViewHeight:self.model.detailsArr]);
  565. _vCollectionView.frame = CGRectMake(0,CGRectGetMaxY(vCustomTableView.frame), self.view.frame.size.width, [Util getPhotoCollectionViewHeightWithPhotos:self.assets]);
  566. if(_lblPosition.text.length > 0){
  567. _positionImage.frame = CGRectMake(0,CGRectGetMaxY(_vCollectionView.frame), Screen_Width, 30);
  568. }else{
  569. _positionImage.frame = CGRectMake(0,CGRectGetMaxY(_vCollectionView.frame), Screen_Width, 0);
  570. }
  571. _vImage.frame = CGRectMake(0,CGRectGetMaxY(_positionImage.frame)+5, Screen_Width,30);
  572. _contentView.frame = CGRectMake(0, 0, Screen_Width, CGRectGetMaxY(_vImage.frame));
  573. _scroll.contentSize = CGSizeMake(Screen_Width,_contentView.frame.size.height + 150);
  574. return [self.assets count];
  575. }
  576. /**
  577. 获取collection view的cell
  578. @param collectionView <#collectionView description#>
  579. @param indexPath <#indexPath description#>
  580. @return <#return value description#>
  581. */
  582. - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
  583. DKUICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"DKUICollectionViewCell" forIndexPath:indexPath];
  584. // 判断类型来获取Image
  585. DKPhotoAssets *asset = self.assets[indexPath.item];
  586. if ([asset isKindOfClass:[DKPhotoAssets class]]) {
  587. cell.imageView.image = asset.thumbImage;
  588. }
  589. else if ([asset isKindOfClass:[NSString class]]){
  590. [cell.imageView sd_setImageWithURL:[NSURL URLWithString:(NSString *)asset] placeholderImage:[UIImage imageNamed:@"wallpaper_placeholder"]];
  591. }
  592. else if([asset isKindOfClass:[UIImage class]]){
  593. cell.imageView.image = (UIImage *)asset;
  594. }
  595. else if ([asset isKindOfClass:[DKCamera class]]){
  596. cell.imageView.image = [asset thumbImage];
  597. }
  598. return cell;
  599. }
  600. /**
  601. collection view的点击事件
  602. @param collectionView <#collectionView description#>
  603. @param indexPath <#indexPath description#>
  604. */
  605. - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
  606. DKUICollectionViewCell *cell = (DKUICollectionViewCell *)[self.collectionView cellForItemAtIndexPath:indexPath];
  607. // 图片游览器
  608. DKPhotoPickerBrowserViewController *pickerBrowser = [[DKPhotoPickerBrowserViewController alloc] init];
  609. // 传入点击图片View的话,会有微信朋友圈照片的风格
  610. pickerBrowser.toView = cell.imageView;
  611. // 数据源/delegate
  612. pickerBrowser.delegate = self;
  613. pickerBrowser.dataSource = self;
  614. // 是否可以删除照片
  615. pickerBrowser.editing = YES;
  616. // 当前选中的值
  617. pickerBrowser.currentIndexPath = [NSIndexPath indexPathForItem:indexPath.row inSection:0];
  618. // 展示控制器
  619. [pickerBrowser show];
  620. }
  621. /**
  622. collection view的分区数
  623. @param pickerBrowser <#pickerBrowser description#>
  624. @return <#return value description#>
  625. */
  626. - (NSInteger)numberOfSectionInPhotosInPickerBrowser:(DKPhotoPickerBrowserViewController *)pickerBrowser{
  627. return 1;
  628. }
  629. - (NSInteger)photoBrowser:(DKPhotoPickerBrowserViewController *)photoBrowser numberOfItemsInSection:(NSUInteger)section{
  630. return [self.assets count];
  631. }
  632. - (DKPhotoPickerBrowserPhoto *)photoBrowser:(DKPhotoPickerBrowserViewController *)pickerBrowser photoAtIndexPath:(NSIndexPath *)indexPath{
  633. id imageObj = [self.assets objectAtIndex:indexPath.item];
  634. DKPhotoPickerBrowserPhoto *photo = [DKPhotoPickerBrowserPhoto photoAnyImageObjWith:imageObj];
  635. // 包装下imageObj 成 DKPhotoPickerBrowserPhoto 传给数据源
  636. DKUICollectionViewCell *cell = (DKUICollectionViewCell *)[self.collectionView cellForItemAtIndexPath:indexPath];
  637. // 缩略图
  638. photo.thumbImage = cell.imageView.image;
  639. return photo;
  640. }
  641. #pragma mark - <DKPhotoPickerBrowserViewControllerDelegate>
  642. - (void)photoBrowser:(DKPhotoPickerBrowserViewController *)photoBrowser removePhotoAtIndexPath:(NSIndexPath *)indexPath{
  643. if (indexPath.row > [self.assets count]) return;
  644. [self.assets removeObjectAtIndex:indexPath.row];
  645. [self.collectionView reloadData];
  646. }
  647. #pragma mark - 私有函数
  648. /**
  649. 弹出键盘函数
  650. */
  651. - (void)keyboardWillShow {
  652. if(!_keyboardShow){
  653. [UIView animateWithDuration:0.3f animations:^ {
  654. self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y - 190, self.view.frame.size.width, self.view.frame.size.height);
  655. }];}
  656. _keyboardShow=YES;
  657. }
  658. /**
  659. 隐藏键盘函数
  660. */
  661. - (void)keyboardWillHide {
  662. self.view.backgroundColor = [UIColor colorWithWhite:0.96 alpha:1.0];
  663. if(_keyboardShow){
  664. [UIView animateWithDuration:0.1f animations:^ {
  665. self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + 190, self.view.frame.size.width, self.view.frame.size.height);
  666. }];}
  667. _keyboardShow=NO;
  668. }
  669. /**
  670. 初始化界面
  671. */
  672. - (void)initUI{
  673. _scroll = [UIScrollView new];
  674. _scroll.frame = self.view.bounds;
  675. _scroll.tag = 1000;
  676. UITapGestureRecognizer *singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKey)];
  677. singleRecognizer.cancelsTouchesInView = NO;
  678. [_scroll addGestureRecognizer:singleRecognizer];
  679. [self.view addSubview:_scroll];
  680. if(Screen_Height2 <= 480){
  681. _scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height + 80);
  682. }
  683. _contentView = [[UIView alloc]init];
  684. _contentView.frame = CGRectZero;
  685. _contentView.backgroundColor = [UIColor whiteColor];
  686. [_scroll addSubview:_contentView];
  687. UIView *vCode = [UIView new];
  688. vCode.frame = CGRectMake(0, 0, Screen_Width, 51);
  689. [_contentView addSubview:vCode];
  690. UILabel *lblCode = [UILabel new];
  691. lblCode.frame = CGRectMake(20, 16, 90, 25);
  692. lblCode.text = @"安装单号:";
  693. lblCode.font = kTextFont;
  694. [vCode addSubview:lblCode];
  695. self.code = [UITextField new];
  696. self.code.enabled = NO;
  697. self.code.font = kTextFont;
  698. self.code.frame = CGRectMake(95, 16, 200, 25);
  699. [vCode addSubview:self.code];
  700. UIView *vSeparator = [UIView new];
  701. vSeparator.frame = CGRectMake(0,CGRectGetMaxY(vCode.frame), Screen_Width, 5);
  702. vSeparator.backgroundColor = LineBackgroundColor;
  703. [_contentView addSubview:vSeparator];
  704. UIView *vCustomerName = [UIView new];
  705. vCustomerName.frame = CGRectMake(0,CGRectGetMaxY(vSeparator.frame), Screen_Width, 31);
  706. [_contentView addSubview:vCustomerName];
  707. UILabel *lblCustomerName = [UILabel new];
  708. lblCustomerName.frame = CGRectMake(20, 3, 100, 25);
  709. lblCustomerName.text = @"客户名称:";
  710. lblCustomerName.font = kTextFont;
  711. [vCustomerName addSubview:lblCustomerName];
  712. self.lblCustomerNameValue = [UILabel new];
  713. self.lblCustomerNameValue.font = kTextFont;
  714. self.lblCustomerNameValue.frame = CGRectMake(95, 3,200, 25);
  715. [vCustomerName addSubview:self.lblCustomerNameValue];
  716. UIView *vReceivables = [UIView new];
  717. vReceivables.frame=CGRectMake(0,CGRectGetMaxY(vCustomerName.frame), Screen_Width, 31);
  718. [_contentView addSubview:vReceivables];
  719. UILabel *lblReceivables = [UILabel new];
  720. lblReceivables.font = kTextFont;
  721. lblReceivables.frame = CGRectMake(20, 3, 100, 25);
  722. lblReceivables.text = @"应收金额:";
  723. [vReceivables addSubview:lblReceivables];
  724. self.receivablesValue = [UILabel new];
  725. self.receivablesValue.font = kTextFont;
  726. self.receivablesValue.frame = CGRectMake(95, 3,200, 25);
  727. [vReceivables addSubview:self.receivablesValue];
  728. UIView *vServiceStaffName = [UIView new];
  729. vServiceStaffName.frame = CGRectMake(0,CGRectGetMaxY(vReceivables.frame), Screen_Width, 31);
  730. [_contentView addSubview:vServiceStaffName];
  731. UILabel *lblServiceStaffNameTitle = [UILabel new];
  732. lblServiceStaffNameTitle.frame = CGRectMake(20, 3, 100, 25);
  733. lblServiceStaffNameTitle.text = @"客服人员:";
  734. lblServiceStaffNameTitle.font = kTextFont;
  735. [vServiceStaffName addSubview:lblServiceStaffNameTitle];
  736. self.lblServiceStaffName = [UILabel new];
  737. self.lblServiceStaffName.font = kTextFont;
  738. self.lblServiceStaffName.frame = CGRectMake(95, 3,200, 25);
  739. [vServiceStaffName addSubview:self.lblServiceStaffName];
  740. UIView *vReceiptType = [UIView new];
  741. vReceiptType.frame=CGRectMake(0,CGRectGetMaxY(vServiceStaffName.frame), Screen_Width, 31);
  742. [_contentView addSubview:vReceiptType];
  743. UILabel *lblType = [UILabel new];
  744. lblType.frame = CGRectMake(20, 3, 100, 25);
  745. lblType.text = @"回执类型:";
  746. lblType.font = kTextFont;
  747. [vReceiptType addSubview:lblType];
  748. self.receiptType = [UIButton buttonWithType:UIButtonTypeCustom];
  749. self.receiptType.frame = CGRectMake(95, 3,200, 25);
  750. self.receiptType.titleLabel.font = kTextFont;
  751. [self.receiptType setTitle:@"请选择回执类型" forState:UIControlStateNormal];
  752. self.receiptType.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;
  753. [self.receiptType setTitleColor:[UIColor colorWithWhite:0 alpha:1.0] forState:UIControlStateNormal];
  754. [self.receiptType addTarget:self action:@selector(btnTypeCilck) forControlEvents:UIControlEventTouchUpInside];
  755. [vReceiptType addSubview:self.receiptType];
  756. UIButton *btnReceiptTypeArrow = [UIButton buttonWithType:UIButtonTypeCustom];
  757. btnReceiptTypeArrow.frame = CGRectMake(Screen_Width-15,8,7,12);
  758. [btnReceiptTypeArrow setImage:[UIImage imageNamed:@"rightarrow"] forState:UIControlStateNormal];
  759. [vReceiptType addSubview:btnReceiptTypeArrow];
  760. //收款方式--------------
  761. UIView *vSettlementType = [UIView new];
  762. vSettlementType.frame = CGRectMake(0,CGRectGetMaxY(vReceiptType.frame), Screen_Width, 31);
  763. [_contentView addSubview:vSettlementType];
  764. UILabel *lblSettlementType = [UILabel new];
  765. lblSettlementType.frame = CGRectMake(20, 3, 100, 25);
  766. lblSettlementType.text = @"收款方式:";
  767. lblSettlementType.font = kTextFont;
  768. [vSettlementType addSubview:lblSettlementType];
  769. self.settlementType = [UIButton buttonWithType:UIButtonTypeCustom];
  770. self.settlementType.frame = CGRectMake(95, 3,200, 25);
  771. self.settlementType.titleLabel.font = kTextFont;
  772. [self.settlementType setTitle:@"请选择收款方式" forState:UIControlStateNormal];
  773. self.settlementType.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;
  774. [self.settlementType setTitleColor:[UIColor colorWithWhite:0.5 alpha:0.5] forState:UIControlStateNormal];
  775. [self.settlementType addTarget:self action:@selector(settlementTypeCilck) forControlEvents:UIControlEventTouchUpInside];
  776. [vSettlementType addSubview:self.settlementType];
  777. UIButton *btnSettlementTypeArrow = [UIButton buttonWithType:UIButtonTypeCustom];
  778. btnSettlementTypeArrow.frame = CGRectMake(Screen_Width-15,8,7,12);
  779. [btnSettlementTypeArrow setImage:[UIImage imageNamed:@"rightarrow"] forState:UIControlStateNormal];
  780. [vSettlementType addSubview:btnSettlementTypeArrow];
  781. UIView *vReceiptAmount = [UIView new];
  782. vReceiptAmount.frame = CGRectMake(0,CGRectGetMaxY(vSettlementType.frame), Screen_Width, 31);
  783. [_contentView addSubview:vReceiptAmount];
  784. UILabel *lblreceiptamount = [UILabel new];
  785. lblreceiptamount.frame = CGRectMake(20, 3, 100, 25);
  786. lblreceiptamount.text = @"回执金额:";
  787. lblreceiptamount.font = kTextFont;
  788. [vReceiptAmount addSubview:lblreceiptamount];
  789. self.receiptAmount = [UITextField new];
  790. self.receiptAmount.placeholder = @"请输入回执金额";
  791. self.receiptAmount.keyboardType = UIKeyboardTypeDecimalPad;
  792. self.receiptAmount.font = kTextFont;
  793. self.receiptAmount.delegate = self;
  794. self.receiptAmount.enabled = NO;
  795. self.receiptAmount.frame = CGRectMake(95, 3,200, 25);
  796. [vReceiptAmount addSubview:self.receiptAmount];
  797. //清除按钮
  798. UILabel *lblMoney = [[UILabel alloc]init];
  799. lblMoney.frame = CGRectMake(Screen_Width-20, 3, 22, 22);
  800. lblMoney.font = kTextFont;
  801. lblMoney.text = @"元";
  802. [vReceiptAmount addSubview:lblMoney];
  803. //start日期--------------
  804. UIView *vReceiptDate = [UIView new];
  805. vReceiptDate.frame = CGRectMake(0,CGRectGetMaxY(vReceiptAmount.frame), Screen_Width, 31);
  806. [_contentView addSubview:vReceiptDate];
  807. UILabel *lblDelayDate = [UILabel new];
  808. lblDelayDate.frame = CGRectMake(20, 3, 100, 25);
  809. lblDelayDate.text = @"推迟日期:";
  810. lblDelayDate.font = kTextFont;
  811. [vReceiptDate addSubview:lblDelayDate];
  812. self.delayDate = [UIButton buttonWithType:UIButtonTypeCustom];
  813. self.delayDate.frame = CGRectMake(95, 3,200, 25);
  814. self.delayDate.titleLabel.font = kTextFont;
  815. self.delayDate.tag = 1002;
  816. [self.delayDate setTitle:@"请选择推迟日期" forState:UIControlStateNormal];
  817. self.delayDate.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;
  818. [self.delayDate setTitleColor:[UIColor colorWithWhite:0.5 alpha:0.5] forState:UIControlStateNormal];
  819. [self.delayDate addTarget:self action:@selector(btnDateClick:) forControlEvents:UIControlEventTouchUpInside];
  820. [vReceiptDate addSubview:self.delayDate];
  821. UIButton *btnStrDateClear = [UIButton buttonWithType:UIButtonTypeCustom];
  822. btnStrDateClear.frame = CGRectMake(Screen_Width-15,8,7,12);
  823. btnStrDateClear.tag = 1003;
  824. [ btnStrDateClear setImage:[UIImage imageNamed:@"rightarrow"] forState:UIControlStateNormal];
  825. [vReceiptDate addSubview:btnStrDateClear];
  826. _separatorView = [UIView new];
  827. _separatorView.frame = CGRectMake(0,CGRectGetMaxY(vReceiptDate.frame), Screen_Width, 5);
  828. _separatorView.backgroundColor = LineBackgroundColor;
  829. [_contentView addSubview:_separatorView];
  830. vCustomTableView = [[UITableView alloc] initWithFrame:CGRectMake(0,CGRectGetMaxY(_separatorView.frame), self.view.frame.size.width, 0) style:UITableViewStylePlain];
  831. vCustomTableView.separatorStyle = NO;
  832. vCustomTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
  833. vCustomTableView.delegate = self;
  834. vCustomTableView.dataSource = self;
  835. [_contentView addSubview:vCustomTableView];
  836. vCustomTableView.hidden = YES;
  837. _btnImageHeight = 0;
  838. _positionHeight=0;
  839. /////////图片
  840. _vCollectionView = [UIView new];
  841. _vCollectionView.frame=CGRectMake(0,CGRectGetMaxY(vCustomTableView.frame), Screen_Width, 0);
  842. [_contentView addSubview:_vCollectionView];
  843. [self setupCollectionView];
  844. ////////位置view
  845. _positionImage = [UIView new];
  846. _positionImage.frame=CGRectMake(0,CGRectGetMaxY(_vCollectionView.frame), Screen_Width, 0);
  847. [_contentView addSubview:_positionImage];
  848. //星号
  849. _ivPosition = [UIImageView new];
  850. _ivPosition.frame=CGRectMake(12, 18,9,12);
  851. [_positionImage addSubview:_ivPosition];
  852. _lblPosition = [UILabel new];
  853. _lblPosition.font=kTextFont;
  854. _lblPosition.frame=CGRectMake(32, 13, Screen_Width - 32, 20);
  855. [_positionImage addSubview:_lblPosition];
  856. //照相和相册 —————————
  857. _vImage = [UIView new];
  858. _vImage.frame = CGRectMake(0,CGRectGetMaxY(_positionImage.frame), Screen_Width, _btnImageHeight);
  859. [_contentView addSubview:_vImage];
  860. CGFloat width = (SCREENWIDTH-70)/2;
  861. CustomButton *btnPhoto = [[CustomButton alloc]initWithFrame:CGRectMake(width-90, 0, 70, 20) andImage:[UIImage imageNamed:@"icon_takephoto"] addText:@"照相" addImageWidth:15 addImageHeight:12];
  862. [btnPhoto addTarget:self action:@selector(selectCamera) forControlEvents:(UIControlEventTouchUpInside)];
  863. [_vImage addSubview:btnPhoto];
  864. CustomButton *btn = [[CustomButton alloc]initWithFrame:CGRectMake(width, 0,70 , 20) andImage:[UIImage imageNamed:@"icon_photo"] addText:@"相册" addImageWidth:14 addImageHeight:15];
  865. [btn addTarget:self action:@selector(selectPhotos) forControlEvents:(UIControlEventTouchUpInside)];
  866. [_vImage addSubview:btn];
  867. CustomButton *btnLoaction = [[CustomButton alloc]initWithFrame:CGRectMake(width+85, 0,100 , 20) andImage:[UIImage imageNamed:@"icon_position"] addText:@"所在位置" addImageWidth:13 addImageHeight:16];
  868. [btnLoaction addTarget:self action:@selector(newMap) forControlEvents:(UIControlEventTouchUpInside)];
  869. [_vImage addSubview:btnLoaction];
  870. _vImage.hidden=YES;
  871. //保存按钮
  872. UIImage *pic = [UIImage imageNamed:@"bt_datasave"];
  873. CGFloat h = (Screen_Width - 40) * pic.size.height / pic.size.width;
  874. _saveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  875. _saveBtn.frame = CGRectMake(20, Screen_Height - h - 5 - rectStatusHeight -10- rectNavHeight, Screen_Width - 40,h) ;
  876. [_saveBtn setBackgroundImage:pic forState:UIControlStateNormal];
  877. [_saveBtn addTarget:self action:@selector(saveData) forControlEvents:UIControlEventTouchUpInside];
  878. [self.view addSubview:_saveBtn];
  879. }
  880. /**
  881. 加载回执数据
  882. */
  883. - (void)loadData{
  884. [self startLoading];
  885. NSString *urlStr = ServerURL;
  886. NSMutableDictionary *dict = [NSMutableDictionary new];
  887. [dict setObject:@"GetInstallationForNewReceiptIphone" forKey:@"Action"];
  888. [dict setObject:kkAccountCode forKey:@"AccountCode"];
  889. [dict setObject:kkUserCode forKey:@"UserCode"];
  890. [dict setObject:kkUserPwd forKey:@"UserPassword"];
  891. [dict setObject:kkSessionKey forKey:@"SessionKey"];
  892. [dict setObject:self.code.text forKey:@"InstallationNo"];
  893. self.mDownManager = [[ASIDownManager alloc] init];
  894. self.mDownManager.delegate=self;
  895. self.mDownManager.onRequestSuccess=@selector(onRequestSuccess:);
  896. self.mDownManager.onRequestFail=@selector(onRequestFail:);
  897. [_mDownManager postHttpRequest:urlStr dic:dict path:nil fileName:nil];
  898. }
  899. /**
  900. 保存图片到沙盒
  901. @param currentImage <#currentImage description#>
  902. @param imageName <#imageName description#>
  903. @return <#return value description#>
  904. */
  905. - (DKCamera *) saveImage:(UIImage *)currentImage withName:(NSString *)imageName
  906. {
  907. if (!currentImage) {
  908. return nil;
  909. }
  910. NSDateFormatter *formater = [[NSDateFormatter alloc] init];
  911. formater.dateFormat = @"yyyyMMddHHmmss";
  912. NSString *currentTimeStr = [[formater stringFromDate:[NSDate date]] stringByAppendingFormat:@"_%d_.jpg" ,arc4random_uniform(10000)];
  913. NSData *imageData= [LeslieAsyncImageDownloader resetSizeOfImageData:currentImage maxSize:500];
  914. // 获取沙盒目录
  915. NSString *fullPath ;
  916. if([imageName isEqualToString:@""] || imageName == nil){
  917. fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:currentTimeStr];
  918. }
  919. else{
  920. fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
  921. }
  922. // 将图片写入文件
  923. [imageData writeToFile:fullPath atomically:NO];
  924. UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
  925. DKCamera *camera = [[DKCamera alloc] init];
  926. camera.imagePath = fullPath;
  927. camera.thumbImage = savedImage;// [UIImage imageWithData:data];
  928. return camera;
  929. }
  930. /**
  931. 保存图片数据
  932. @return <#return value description#>
  933. */
  934. - (BOOL)savePicsManager{
  935. self.mDownManager = [[ASIDownManager alloc] init];
  936. self.mDownManager.delegate = self;
  937. //////////////上传图片
  938. NSString *urlStr = ServerURL;
  939. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  940. [dict setObject:@"SaveImg" forKey:@"Action"];
  941. [dict setObject:[NSString stringWithFormat:@"%@",kkAccountCode]forKey:@"AccountCode"];
  942. [dict setObject:kkUserCode forKey:@"UserCode"];
  943. [dict setObject:kkUserPwd forKey:@"UserPassword"];
  944. [dict setObject:kkSessionKey forKey:@"SessionKey"];
  945. [self.imagePaths removeAllObjects];
  946. for (int i=0; i<self.assets.count; i++) {
  947. //图片转化成document的路径。。。。。。。。
  948. // 判断类型来获取Image
  949. DKPhotoAssets *asset = self.assets[i];
  950. DKCamera * c;
  951. if ([asset isKindOfClass:[DKPhotoAssets class]]) {
  952. c = [self saveImage:asset.originImage withName:nil];
  953. }
  954. else if ([asset isKindOfClass:[NSString class]]){
  955. }
  956. else if([asset isKindOfClass:[UIImage class]]){
  957. }
  958. else if ([asset isKindOfClass:[DKCamera class]]){
  959. c = (DKCamera *)asset;
  960. c = [self saveImage:c.thumbImage withName:nil];
  961. }
  962. //延时
  963. [NSThread sleepForTimeInterval:0.5];
  964. NSString* retValue= [_mDownManager syncPostHttpRequestUrl:urlStr dic:dict path:c.imagePath filename:nil fileType:@"image/jpeg"];
  965. if (retValue == nil || retValue.length == 0){
  966. [self cancel];
  967. [self showAlertViewText:@"上传图片失败"];
  968. self.navigationItem.rightBarButtonItem.enabled=YES;
  969. return NO;
  970. }
  971. NSDictionary *dicRetValue = [retValue JSONValue];
  972. if (dicRetValue && [dicRetValue isKindOfClass:[NSDictionary class]]) {
  973. int iStatus = [[dicRetValue objectForKey:@"Status"] intValue];
  974. if (iStatus == 0) {
  975. NSString * imgPath = [dicRetValue objectForKey:@"Result"];
  976. [self.imagePaths addObject:imgPath];
  977. }
  978. }
  979. }
  980. return YES;
  981. }
  982. /**
  983. 保存数据接口
  984. */
  985. - (void)saveDataManager{
  986. self.mDownManager = [[ASIDownManager alloc] init];
  987. self.mDownManager.delegate=self;
  988. self.mDownManager.onRequestSuccess = @selector(onLoadFinish:);
  989. self.mDownManager.onRequestFail = @selector(onLoadFail:);
  990. NSString *urlStr = ServerURL;
  991. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  992. [dict setObject:@"SaveInstallationReceiptIphone" forKey:@"Action"];
  993. [dict setObject:[NSString stringWithFormat:@"%@",kkAccountCode]forKey:@"AccountCode"];
  994. [dict setObject:kkUserCode forKey:@"UserCode"];
  995. [dict setObject:kkUserPwd forKey:@"UserPassword"];
  996. [dict setObject:kkSessionKey forKey:@"SessionKey"];
  997. [dict setObject:kkLicenseCode forKey:@"LicenseCode"];
  998. [dict setObject:self.installationId forKey:@"InstallationID"];
  999. if (_lblPosition.text == nil) {
  1000. [dict setObject:@"" forKey:@"Position"];
  1001. }else{
  1002. [dict setObject:_lblPosition.text forKey:@"Position"];
  1003. }
  1004. ///////主界面
  1005. NSMutableDictionary *dicHead = [[NSMutableDictionary alloc] init];
  1006. NSMutableArray *arrHead = [[NSMutableArray alloc]init];
  1007. [dicHead setObject:self.sReceiptType forKeyedSubscript:@"ReceiptType"];
  1008. [dicHead setObject:self.sDelayDate forKeyedSubscript:@"NextInstallDate"];
  1009. [dicHead setObject:self.installationId forKeyedSubscript:@"InstallationID"];
  1010. [dicHead setObject:self.customerId forKeyedSubscript:@"CustomerID"];
  1011. [dicHead setObject:self.receiptAmount.text forKeyedSubscript:@"ReceivableSum"];
  1012. [dicHead setObject:self.orgId forKeyedSubscript:@"BusinessOrganization"];
  1013. [dicHead setObject:self.salesman forKeyedSubscript:@"SalesMan"];
  1014. [arrHead addObject:dicHead];
  1015. [dict setObject:[Util objectToJson:arrHead] forKey:@"ReceiptData"];
  1016. NSMutableDictionary *dicDetails;
  1017. NSMutableArray* arrDetails = [[NSMutableArray alloc]init];
  1018. for (NewInstallIItemModel* m in self.model.detailsArr) {
  1019. dicDetails = [[NSMutableDictionary alloc] init];
  1020. [dicDetails setObject:m.detailId forKeyedSubscript:@"DetailID"];
  1021. if(m.salesDetailId == nil){
  1022. [dicDetails setObject:@"" forKeyedSubscript:@"SalesDetailID"];
  1023. }else{
  1024. [dicDetails setObject:m.salesDetailId forKeyedSubscript:@"SalesDetailID"];
  1025. }
  1026. [dicDetails setObject:self.installationId forKeyedSubscript:@"InstallationID"];
  1027. if (m.payStyle == nil) {
  1028. [dicDetails setObject:@"0" forKey:@"PaveStyle"];
  1029. }else{
  1030. [dicDetails setObject:m.payStyle forKey:@"PaveStyle"];
  1031. }
  1032. [dicDetails setObject:m.sourceFrom forKeyedSubscript:@"SourceFrom"];
  1033. [dicDetails setObject:m.installQuantity forKeyedSubscript:@"InstallationQuantity"];
  1034. [dicDetails setObject:m.receiptQuantity forKeyedSubscript:@"ReceiptQuantity"];
  1035. [dicDetails setObject:m.receiptType forKeyedSubscript:@"ReceiptType"];
  1036. if(m.remarks == nil){
  1037. [dicDetails setObject:@"" forKeyedSubscript:@"ReceiptRemarks"];
  1038. }else{
  1039. [dicDetails setObject:m.remarks forKeyedSubscript:@"ReceiptRemarks"];
  1040. }
  1041. [arrDetails addObject:dicDetails];
  1042. }
  1043. [dict setObject:[Util objectToJson:arrDetails] forKey:@"ReceiptDetailData"];
  1044. //////付款方式
  1045. NSMutableDictionary *dicSettle = [[NSMutableDictionary alloc] init];
  1046. NSMutableArray* arrSettle = [[NSMutableArray alloc]init];
  1047. if (self.sSettlementType == nil || [self.sSettlementType isEqual:@""]) {
  1048. [dict setObject:@"" forKey:@"ReceiptEarnestData"];
  1049. }else{
  1050. [dicSettle setObject:self.sSettlementType forKeyedSubscript:@"SettlementType"];
  1051. [dicSettle setObject:self.sSettlementTypeName forKeyedSubscript:@"SettlementTypeName"];
  1052. [dicSettle setObject:self.installationId forKeyedSubscript:@"InstallationID"];
  1053. [dicSettle setObject:self.receiptAmount.text forKeyedSubscript:@"ReceivableSum"];
  1054. [dicSettle setObject:self.sEarnestFee forKeyedSubscript:@"EarnestFee"];
  1055. [dicSettle setObject:self.sExitsHandleFee forKeyedSubscript:@"ExistsHandlingFee"];
  1056. [dicSettle setObject:self.sRemarks forKeyedSubscript:@"Remarks"];
  1057. [arrSettle addObject:dicSettle];
  1058. [dict setObject:[Util objectToJson:arrSettle] forKey:@"ReceiptEarnestData"];
  1059. }
  1060. if (self.imagePaths && self.imagePaths.count>0) {
  1061. [dict setObject:[self.imagePaths componentsJoinedByString:@"," ] forKey:@"ImagePath"];
  1062. }
  1063. [self.mDownManager postHttpRequest:urlStr dic:dict files:nil];
  1064. }
  1065. /**
  1066. 隐藏进度条
  1067. */
  1068. - (void)cancel {
  1069. [self stopLoading];
  1070. }
  1071. /**
  1072. 返回按钮
  1073. */
  1074. - (void)goBack
  1075. {
  1076. [self.navigationController popViewControllerAnimated:YES];
  1077. if([self.refreshDelegate respondsToSelector:@selector(refreshFollowUpData)]){
  1078. [self.refreshDelegate refreshFollowUpData];
  1079. }
  1080. }
  1081. /**
  1082. 保存前的校验
  1083. @return <#return value description#>
  1084. */
  1085. - (BOOL)check{
  1086. if(self.code.text == nil||[self.code.text isEqualToString:@""]){
  1087. [self showAlertViewText:@"请输入或扫描单号"];
  1088. return NO;
  1089. }
  1090. if(self.sCode == nil || [self.sCode isEqualToString:@""] )
  1091. {
  1092. [self showAlertViewText:@"请按回车加载数据!"];
  1093. return NO;
  1094. }
  1095. if(self.receivablesValue != nil && [self.receivablesValue.text doubleValue] > 0 && self.receiptAmount.text.length == 0)
  1096. {
  1097. [self showAlertViewText:@"请输入回执金额"];
  1098. return NO;
  1099. }
  1100. if(self.receiptAmount.text != nil||![self.receiptAmount.text isEqualToString:@""]){
  1101. RegularExpression *regularExpr = [[RegularExpression alloc]init];
  1102. bool receiptAmountCheck = [regularExpr AmountRegular:self.receiptAmount.text];
  1103. if(!receiptAmountCheck){
  1104. [self showAlertViewText:@"回执金额格式不正确"];
  1105. self.receiptAmount.text = @"";
  1106. return NO;
  1107. }
  1108. }
  1109. if(self.receivablesValue != nil && [self.receivablesValue.text doubleValue] > 0
  1110. && self.receiptAmount.text.length != 0 &&[self.receivablesValue.text doubleValue] < [self.receiptAmount.text doubleValue])
  1111. {
  1112. [self showAlertViewText:@"回执金额不能大于应收金额"];
  1113. return NO;
  1114. }
  1115. if([self.sReceiptType isEqualToString:@"3"] && (self.sDelayDate == nil||[self.sDelayDate isEqualToString:@""]))
  1116. {
  1117. [self showAlertViewText:@"请选择推迟日期"];
  1118. return NO;
  1119. }
  1120. NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
  1121. [dateFormat setDateFormat:@"yyyy-MM-dd"];
  1122. NSDate *date = [dateFormat dateFromString:self.sDelayDate];
  1123. NSDate *lastDay = [NSDate dateWithTimeInterval:-24*60*60 sinceDate:[self getCurrentTime]];
  1124. if([self.sReceiptType isEqualToString:@"3"] && [self compareOneDay:date withAnotherDay:lastDay] != 1){
  1125. [self showAlertViewText:@"推迟日期不能小于当前日期"];
  1126. return NO;
  1127. }
  1128. for (NewInstallIItemModel *m in self.model.detailsArr) {
  1129. if(m.receiptQuantity == nil || m.receiptQuantity.length == 0)
  1130. {
  1131. [self showAlertViewText:@"请输入回执数量"];
  1132. return NO;
  1133. }
  1134. if(m.completeQuantity == nil || m.completeQuantity.length == 0)
  1135. {
  1136. m.completeQuantity = @"0";
  1137. }
  1138. if(m.installQuantity == nil || m.installQuantity.length == 0)
  1139. {
  1140. m.installQuantity = @"0";
  1141. }
  1142. if([m.receiptQuantity doubleValue] > [MAX_COUNT doubleValue])
  1143. {
  1144. [self showAlertViewText:[NSString stringWithFormat:@"回执数量的最大值为%@",MAX_COUNT ]];
  1145. return NO;
  1146. }
  1147. if([m.receiptQuantity doubleValue] > [m.installQuantity doubleValue]-[m.completeQuantity doubleValue])
  1148. {
  1149. [self showAlertViewText:@"回执数量不能大于安装数量减去完成数量"];
  1150. return NO;
  1151. }
  1152. //0为传过来的是@“”;20211110
  1153. // if(m.salesDetailType != 2 || m.salesDetailType == 0){
  1154. // if([m.outQuantity doubleValue] <= 0){
  1155. // [self showAlertViewText:@"出库数量不能小于等于0"];
  1156. // return NO;
  1157. // }
  1158. // }
  1159. //
  1160. if([_sReceiptType intValue] == 1 && [m.receiptType intValue] == 5){
  1161. if([m.receiptQuantity doubleValue] < 0){
  1162. [self showAlertViewText:@"回执数量不能小于0"];
  1163. return NO;
  1164. }
  1165. double min;
  1166. if([m.installQuantity doubleValue]>[m.outQuantity doubleValue]){
  1167. min =[m.outQuantity doubleValue];
  1168. }else{
  1169. min = [m.installQuantity doubleValue];
  1170. }
  1171. if([m.receiptQuantity doubleValue]>= min){
  1172. [self showAlertViewText:@"回执数量不能大于或等于(安装数量或出库数量的最小值)"];
  1173. return NO;
  1174. }
  1175. if([m.receiptQuantity doubleValue] >= [m.maxReceiptQuantity doubleValue]){
  1176. [self showAlertViewText:@"回执数量不能大于或等于最大允许回执数量"];
  1177. return NO;
  1178. }
  1179. }
  1180. }
  1181. return YES;
  1182. }
  1183. /**
  1184. 保存数据
  1185. */
  1186. - (void)saveData{
  1187. [self.view endEditing:YES];
  1188. if (![self check]) {
  1189. return;
  1190. }
  1191. self.navigationItem.rightBarButtonItem.enabled=NO;
  1192. [self startLoading];
  1193. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  1194. if ([self savePicsManager]) {
  1195. [self saveDataManager];
  1196. }
  1197. });
  1198. }
  1199. /**
  1200. 收款方式的画面跳转
  1201. */
  1202. - (void)settlementTypeCilck{
  1203. if (self.sCode == nil || self.sCode.length == 0 |
  1204. self.receivablesValue.text == nil || [self.receivablesValue.text doubleValue] == 0) {
  1205. return;
  1206. }
  1207. [self.view endEditing:YES];
  1208. self.hidesBottomBarWhenPushed = YES;
  1209. SettlementTypeVC *tc = [[SettlementTypeVC alloc] init];
  1210. tc.sDelegate = self;
  1211. [self.navigationController pushViewController:tc animated:YES];
  1212. self.hidesBottomBarWhenPushed=NO;
  1213. }
  1214. /**
  1215. 单据回执类型画面跳转
  1216. */
  1217. - (void)btnTypeCilck{
  1218. if (self.sCode == nil || self.sCode.length == 0) {
  1219. return;
  1220. }
  1221. [self.view endEditing:YES];
  1222. self.hidesBottomBarWhenPushed=YES;
  1223. StatusInfoTextVC *tc = [[StatusInfoTextVC alloc] init];
  1224. tc.sdelegate = self;
  1225. [tc.arrFilter addObjectsFromArray:_arrayStatus];
  1226. [self.navigationController pushViewController:tc animated:YES];
  1227. self.hidesBottomBarWhenPushed=NO;
  1228. }
  1229. /**
  1230. 清空画面
  1231. */
  1232. - (void)clearData{
  1233. self.code.enabled=YES;
  1234. self.code.text = @"";
  1235. self.sCode = @"";
  1236. self.receiptAmount.text = @"";
  1237. self.lblCustomerNameValue.text = @"";
  1238. self.receivablesValue.text = @"";
  1239. self.lblServiceStaffName.text = @"";
  1240. self.sDelayDate = @"";
  1241. [self.delayDate setTitle:@"请选择推迟日期" forState:UIControlStateNormal];
  1242. self.sReceiptType = @"";
  1243. [self.receiptType setTitle:@"请选择回执类型" forState:UIControlStateNormal];
  1244. self.sSettlementType = @"";
  1245. self.sSettlementTypeName = @"";
  1246. [self.settlementType setTitle:@"请选择收款方式" forState:UIControlStateNormal];
  1247. _lblPosition.text = @"";
  1248. _positionImage.hidden=YES;
  1249. _vImage.hidden=YES;
  1250. _btnImageHeight=0;
  1251. _positionHeight=0;
  1252. [self.imagePaths removeAllObjects];
  1253. [self.model.detailsArr removeAllObjects];
  1254. [self.assets removeAllObjects];
  1255. [self.vCustomTableView reloadData];
  1256. [self.collectionView reloadData];
  1257. }
  1258. /**
  1259. 清空单个控件数据
  1260. @param sender <#sender description#>
  1261. */
  1262. - (void)clearData:(id)sender{
  1263. UIButton *btn=sender;
  1264. [self.view endEditing:YES];
  1265. switch (btn.tag) {
  1266. case 1001:
  1267. {
  1268. self.code.text = @"";
  1269. }
  1270. break;
  1271. case 1003:
  1272. {
  1273. self.sDelayDate = @"";
  1274. [self.delayDate setTitle:@"请选择回执开始日期" forState:UIControlStateNormal];
  1275. }
  1276. break;
  1277. default:
  1278. break;
  1279. }
  1280. }
  1281. /**
  1282. 日历点击事件
  1283. @param sender <#sender description#>
  1284. */
  1285. - (void)btnDateClick:(id)sender{
  1286. UIButton *btn=sender;
  1287. [self.view endEditing:YES];
  1288. if (self.sCode == nil || self.sCode.length == 0 || ![self.sReceiptType isEqualToString: @"3"]) {
  1289. return;
  1290. }
  1291. __weak typeof(self) weakself=self;
  1292. switch (btn.tag) {
  1293. case 1002:
  1294. {
  1295. _dealDatePicker = [BRDatePickerView PickerAlertWithTitle:@""];
  1296. [_dealDatePicker configureSelectionBlock:^(NSString *date){
  1297. self.sDelayDate = date;
  1298. } andCompletionBlock:^(void){
  1299. [weakself.delayDate setTitle:self.sDelayDate forState:UIControlStateNormal];
  1300. } andCancelBlock:^(void){
  1301. self.sDelayDate = weakself.delayDate.titleLabel.text;
  1302. if([self.sDelayDate isEqualToString:@"请选择回执开始日期"]||[self.sDelayDate isEqualToString:@"请选择推迟日期"]){
  1303. self.sDelayDate = @"";
  1304. }
  1305. }];
  1306. [_dealDatePicker show];
  1307. }
  1308. break;
  1309. default:
  1310. break;
  1311. }
  1312. }
  1313. /**
  1314. 隐藏键盘
  1315. */
  1316. - (void)hideKey
  1317. {
  1318. [self.view endEditing:YES];
  1319. }
  1320. /**
  1321. 文本框的长度限制 实现监听方法
  1322. @param sender <#sender description#>
  1323. */
  1324. - (void)onFocusPeopleEditingChanged:(NSNotification *)sender
  1325. {
  1326. UITextField *textField = (UITextField *)sender.object;
  1327. NSString *toBeString = textField.text;
  1328. NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
  1329. int kMaxLength = 0;
  1330. //费用
  1331. if ([textField isEqual:self.receiptAmount ]) {
  1332. kMaxLength = 17;
  1333. if (toBeString != nil && toBeString.length>0 && [toBeString floatValue]-MAXIMUM_QUANTITY>0.0000000001f) {
  1334. textField.text = MAX_COUNT;
  1335. toBeString = MAX_COUNT;
  1336. }
  1337. }
  1338. if ([lang isEqualToString:@"zh-Hans"]) {
  1339. UITextRange *selectedRange = [textField markedTextRange];
  1340. UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
  1341. if (!position) {
  1342. if (toBeString.length > kMaxLength) {
  1343. textField.text = [toBeString substringToIndex:kMaxLength];
  1344. }
  1345. }
  1346. }else{
  1347. if (toBeString.length > kMaxLength) {
  1348. textField.text = [toBeString substringToIndex:kMaxLength];
  1349. }
  1350. }
  1351. }
  1352. /**
  1353. 加载数据函数
  1354. @param code <#code description#>
  1355. */
  1356. - (void)reloadDataWithOnlyCode:(NSString *)code
  1357. {
  1358. self.code.text = code;
  1359. self.sCode = code;
  1360. self.receiptAmount.enabled = YES;
  1361. double delayInSeconds = 0.5;
  1362. dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
  1363. dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  1364. //刷新
  1365. [self loadData];
  1366. });
  1367. }
  1368. /**
  1369. 详细信息中回执类型点击
  1370. @param cell <#cell description#>
  1371. */
  1372. - (void)btnGoReceiptType:(NewInstallDetailListsCell *)cell{
  1373. if (self.model.isDelay) {
  1374. return;
  1375. }
  1376. self.hidesBottomBarWhenPushed=YES;
  1377. self.cellIndex = cell.cellIndex;
  1378. NewInstallIItemModel *model = self.model.detailsArr[self.cellIndex];
  1379. if([model.sourceFrom intValue] == 1||[model.sourceFrom intValue] == 0){
  1380. [self initStatus2:YES];
  1381. }else{
  1382. [self initStatus2:NO];
  1383. }
  1384. StatusInfoTextVC *tc = [[StatusInfoTextVC alloc] init];
  1385. tc.sdelegate = self;
  1386. [tc.arrFilter addObjectsFromArray: _arrayReceiptType];
  1387. [self.navigationController pushViewController:tc animated:YES];
  1388. self.hidesBottomBarWhenPushed = NO;
  1389. }
  1390. /**
  1391. 获取照片数
  1392. @return <#return value description#>
  1393. */
  1394. - (NSInteger)cameraCount{
  1395. NSInteger count = 0;
  1396. for (int i = 0; i < self.assets.count; i++) {
  1397. id asset = self.assets[i];
  1398. if ([asset isKindOfClass:[DKCamera class]]) {
  1399. count++;
  1400. }
  1401. }
  1402. return count;
  1403. }
  1404. /**
  1405. 拍照事件
  1406. */
  1407. - (void)selectCamera{
  1408. DKCameraViewController *cameraVc = [[DKCameraViewController alloc] init];
  1409. __weak typeof(self) weakSelf = self;
  1410. // 多选相册+相机多拍 回调
  1411. [cameraVc startCameraOrPhotoFileWithViewController:self complate:^(NSArray *object) {
  1412. // 选择完照片、拍照完回调
  1413. [object enumerateObjectsUsingBlock:^(id asset, NSUInteger idx, BOOL *stop) {
  1414. if(weakSelf.assets.count < 9){
  1415. if ([asset isKindOfClass:[DKCamera class]]) {
  1416. [weakSelf.assets addObject:asset];
  1417. }else{
  1418. [weakSelf.assets addObject:asset];
  1419. }
  1420. }else{
  1421. [self showAlertViewText:@"最多只能选择9张图片"];
  1422. }
  1423. }];
  1424. [weakSelf.collectionView reloadData];
  1425. }];
  1426. }
  1427. /**
  1428. 获取table view的高度
  1429. @param dataArray <#dataArray description#>
  1430. @return <#return value description#>
  1431. */
  1432. - (CGFloat)getDataViewHeight:(NSArray *)dataArray {
  1433. // 上下间隔已经在frame上做了
  1434. NSInteger row = dataArray.count;
  1435. return (row * 262);
  1436. }
  1437. /**
  1438. 选择相册事件
  1439. */
  1440. - (void)selectPhotos {
  1441. // 创建控制器
  1442. DKPhotoPickerViewController *pickerVc = [[DKPhotoPickerViewController alloc] init];
  1443. // 默认显示相册里面的内容SavePhotos
  1444. pickerVc.status = PickerViewShowStatusCameraRoll;
  1445. pickerVc.selectPickers = self.assets;
  1446. // 最多能选9张图片
  1447. pickerVc.minCount = 9;
  1448. pickerVc.cameraCount = [self cameraCount];
  1449. pickerVc.delegate = self;
  1450. [pickerVc show];
  1451. }
  1452. /**
  1453. 打开地图界面
  1454. 关宏厚删除高德地图
  1455. 2018-11-14
  1456. */
  1457. - (void)newMap{
  1458. // self.hidesBottomBarWhenPushed = YES;
  1459. // MapViewController *mc = [[MapViewController alloc] init];
  1460. // mc.pDelegate = self;
  1461. // [self.navigationController pushViewController:mc animated:YES];
  1462. }
  1463. #pragma mark -得到当前时间
  1464. /**
  1465. 获得当前日期
  1466. @return <#return value description#>
  1467. */
  1468. - (NSDate *)getCurrentTime{
  1469. NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
  1470. [formatter setDateFormat:@"yyyy-MM-dd"];
  1471. NSString *dateTime=[formatter stringFromDate:[NSDate date]];
  1472. NSDate *date = [formatter dateFromString:dateTime];
  1473. return date;
  1474. }
  1475. /**
  1476. 比较时间
  1477. @param oneDay <#oneDay description#>
  1478. @param anotherDay <#anotherDay description#>
  1479. @return <#return value description#>
  1480. */
  1481. - (int)compareOneDay:(NSDate *)oneDay withAnotherDay:(NSDate *)anotherDay
  1482. {
  1483. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1484. [dateFormatter setDateFormat:@"dd-MM-yyyy-HHmmss"];
  1485. NSString *oneDayStr = [dateFormatter stringFromDate:oneDay];
  1486. NSString *anotherDayStr = [dateFormatter stringFromDate:anotherDay];
  1487. NSDate *dateA = [dateFormatter dateFromString:oneDayStr];
  1488. NSDate *dateB = [dateFormatter dateFromString:anotherDayStr];
  1489. NSComparisonResult result = [dateA compare:dateB];
  1490. NSLog(@"date1 : %@, date2 : %@", oneDay, anotherDay);
  1491. if (result == NSOrderedDescending) {
  1492. //NSLog(@"Date1 is in the future");
  1493. return 1;
  1494. }
  1495. else if (result == NSOrderedAscending){
  1496. //NSLog(@"Date1 is in the past");
  1497. return -1;
  1498. }
  1499. //NSLog(@"Both dates are the same");
  1500. return 0;
  1501. }
  1502. @end