ICModels.swift 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. //
  2. // ICModels.swift
  3. // O2Platform
  4. //
  5. // Created by 刘振兴 on 2016/10/26.
  6. // Copyright © 2016年 zoneland. All rights reserved.
  7. //
  8. import Foundation
  9. import ObjectMapper
  10. typealias ICTimeComponent = (year:String,month:String,day:String,hour:String,minute:String,second:String)
  11. enum AttendanceStatusType:String {
  12. case LEAVE = "请假"
  13. case LATE = "迟到"
  14. case EARLY = "早退"
  15. case ABSENCE = "缺勤"
  16. case ABNORMAL = "异常打卡"
  17. case UNDERTIME = "工时不足"
  18. case NORMAL = "正常"
  19. }
  20. enum AttendanceWorkType:String {
  21. case HOLIDAY = "节假日"
  22. case WEEKEND = "周末"
  23. case WORKDAY = "调休工作日"
  24. case NORMALWORKDAY = "工作日"
  25. }
  26. ///返回时间每个单元的值
  27. func calcTimeComponetFromDate(date:Date) -> ICTimeComponent {
  28. let calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)
  29. let comps = calendar?.components([NSCalendar.Unit.year,NSCalendar.Unit.month,NSCalendar.Unit.day,NSCalendar.Unit.hour,NSCalendar.Unit.minute,NSCalendar.Unit.second], from: date)
  30. let year:Int = (comps?.year!)!
  31. let month:Int = (comps?.month!)!
  32. let monthStr = addPrefixByTimeUnit(timeUnit: month, prefix: "0")
  33. let day:Int = (comps?.day!)!
  34. let dayStr = addPrefixByTimeUnit(timeUnit: day, prefix: "0")
  35. let hour:Int = (comps?.hour!)!
  36. let hourStr = addPrefixByTimeUnit(timeUnit: hour, prefix: "0")
  37. let minute:Int = (comps?.minute!)!
  38. let minuteStr = addPrefixByTimeUnit(timeUnit: minute, prefix: "0")
  39. let second:Int = (comps?.second!)!
  40. let secondStr = addPrefixByTimeUnit(timeUnit: second, prefix: "0")
  41. return ("\(year)","\(monthStr)","\(dayStr)","\(hourStr)","\(minuteStr)","\(secondStr)")
  42. }
  43. private func addPrefixByTimeUnit(timeUnit:Int,prefix:String) -> String{
  44. if timeUnit < 10 {
  45. return "\(prefix)\(timeUnit)"
  46. }else {
  47. return "\(timeUnit)"
  48. }
  49. }
  50. ///每个考勤数据类型
  51. func calcAttendanceStatus(attendance:AttendanceDetailData) -> (statusType:AttendanceStatusType,workType:AttendanceWorkType,isAppeal:Bool) {
  52. //考勤类型
  53. var statusType:AttendanceStatusType = .NORMAL
  54. if attendance.isGetSelfHolidays == true {
  55. statusType = .LEAVE
  56. }else if attendance.isLate == true {
  57. statusType = .LATE
  58. }else if attendance.isLeaveEarlier == true {
  59. statusType = .EARLY
  60. }else if attendance.isAbsent == true {
  61. statusType = .ABSENCE
  62. }else if attendance.isAbnormalDuty == true {
  63. statusType = .ABNORMAL
  64. }else if attendance.isLackOfTime == true {
  65. statusType = .UNDERTIME
  66. }
  67. //工作时间类型
  68. var workType:AttendanceWorkType = .NORMALWORKDAY
  69. if attendance.isHoliday == true {
  70. workType = .HOLIDAY
  71. }else if attendance.isWeekend == true {
  72. workType = .WEEKEND
  73. }else if attendance.isWorkday == true {
  74. workType = .WORKDAY
  75. }
  76. //是否申诉
  77. var isAppeal = false
  78. if attendance.isAbsent == true || attendance.isLate == true || attendance.isLeaveEarlier == true || attendance.isAbnormalDuty == true || attendance.isLackOfTime == true {
  79. isAppeal = true
  80. }
  81. return (statusType,workType,isAppeal)
  82. }
  83. ///首页统计实体模型
  84. class AttendanceTotalEntry {
  85. //数量
  86. var count:Int = 0
  87. //标签名
  88. var label:String?
  89. //类型
  90. var type:AttendanceStatusType = .NORMAL
  91. init(label:String,type:AttendanceStatusType) {
  92. self.label = label
  93. self.type = type
  94. }
  95. func incCount() {
  96. count+=1
  97. }
  98. }
  99. ///待审核显示数据模型
  100. class AttendanceCheckEntry {
  101. var identityName:String?
  102. var appealDate:String?
  103. var appealReson:String?
  104. var appealDesc:String?
  105. var appealObj:AttendanceAppealInfoData?
  106. static public func genernateEntry(infoData:AttendanceAppealInfoData) -> AttendanceCheckEntry {
  107. let entry = AttendanceCheckEntry()
  108. entry.identityName = "\(infoData.empName!)(\(infoData.departmentName!))"
  109. entry.appealDate = infoData.appealDateString
  110. let reson = calcAppealReson(infoData)
  111. entry.appealReson = reson.appealReson
  112. entry.appealDesc = reson.appealDesc
  113. entry.appealObj = infoData
  114. return entry
  115. }
  116. static private func calcAppealReson(_ infoData:AttendanceAppealInfoData) -> (appealReson:String,appealDesc:String) {
  117. var reson = infoData.appealReason!
  118. if let holidayType = infoData.selfHolidayType {
  119. if holidayType.isEmpty == false {
  120. reson.append("(\(holidayType))")
  121. }
  122. }
  123. var desc = infoData.appealDescription!
  124. var addr = infoData.address!
  125. if addr.isEmpty == false {
  126. addr = "地点:\(addr)"
  127. }
  128. if desc.isEmpty == false {
  129. desc = "事由:\(desc)"
  130. }
  131. desc = addr.isEmpty == false ? "\(addr),\(desc)" : desc
  132. return (reson,desc)
  133. }
  134. }
  135. ///详细页显示数据模型
  136. class AttendanceDetailEntry {
  137. var aDate:String?
  138. var aTimeInterval:String?
  139. var aWorkType:String?
  140. var aStatusType:String?
  141. var appealStatus:Int?
  142. var isAppeal:Bool = false
  143. var detailObj:AttendanceDetailData?
  144. init() {
  145. }
  146. static public func generateDetailEntry(detailData:AttendanceDetailData) -> AttendanceDetailEntry {
  147. let entry = AttendanceDetailEntry()
  148. entry.aDate = detailData.recordDateString //申诉状态:0-未申诉,1-申诉中,-1-申诉未通过,9-申诉通过
  149. entry.appealStatus = detailData.appealStatus
  150. entry.aTimeInterval = "\(detailData.onDutyTime!) - \(detailData.offDutyTime!)"
  151. let t = calcAttendanceStatus(attendance: detailData)
  152. entry.aWorkType = t.workType.rawValue
  153. entry.aStatusType = t.statusType.rawValue
  154. entry.isAppeal = t.isAppeal
  155. entry.detailObj = detailData
  156. return entry
  157. }
  158. }
  159. class AttendanceAppealInfoEntry:Mappable {
  160. var appealStatus:Int = 1 //申诉状态:0-未申诉,1-申诉中,-1-申诉未通过,9-申诉通过
  161. var appealReason:String?//原因 临时请假 出差 因公外出 其他
  162. var appealDescription:String?//事由
  163. var selfHolidayType:String?//如果原因是临时请假 这里需要选择一个请假类型 :带薪年休假 带薪病假 带薪福利假 扣薪事假 其他
  164. var address:String?//外出地址
  165. var startTime:String?// yyyy-MM-dd HH:mm
  166. var endTime:String?// yyyy-MM-dd HH:mm
  167. var processPerson1:String?// 审批人一
  168. init() {
  169. }
  170. required init?(map: Map) {
  171. }
  172. func mapping(map: Map) {
  173. appealStatus<-map["appealStatus"]
  174. appealReason<-map["appealReason"]
  175. appealDescription<-map["appealDescription"]
  176. selfHolidayType<-map["selfHolidayType"]
  177. address<-map["address"]
  178. startTime<-map["startTime"]
  179. endTime<-map["endTime"]
  180. processPerson1<-map["processPerson1"]
  181. }
  182. }