Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

518 строки
28 KiB

  1. package com.ffii.fpsms.m18.service
  2. import com.ffii.core.utils.JwtTokenUtil
  3. import com.ffii.fpsms.api.service.ApiCallerService
  4. import com.ffii.fpsms.m18.M18Config
  5. import com.ffii.fpsms.m18.enums.M18DataLogStatus
  6. import com.ffii.fpsms.m18.model.*
  7. import com.ffii.fpsms.m18.utils.CommonUtils
  8. import com.ffii.fpsms.m18.web.models.M18CommonRequest
  9. import com.ffii.fpsms.modules.deliveryOrder.service.DeliveryOrderLineService
  10. import com.ffii.fpsms.modules.deliveryOrder.service.DeliveryOrderService
  11. import com.ffii.fpsms.modules.master.service.ItemUomService
  12. import com.ffii.fpsms.modules.master.service.ItemsService
  13. import com.ffii.fpsms.modules.master.service.ShopService
  14. import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatus
  15. import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatus
  16. import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderType
  17. import com.ffii.fpsms.modules.purchaseOrder.service.PurchaseOrderLineService
  18. import com.ffii.fpsms.modules.purchaseOrder.service.PurchaseOrderService
  19. import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderLineRequest
  20. import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderRequest
  21. import org.slf4j.Logger
  22. import org.slf4j.LoggerFactory
  23. import org.springframework.stereotype.Service
  24. import java.time.LocalDateTime
  25. import kotlin.reflect.full.memberProperties
  26. import java.time.format.DateTimeFormatter
  27. import com.ffii.fpsms.m18.model.SyncResult
  28. @Service
  29. open class M18PurchaseOrderService(
  30. val m18Config: M18Config,
  31. val apiCallerService: ApiCallerService,
  32. val m18DataLogService: M18DataLogService,
  33. val purchaseOrderService: PurchaseOrderService,
  34. val purchaseOrderLineService: PurchaseOrderLineService,
  35. val deliveryOrderService: DeliveryOrderService,
  36. val deliveryOrderLineService: DeliveryOrderLineService,
  37. val itemsService: ItemsService,
  38. val shopService: ShopService,
  39. val itemUomService: ItemUomService,
  40. val m18MasterDataService: M18MasterDataService
  41. ) {
  42. val commonUtils = CommonUtils()
  43. val logger: Logger = LoggerFactory.getLogger(JwtTokenUtil::class.java)
  44. val lastModifyDateStart = "2025-05-14 14:00:00"
  45. val lastModifyDateEnd = "2025-05-14 14:30:00"
  46. // val lastModifyDateConds =
  47. // "lastModifyDate=largerOrEqual=${lastModifyDateStart}=and=lastModifyDate=lessOrEqual=${lastModifyDateEnd}"
  48. // val lastModifyDate = LocalDateTime.now().minusMinutes(30)
  49. // val commonConds =
  50. // "(beId=equal=${m18Config.BEID_PF}=or=beId=equal=${m18Config.BEID_PP}=or=beId=equal=${m18Config.BEID_TOA})=and=lastModifyDate=largerOrEqual=${lastModifyDate}"
  51. // M18 API
  52. val M18_LOAD_PURCHASE_ORDER_API = "/root/api/read/po"
  53. val M18_FETCH_PURCHASE_ORDER_LIST_API = "/search/search"
  54. // Include material po, oem po
  55. open fun getPurchaseOrdersWithType(request: M18CommonRequest): M18PurchaseOrderListResponseWithType? {
  56. val purchaseOrders = M18PurchaseOrderListResponseWithType(mutableListOf())
  57. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  58. val lastDateConds = if (request.modifiedDateFrom != null && request.modifiedDateTo != null) {
  59. val dateFrom = LocalDateTime.parse(request.modifiedDateFrom, formatter).toString()
  60. val dateTo = LocalDateTime.parse(request.modifiedDateTo, formatter).toString()
  61. "lastModifyDate=largerOrEqual=$dateFrom=and=lastModifyDate=lessOrEqual=$dateTo"
  62. } else {
  63. ""
  64. }
  65. val dDateConds = if (request.dDateFrom != null && request.dDateTo != null) {
  66. val dateFrom = LocalDateTime.parse(request.dDateFrom, formatter).toLocalDate().toString()
  67. val dateTo = LocalDateTime.parse(request.dDateTo, formatter).toLocalDate().toString()
  68. "dDate=largerOrEqual=$dateFrom=and=dDate=lessOrEqual=$dateTo"
  69. } else {
  70. ""
  71. }
  72. val dDateEqualConds = if (request.dDateEqual != null) {
  73. val dDateEqual = LocalDateTime.parse(request.dDateEqual, formatter).toLocalDate().toString()
  74. "dDate=equal=$dDateEqual"
  75. } else {
  76. ""
  77. }
  78. // Material PO
  79. val materialPoBuyers =
  80. commonUtils.listToString(listOf(m18Config.BEID_PP, m18Config.BEID_PF), "beId=equal=", "=or=")
  81. val materialPoSupplierNot = commonUtils.listToString(
  82. shopService.findM18VendorIdsByCodeRegexp(m18Config.MATERIAL_PO_SUPPLIER_NOT),
  83. "venId=unequal=",
  84. "=or="
  85. )
  86. var materialPoConds = "(${materialPoBuyers})=and=(${materialPoSupplierNot}))"
  87. if (request.modifiedDateFrom != null && request.modifiedDateTo != null) {
  88. materialPoConds += "=and=(${lastDateConds})"
  89. }
  90. if (request.dDateFrom != null && request.dDateTo != null) {
  91. materialPoConds += "=and=(${dDateConds})"
  92. }
  93. if (request.dDateEqual != null) {
  94. materialPoConds += "=and=(${dDateEqualConds})"
  95. }
  96. println("materialPoConds: ${materialPoConds}")
  97. val materialPoParams = M18PurchaseOrderListRequest(
  98. params = null,
  99. conds = materialPoConds
  100. )
  101. try {
  102. purchaseOrders.valuesWithType += Pair(
  103. PurchaseOrderType.MATERIAL,
  104. apiCallerService.get<M18PurchaseOrderListResponse, M18PurchaseOrderListRequest>(
  105. M18_FETCH_PURCHASE_ORDER_LIST_API,
  106. materialPoParams
  107. ).block()
  108. )
  109. } catch (e: Exception) {
  110. logger.error("(Getting Material Po list) Error on Function - ${e.stackTrace}")
  111. logger.error(e.message)
  112. }
  113. purchaseOrders.query = materialPoConds
  114. // Shop PO
  115. /* val shopPoBuyers = commonUtils.listToString(listOf(m18Config.BEID_TOA), "beId=equal=", "=or=")
  116. val shopPoSupplier = commonUtils.listToString(
  117. shopService.findM18VendorIdsByCodeRegexp(m18Config.SHOP_PO_SUPPLIER),
  118. "venId=equal=",
  119. "=or="
  120. )
  121. val shopPoConds = "(${shopPoBuyers})=and=(${shopPoSupplier})=and=(${lastModifyDateConds})"
  122. println("shopPoConds: ${shopPoConds}")
  123. val shopPoParams = M18PurchaseOrderListRequest(
  124. params = null,
  125. conds = shopPoConds
  126. )
  127. try {
  128. purchaseOrders.valuesWithType += Pair(
  129. PurchaseOrderType.SHOP, apiCallerService.get<M18PurchaseOrderListResponse, M18PurchaseOrderListRequest>(
  130. M18_FETCH_PURCHASE_ORDER_LIST_API,
  131. shopPoParams
  132. ).block()
  133. )
  134. } catch (e: Exception) {
  135. logger.error("(Getting Shop Po list) Error on Function - ${e.stackTrace}")
  136. logger.error(e.message)
  137. } */
  138. // OEM PO
  139. /* val oemPoBuyers = commonUtils.listToString(listOf(m18Config.BEID_PF, m18Config.BEID_PP), "beId=equal=", "=or=")
  140. val oemPoSupplier = commonUtils.listToString(
  141. shopService.findM18VendorIdsByCodeRegexp(m18Config.OEM_PO_SUPPLIER),
  142. "venId=equal=",
  143. "=or="
  144. )
  145. val oemPoConds = "(${oemPoBuyers})=and=(${oemPoSupplier})=and=(${lastModifyDateConds})"
  146. println("oemPoConds: ${oemPoConds}")
  147. val oemPoParams = M18PurchaseOrderListRequest(
  148. params = null,
  149. conds = oemPoConds
  150. )
  151. try {
  152. purchaseOrders.valuesWithType += Pair(
  153. PurchaseOrderType.OEM, apiCallerService.get<M18PurchaseOrderListResponse, M18PurchaseOrderListRequest>(
  154. M18_FETCH_PURCHASE_ORDER_LIST_API,
  155. oemPoParams
  156. ).block()
  157. )
  158. } catch (e: Exception) {
  159. logger.error("(Getting OEM Po list) Error on Function - ${e.stackTrace}")
  160. logger.error(e.message)
  161. } */
  162. return purchaseOrders
  163. }
  164. open fun getPurchaseOrder(id: Long): M18PurchaseOrderResponse? {
  165. val purchaseOrderParams = M18PurchaseOrderRequest(
  166. id = id
  167. )
  168. var purchaseOrder: M18PurchaseOrderResponse? = null
  169. try {
  170. purchaseOrder = apiCallerService.get<M18PurchaseOrderResponse, M18PurchaseOrderRequest>(
  171. M18_LOAD_PURCHASE_ORDER_API,
  172. purchaseOrderParams
  173. ).block()
  174. } catch (e: Exception) {
  175. logger.error("(Getting Po Detail) Error on Function - ${e.stackTrace}")
  176. logger.error(e.message)
  177. }
  178. return purchaseOrder
  179. }
  180. open fun savePurchaseOrders(request: M18CommonRequest) : SyncResult{
  181. logger.info("--------------------------------------------Start - Saving M18 Purchase Order--------------------------------------------")
  182. val purchaseOrdersWithType = getPurchaseOrdersWithType(request)
  183. val examplePurchaseOrders = listOf<Long>(4764034L)
  184. val successList = mutableListOf<Long>()
  185. val successDetailList = mutableListOf<Long>()
  186. val failList = mutableListOf<Long>()
  187. val failDetailList = mutableListOf<Long>()
  188. val poRefType = "Purchase Order"
  189. val poLineRefType = "Purchase Order Line"
  190. if (purchaseOrdersWithType != null) {
  191. // Loop for Purchase Orders (values)
  192. purchaseOrdersWithType.valuesWithType.forEach { purchaseOrderWithType ->
  193. val type = purchaseOrderWithType.first
  194. // if success
  195. val purchaseOrdersValues = purchaseOrderWithType.second?.values
  196. // if fail
  197. val purchaseOrdersMessages = purchaseOrderWithType.second?.messages
  198. if (purchaseOrdersValues != null) {
  199. purchaseOrdersValues.forEach { purchaseOrder ->
  200. val purchaseOrderDetail = getPurchaseOrder(purchaseOrder.id)
  201. var purchaseOrderId: Long? = null //FP-MTMS
  202. // Process for Purchase Order (mainpo)
  203. // Assume only one PO in the PO (search by PO ID)
  204. val mainpo = purchaseOrderDetail?.data?.mainpo?.get(0)
  205. val pot = purchaseOrderDetail?.data?.pot
  206. val purchaseOrderLineMessage = purchaseOrderDetail?.messages
  207. logger.info("purchaseOrderDetail: data is null? ${purchaseOrderDetail?.data == null} | mainpo is null? ${purchaseOrderDetail?.data?.mainpo == null} | get(0) is null? ${purchaseOrderDetail?.data?.mainpo?.get(0) == null}")
  208. // purchase_order + m18_data_log table
  209. if (mainpo != null) {
  210. // Find the latest m18 data log by m18 id & type
  211. // logger.info("${poRefType}: Finding For Latest M18 Data Log...")
  212. val latestPurchaseOrderLog =
  213. m18DataLogService.findLatestM18DataLogWithSuccess(purchaseOrder.id, poRefType)
  214. // logger.info(latestPurchaseOrderLog.toString())
  215. // Save to m18_data_log table
  216. // logger.info("${poRefType}: Saving for M18 Data Log...")
  217. val mainpoJson =
  218. mainpo::class.memberProperties.associate { prop -> prop.name to prop.getter.call(mainpo) }
  219. .toMutableMap()
  220. val saveM18PurchaseOrderLogRequest = SaveM18DataLogRequest(
  221. id = null,
  222. refType = poRefType,
  223. m18Id = purchaseOrder.id,
  224. m18LastModifyDate = commonUtils.timestampToLocalDateTime(mainpo.lastModifyDate),
  225. // dataLog = mainpoJson,
  226. statusEnum = M18DataLogStatus.NOT_PROCESS
  227. )
  228. val saveM18PurchaseOrderLog =
  229. m18DataLogService.saveM18DataLog(saveM18PurchaseOrderLogRequest)
  230. // logger.info("${poRefType}: Saved M18 Data Log. ID: ${saveM18PurchaseOrderLog.id}")
  231. try {
  232. // Find the purchase_order if exist
  233. // logger.info("${poRefType}: Finding exising purchase order...")
  234. val existingPurchaseOrder =
  235. latestPurchaseOrderLog?.id?.let { purchaseOrderService.findByM18DataLogId(it) }
  236. // logger.info("${poRefType}: Exising purchase order ID: ${existingPurchaseOrder?.id}")
  237. // Save to purchase_order table
  238. // logger.info("${poRefType}: Saving purchase order...")
  239. val savePurchaseOrderRequest = SavePurchaseOrderRequest(
  240. id = existingPurchaseOrder?.id,
  241. code = mainpo.code,
  242. m18SupplierId = mainpo.venId,
  243. m18ShopId = mainpo.virDeptId,
  244. m18CurrencyId = mainpo.curId,
  245. orderDate = commonUtils.timestampToLocalDateTime(mainpo.tDate),
  246. estimatedArrivalDate = commonUtils.timestampToLocalDateTime(mainpo.dDate),
  247. completeDate = null,
  248. status = PurchaseOrderStatus.PENDING.value,
  249. type = type.value,
  250. m18DataLogId = saveM18PurchaseOrderLog.id,
  251. m18BeId = mainpo.beId
  252. )
  253. val savePurchaseOrderResponse =
  254. purchaseOrderService.savePurchaseOrder(savePurchaseOrderRequest)
  255. purchaseOrderId = savePurchaseOrderResponse.id
  256. // Update m18_data_log with success
  257. val successSaveM18PurchaseOrderLogRequest = SaveM18DataLogRequest(
  258. id = saveM18PurchaseOrderLog.id,
  259. dataLog = mainpoJson,
  260. statusEnum = M18DataLogStatus.SUCCESS
  261. )
  262. m18DataLogService.saveM18DataLog(successSaveM18PurchaseOrderLogRequest)
  263. // log success info
  264. successList.add(purchaseOrder.id)
  265. logger.info("${poRefType}: Saved purchase order. ID: ${savePurchaseOrderResponse.id} | M18 ${poRefType} ID: ${purchaseOrder.id}")
  266. } catch (e: Exception) {
  267. failList.add(purchaseOrder.id)
  268. // logger.error("${poRefType}: Saving Failure!")
  269. logger.error("Error on Function - ${e.stackTrace} | Type: ${poRefType} | M18 ID: ${purchaseOrder.id} | Different? ${mainpo.id}")
  270. logger.error(e.message)
  271. val errorSaveM18PurchaseOrderLogRequest = SaveM18DataLogRequest(
  272. id = saveM18PurchaseOrderLog.id,
  273. dataLog = mutableMapOf(Pair("Exception Message", e.message)),
  274. statusEnum = M18DataLogStatus.FAIL
  275. )
  276. m18DataLogService.saveM18DataLog(errorSaveM18PurchaseOrderLogRequest)
  277. // logger.error("${poRefType}: M18 Data Log Updated! Please see the error. ID: ${saveM18PurchaseOrderLogRequest.id}")
  278. }
  279. // purchase_order_line + m18_data_log
  280. // TODO: check deleted po line?
  281. if (pot != null) {
  282. // Loop for Purchase Order Lines (pot)
  283. pot.forEach { line ->
  284. // Find the latest m18 data log by m18 id & type
  285. // logger.info("${poLineRefType}: Finding For Latest M18 Data Log...")
  286. val latestPurchaseOrderLineLog =
  287. m18DataLogService.findLatestM18DataLogWithSuccess(line.id, poLineRefType)
  288. // logger.info("${poLineRefType}: Latest M18 Data Log ID: ${latestPurchaseOrderLineLog?.id}")
  289. // Save to m18_data_log table
  290. // logger.info("${poLineRefType}: Saving for M18 Data Log...")
  291. val lineJson =
  292. line::class.memberProperties.associate { prop ->
  293. prop.name to prop.getter.call(
  294. line
  295. )
  296. }
  297. .toMutableMap()
  298. val saveM18PurchaseOrderLineLogRequest = SaveM18DataLogRequest(
  299. id = null,
  300. refType = poLineRefType,
  301. m18Id = line.id,
  302. m18LastModifyDate = commonUtils.timestampToLocalDateTime(mainpo.lastModifyDate),
  303. // dataLog = lineJson,
  304. statusEnum = M18DataLogStatus.NOT_PROCESS
  305. )
  306. val saveM18PurchaseOrderLineLog =
  307. m18DataLogService.saveM18DataLog(saveM18PurchaseOrderLineLogRequest)
  308. // logger.info("${poLineRefType}: Saved M18 Data Log. ID: ${saveM18PurchaseOrderLineLog.id}")
  309. // logger.info("${poLineRefType}: Finding item...")
  310. val item = itemsService.findByM18Id(line.proId)
  311. var itemId: Long? = null
  312. if (item == null) {
  313. itemId = m18MasterDataService.saveProduct(line.proId)?.id
  314. } else {
  315. itemId = item.id
  316. }
  317. logger.info("${poLineRefType}: Item ID: ${itemId} | M18 Item ID: ${line.proId}")
  318. try {
  319. // Find the purchase_order_line if exist
  320. // logger.info("${poLineRefType}: Finding exising purchase order line...")
  321. val existingPurchaseOrderLine = latestPurchaseOrderLineLog?.id?.let {
  322. purchaseOrderLineService.findPurchaseOrderLineByM18Id(it)
  323. }
  324. // logger.info("${poLineRefType}: Exising purchase order line ID: ${existingPurchaseOrderLine?.id}")
  325. // Save to purchase_order_line table
  326. // logger.info("${poLineRefType}: Saving purchase order line...")
  327. val itemUom = itemId?.let { itemUomService.findPurchaseUnitByItemId(it) }
  328. val savePurchaseOrderLineRequest = SavePurchaseOrderLineRequest(
  329. id = existingPurchaseOrderLine?.id,
  330. itemId = itemId,
  331. uomId = itemUom?.uom?.id,
  332. purchaseOrderId = purchaseOrderId,
  333. qty = line.qty,
  334. up = line.up,
  335. price = line.amt,
  336. // m18CurrencyId = mainpo.curId,
  337. status = existingPurchaseOrderLine?.status?.value
  338. ?: PurchaseOrderLineStatus.PENDING.value,
  339. m18DataLogId = saveM18PurchaseOrderLineLog.id,
  340. m18Discount = line.disc,
  341. m18Lot = line.lot
  342. )
  343. val savePurchaseOrderLineResponse =
  344. purchaseOrderLineService.savePurchaseOrderLine(savePurchaseOrderLineRequest)
  345. // Update m18_data_log with success
  346. val successSaveM18PurchaseOrderLineLogRequest = SaveM18DataLogRequest(
  347. id = saveM18PurchaseOrderLineLog.id,
  348. dataLog = lineJson,
  349. statusEnum = M18DataLogStatus.SUCCESS
  350. )
  351. m18DataLogService.saveM18DataLog(successSaveM18PurchaseOrderLineLogRequest)
  352. // log success info
  353. successDetailList.add(line.id)
  354. // logger.info("${poLineRefType}: Purchase order ID: ${purchaseOrderId} | M18 ID: ${purchaseOrder.id}")
  355. logger.info("${poLineRefType}: Saved purchase order line. ID: ${savePurchaseOrderLineResponse.id} | M18 Line ID: ${line.id} | Purchase order ID: ${purchaseOrderId} | M18 ID: ${purchaseOrder.id}")
  356. } catch (e: Exception) {
  357. failDetailList.add(line.id)
  358. // logger.error("${poLineRefType}: Saving Failure!")
  359. logger.error("Error on Function - ${e.stackTrace} | Type: ${poLineRefType} | M18 ID: ${line.id}")
  360. logger.error(e.message)
  361. val errorSaveM18PurchaseOrderLineLogRequest = SaveM18DataLogRequest(
  362. id = saveM18PurchaseOrderLineLog.id,
  363. dataLog = mutableMapOf(Pair("Exception Message", e.message)),
  364. statusEnum = M18DataLogStatus.FAIL
  365. )
  366. m18DataLogService.saveM18DataLog(errorSaveM18PurchaseOrderLineLogRequest)
  367. // logger.error("${poLineRefType}: M18 Data Log Updated! Please see the error. ID: ${saveM18PurchaseOrderLineLog.id}")
  368. }
  369. }
  370. } else {
  371. // pot
  372. // logger.error("${poLineRefType}: Saving Failure!")
  373. val saveM18PurchaseOrderLineLogRequest = SaveM18DataLogRequest(
  374. id = null,
  375. refType = "${poLineRefType}",
  376. m18Id = purchaseOrder.id,
  377. m18LastModifyDate = commonUtils.timestampToLocalDateTime(mainpo.lastModifyDate),
  378. // dataLog = mutableMapOf(Pair("Error Message", "${poLineRefType} is null")),
  379. dataLog = mutableMapOf(
  380. Pair(
  381. "${poLineRefType} Error Message",
  382. "pot is null"
  383. ),
  384. Pair(
  385. "${poLineRefType} Error Code",
  386. purchaseOrderLineMessage?.get(0)?.msgCode ?: "No Msg Code from M18"
  387. ),
  388. Pair(
  389. "${poLineRefType} Error Detail",
  390. purchaseOrderLineMessage?.get(0)?.msgDetail ?: "No Msg Detail from M18"
  391. ),
  392. ),
  393. statusEnum = M18DataLogStatus.FAIL
  394. )
  395. val errorLog = m18DataLogService.saveM18DataLog(saveM18PurchaseOrderLineLogRequest)
  396. logger.error("${poLineRefType}: M18 Data Log Updated! Please see the error. ID: ${errorLog.id}")
  397. }
  398. } else {
  399. // mainpo
  400. failList.add(purchaseOrder.id)
  401. // logger.error("${poRefType}: Saving Failure!")
  402. val saveM18DataLogRequest = SaveM18DataLogRequest(
  403. id = null,
  404. refType = "${poRefType}",
  405. m18Id = purchaseOrder.id,
  406. // m18LastModifyDate = if(mainpo?.lastModifyDate != null) commonUtils.instantToLocalDateTime(mainpo.lastModifyDate) else LocalDateTime.now(),
  407. m18LastModifyDate = LocalDateTime.now(),
  408. dataLog = mutableMapOf(
  409. Pair(
  410. "${poRefType} Error",
  411. "mainpo is null"
  412. ),
  413. Pair(
  414. "${poRefType} Error Code",
  415. purchaseOrdersMessages?.get(0)?.msgCode ?: "No Msg Code from M18"
  416. ),
  417. Pair(
  418. "${poRefType} Error Detail",
  419. purchaseOrdersMessages?.get(0)?.msgDetail ?: "No Msg Detail from M18"
  420. ),
  421. ),
  422. statusEnum = M18DataLogStatus.FAIL
  423. )
  424. val errorLog = m18DataLogService.saveM18DataLog(saveM18DataLogRequest)
  425. logger.error("${poLineRefType}: M18 Data Log Updated! Please see the error. ID: ${errorLog.id}")
  426. }
  427. }
  428. } else {
  429. logger.error("${poRefType} List is null. May occur errors.")
  430. }
  431. }
  432. } else {
  433. logger.error("${poRefType} List is null. May occur errors.")
  434. }
  435. // End of save. Check result
  436. // logger.info("Total Success (${poRefType}) (${successList.size}): $successList")
  437. logger.info("Total Success (${poRefType}) (${successList.size})")
  438. // if (failList.size > 0) {
  439. logger.error("Total Fail (${poRefType}) (${failList.size}): $failList")
  440. // }
  441. // logger.info("Total Success (${poLineRefType}) (${successDetailList.size}): $successDetailList")
  442. logger.info("Total Success (${poLineRefType}) (${successDetailList.size})")
  443. // if (failDetailList.size > 0) {
  444. logger.error("Total Fail (${poLineRefType}) (${failDetailList.size}): $failDetailList")
  445. // }
  446. logger.info("--------------------------------------------End - Saving M18 Purchase Order--------------------------------------------")
  447. return SyncResult(
  448. totalProcessed = successList.size + failList.size,
  449. totalSuccess = successList.size,
  450. totalFail = failList.size,
  451. query = purchaseOrdersWithType?.query ?: ""
  452. )
  453. }
  454. }