ybmputProducts.p 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136
  1. /*------------------------------------------------------------------------
  2. File : ybmProducts.p
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Tue Apr 06 15:28:25 CEST 2021
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. USING src.ch.adprime.api.yourbarmate.incl.ProductsVesselUnit FROM PROPATH.
  11. USING src.ch.adprime.api.yourbarmate.YourBarMateHandler FROM PROPATH.
  12. USING src.ch.adprime.communication.HttpHandler FROM PROPATH.
  13. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  14. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  15. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH.
  16. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  17. /* *************************** Definitions ************************** */
  18. DEFINE VARIABLE cFirma AS CHARACTER NO-UNDO INIT '1000'.
  19. DEFINE VARIABLE cTestLive AS CHARACTER NO-UNDO.
  20. DEFINE VARIABLE ipiArtnr AS INTEGER NO-UNDO.
  21. DEFINE VARIABLE ipiInhalt AS INTEGER NO-UNDO.
  22. DEFINE VARIABLE ipiJahr AS INTEGER NO-UNDO.
  23. DEFINE VARIABLE oYourBarMateHandler AS YourBarMateHandler NO-UNDO.
  24. DEFINE VARIABLE oProduct AS JsonObject NO-UNDO.
  25. DEFINE VARIABLE oVessel AS JsonObject NO-UNDO.
  26. DEFINE VARIABLE oBundles AS JsonArray NO-UNDO.
  27. DEFINE VARIABLE oBundle AS JsonObject NO-UNDO.
  28. DEFINE VARIABLE oPalletBundle AS JsonObject NO-UNDO.
  29. DEFINE VARIABLE opErrorMessage AS CHARACTER NO-UNDO.
  30. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  31. DEFINE VARIABLE lPreisMut AS LOGICAL NO-UNDO.
  32. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  33. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  34. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  35. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  36. DEFINE VARIABLE iok AS INTEGER NO-UNDO.
  37. DEFINE VARIABLE inok AS INTEGER NO-UNDO.
  38. DEFINE VARIABLE cId AS CHARACTER NO-UNDO.
  39. DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
  40. DEFINE VARIABLE cKGebinde AS CHARACTER NO-UNDO.
  41. DEFINE VARIABLE cVGebinde AS CHARACTER NO-UNDO.
  42. DEFINE VARIABLE cGGebinde AS CHARACTER NO-UNDO.
  43. DEFINE VARIABLE iVGebInhalt AS INTEGER NO-UNDO.
  44. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO.
  45. DEFINE VARIABLE cLogFile AS CHARACTER NO-UNDO.
  46. DEFINE VARIABLE cProgramm AS CHARACTER NO-UNDO.
  47. DEFINE VARIABLE cAnmeldung AS CHARACTER NO-UNDO.
  48. DEFINE VARIABLE cKBez AS CHARACTER NO-UNDO.
  49. DEFINE VARIABLE cInstallation AS CHARACTER NO-UNDO.
  50. DEFINE VARIABLE lVGebinde AS LOGICAL NO-UNDO.
  51. DEFINE VARIABLE cPrice_per AS CHARACTER NO-UNDO.
  52. DEFINE VARIABLE iMinOrderCount AS INTEGER NO-UNDO.
  53. DEFINE VARIABLE lLoeschen AS LOGICAL NO-UNDO.
  54. DEFINE VARIABLE lTotal AS LOGICAL NO-UNDO.
  55. DEFINE VARIABLE iArtnr AS INTEGER NO-UNDO.
  56. DEFINE VARIABLE cURL AS CHARACTER NO-UNDO.
  57. DEFINE VARIABLE cApiKeyValue AS CHARACTER NO-UNDO.
  58. DEFINE VARIABLE cServerNameIndication AS CHARACTER NO-UNDO.
  59. DEFINE VARIABLE cWgr AS CHARACTER NO-UNDO.
  60. DEFINE VARIABLE iArtstatus AS INTEGER NO-UNDO EXTENT 10.
  61. DEFINE TEMP-TABLE tArtstYBM
  62. FIELD cProdId AS CHARACTER
  63. FIELD eStatus AS CHARACTER
  64. FIELD cCategory AS CHARACTER
  65. FIELD cName AS CHARACTER
  66. FIELD iInhaltKGeb AS INTEGER
  67. FIELD eVessel AS CHARACTER
  68. FIELD iMinOrderCount AS INTEGER
  69. FIELD iPrice AS INTEGER
  70. FIELD eVGeb AS CHARACTER
  71. FIELD iVGeb AS INTEGER
  72. FIELD eGGeb AS CHARACTER
  73. FIELD iGGeb AS INTEGER
  74. FIELD lYBM AS LOGICAL
  75. FIELD lOK AS LOGICAL
  76. FIELD iStatus AS INTEGER
  77. FIELD cPrice_per AS CHARACTER
  78. INDEX tArtst-k1 IS PRIMARY
  79. cProdId
  80. .
  81. DEFINE TEMP-TABLE tAufze LIKE Aufze
  82. FIELD Knr AS INTEGER
  83. FIELD Datum AS DATE
  84. FIELD lAktion AS LOGICAL INIT TRUE
  85. .
  86. DEFINE VARIABLE htAufze AS HANDLE NO-UNDO.
  87. htAufze = TEMP-TABLE tAufze:DEFAULT-BUFFER-HANDLE.
  88. DEFINE BUFFER bArtst FOR Artst.
  89. DEFINE TEMP-TABLE tArtst LIKE Artst
  90. FIELD nPreis AS DECIMAL
  91. FIELD iPreisArt AS INTEGER
  92. FIELD lAktion AS LOGICAL
  93. FIELD iStatus AS INTEGER
  94. FIELD lVGebinde AS LOGICAL
  95. FIELD iKGeb_Inhalt AS INTEGER .
  96. DEFINE TEMP-TABLE tWarenGrp LIKE WarenGrp
  97. FIELD lOK AS LOGICAL
  98. FIELD lKGebinde AS LOGICAL
  99. .
  100. { propertiesYBM.i }
  101. { ybm_product.i }
  102. { ttArtst.i }
  103. { funktionen.i }
  104. /* ******************** Preprocessor Definitions ******************** */
  105. /* ************************ Function Prototypes ********************** */
  106. FUNCTION deleteProduct RETURNS LOGICAL
  107. (ipcProdId AS CHARACTER) FORWARD.
  108. FUNCTION postProduct RETURNS LOGICAL
  109. ( ) FORWARD.
  110. FUNCTION setProductToStatus RETURNS LOGICAL
  111. (ipcProdId AS CHARACTER,
  112. ipcStatus AS CHARACTER) FORWARD.
  113. FUNCTION updateProduct RETURNS LOGICAL
  114. ( ) FORWARD.
  115. /* *************************** Main Block *************************** */
  116. cAnmeldung = SUBSTITUTE ('&1&4&2&4&3', 'SYSTEM', 'SYSTEM', '1000', CHR(01) ).
  117. RUN ANMELDUNG ( cAnmeldung ) NO-ERROR.
  118. cParameter = SESSION:PARAMETER.
  119. cParameter = REPLACE(cParameter, ',', ';').
  120. /*cParameter = ''. */
  121. /*lLoeschen = FALSE.*/
  122. IF cParameter = '' OR
  123. cParameter = ? THEN cParameter = '1000;TEST'.
  124. DO ii = 1 TO NUM-ENTRIES(cParameter, ';'):
  125. CASE ii.
  126. WHEN 1 THEN
  127. cFirma = ENTRY(ii, cParameter, ';').
  128. WHEN 2 THEN
  129. cTestLive = ENTRY(ii, cParameter, ';').
  130. WHEN 3 THEN
  131. lLoeschen = (IF ENTRY(ii, cParameter, ';') BEGINS 'n' THEN FALSE ELSE TRUE ).
  132. WHEN 4 THEN
  133. iArtnr = INTEGER(ENTRY(ii, cParameter, ';')).
  134. WHEN 5 THEN
  135. lTotal = (IF ENTRY(ii, cParameter, ';') BEGINS 'T' THEN TRUE ELSE FALSE ). /* Alle Artikel */
  136. END CASE.
  137. END.
  138. /*lLoeschen = TRUE.*/
  139. CASE cTestLive:
  140. WHEN 'LIVE' THEN
  141. DO:
  142. oYourBarMateHandler = NEW YourBarMateHandler().
  143. oYourBarMateHandler:cURL = cURI_Products.
  144. oYourBarMateHandler:cApiKey = cApiName.
  145. oYourBarMateHandler:cApiKeyValue = cApiKey.
  146. oYourBarMateHandler:cServerNameIndicator = cServerNameIndicator.
  147. oYourBarMateHandler:lDebug = FALSE.
  148. END.
  149. WHEN 'TEST' THEN
  150. DO:
  151. oYourBarMateHandler = NEW YourBarMateHandler().
  152. oYourBarMateHandler:cURL = cURI_ProductsDev.
  153. oYourBarMateHandler:cApiKey = cApiName.
  154. oYourBarMateHandler:cApiKeyValue = cApiKeyDev.
  155. oYourBarMateHandler:cServerNameIndicator = cServerNameIndicatorDev.
  156. oYourBarMateHandler:lDebug = TRUE.
  157. END.
  158. END CASE.
  159. cURL = oYourBarMateHandler:cURL.
  160. cApiKeyValue = oYourBarMateHandler:cApiKeyValue.
  161. cServerNameIndication = oYourBarMateHandler:cServerNameIndicator.
  162. cInstallation = DYNAMIC-FUNCTION ('getInstallation':U).
  163. cProgramm = ENTRY(1, THIS-PROCEDURE:NAME, '.').
  164. IF R-INDEX(cProgramm, '\') > 0 OR
  165. R-INDEX(cProgramm, '/') > 0 THEN
  166. DO:
  167. cProgramm = REPLACE(cProgramm, '\', '/').
  168. ii = R-INDEX(cProgramm, '/') + 1.
  169. cProgramm = TRIM(SUBSTRING(cProgramm,ii)).
  170. END.
  171. cLogFile = DYNAMIC-FUNCTION ('getLogFilePfad':U) + cProgramm + '_' + cTestLive + '.log'.
  172. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Start ProduktUpdate &1', cTestLive) ).
  173. /* ---------------------------------------------------------- */
  174. /* Bei YourBarMate vorhandene Warengruppen holen */
  175. /* ---------------------------------------------------------- */
  176. RUN ybmgetCategories.p ( OUTPUT TABLE tWarenGrp ).
  177. ii = 0.
  178. FOR EACH tWarenGrp NO-LOCK:
  179. ii = ii + 1.
  180. END.
  181. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl Warengruppen bei YBM &1', ii) ).
  182. FOR EACH WarenGrp NO-LOCK
  183. WHERE WarenGrp.Firma = cFirma:
  184. cWgr = STRING(WarenGrp.Wgr,'999').
  185. FIND FIRST tWarenGrp NO-LOCK
  186. WHERE tWarenGrp.Wgr = WarenGrp.Wgr NO-ERROR.
  187. IF AVAILABLE tWarenGrp THEN NEXT.
  188. CREATE tWarenGrp.
  189. BUFFER-COPY WarenGrp
  190. TO tWarenGrp
  191. ASSIGN
  192. tWarenGrp.lOK = FALSE
  193. tWarenGrp.lKGebinde = FALSE.
  194. END.
  195. ii = 0.
  196. i1 = 0.
  197. FOR EACH tWarenGrp:
  198. FIND FIRST WarenGrp NO-LOCK
  199. WHERE WarenGrp.Firma = cFirma
  200. AND WarenGrp.Wgr = tWarenGrp.Wgr NO-ERROR.
  201. IF NOT AVAILABLE WarenGrp THEN
  202. DO:
  203. tWarenGrp.lOK = FALSE.
  204. i1 = i1 + 1.
  205. NEXT.
  206. END.
  207. IF NOT WarenGrp.lShopB2B AND
  208. NOT WarenGrp.lShopB2C THEN
  209. DO:
  210. tWarenGrp.lOK = FALSE.
  211. ii = ii + 1.
  212. NEXT.
  213. END.
  214. tWarenGrp.lKGebinde = (IF WarenGrp.Int_2 = 0 THEN FALSE ELSE TRUE).
  215. END.
  216. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl gelöschte Warengruppen bei YBM &1', i1) ).
  217. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl ungültige Warengruppen bei YBM &1', ii) ).
  218. /* ---------------------------------------------------------- */
  219. /* Bei YourBarMate vorhandene Artikel holen */
  220. /* ---------------------------------------------------------- */
  221. RUN ybmgetProductList.p ( OUTPUT TABLE ttArtst ).
  222. ii = 0.
  223. FOR EACH ttArtst NO-LOCK:
  224. ii = ii + 1.
  225. END.
  226. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl Artikel bei YBM &1', ii) ).
  227. OUTPUT TO 'C:\TEMP\ttArtst.csv' NO-MAP NO-CONVERT.
  228. FOR EACH ttArtst NO-LOCK:
  229. EXPORT DELIMITER ';' ttArtst.
  230. END.
  231. OUTPUT CLOSE.
  232. /* ---------------------------------------------------------------------- */
  233. /* Artikel bei YBM die geloescht werden müssen weil falsche Warengruppe */
  234. /* ---------------------------------------------------------------------- */
  235. ii = 0.
  236. i1 = 0.
  237. FOR EACH ttArtst:
  238. IF NOT lLoeschen THEN
  239. DO:
  240. FIND FIRST tWarenGrp NO-LOCK
  241. WHERE tWarenGrp.Firma = cFirma
  242. AND tWarenGrp.Wgr = INTEGER(ttArtst.cCategorie)
  243. AND tWarenGrp.lOK = TRUE NO-ERROR.
  244. IF AVAILABLE tWarenGrp THEN NEXT.
  245. END.
  246. ii = ii + 1.
  247. lRetVal = DYNAMIC-FUNCTION ('deleteProduct':U, ttArtst.cProdId) NO-ERROR.
  248. IF NOT lRetVal THEN
  249. DO:
  250. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Artikel &1 mit Warengrp &2 konnte bei YBM nicht gelöscht werden / muss Inaktiv gesetzt oder in andere Warengruppe verschoben werden', ttArtst.cProdId, ttArtst.cCategorie ) ).
  251. NEXT.
  252. END.
  253. i1 = i1 + 1.
  254. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Artikel &1 bei YBM gelöscht', ttArtst.cProdId) ).
  255. IF lLoeschen THEN DELETE ttArtst.
  256. END.
  257. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('&1 Artikel zum löschen, &2 Artikel gelöscht', ii, i1) ).
  258. /* ---------------------------------------------------------- */
  259. /* Artikel lesen */
  260. /* ---------------------------------------------------------- */
  261. ii = 0.
  262. FOR EACH bArtst NO-LOCK
  263. WHERE bArtst.Firma = cFirma
  264. AND ((iArtnr > 0 AND bArtst.Artnr = iArtnr)
  265. OR (iArtnr = 0 AND bArtst.Artnr > 0))
  266. :
  267. FIND FIRST tWarenGrp NO-LOCK
  268. WHERE tWarenGrp.Firma = bArtst.Firma
  269. AND tWarenGrp.Wgr = bArtst.Wg_Grp
  270. AND tWarenGrp.lOK = TRUE NO-ERROR.
  271. IF NOT AVAILABLE tWarenGrp THEN NEXT.
  272. cId = SUBSTITUTE('&1-&2-&3', STRING(bArtst.Artnr,'999999'), STRING(bArtst.Inhalt,'9999'), STRING(bArtst.Jahr,'9999')).
  273. FIND FIRST ttArtst NO-LOCK
  274. WHERE ttArtst.cProdId = cId NO-ERROR.
  275. IF AVAILABLE ttArtst THEN ttArtst.lGeMIS = TRUE.
  276. lRetVal = (IF AVAILABLE ttArtst THEN TRUE ELSE FALSE).
  277. lPreisMut = FALSE.
  278. FOR EACH ArtPreis NO-LOCK
  279. WHERE ArtPreis.Firma = bArtst.Firma
  280. AND ArtPreis.Artnr = bArtst.Artnr
  281. AND ArtPreis.Inhalt = bArtst.Inhalt
  282. AND ArtPreis.Jahr = bArtst.Jahr
  283. AND ArtPreis.Ab_Datum >= (TODAY - 2)
  284. AND ArtPreis.Ab_Datum <= (TODAY):
  285. lPreisMut = TRUE.
  286. LEAVE.
  287. END.
  288. FOR EACH AktPreis NO-LOCK
  289. WHERE AktPreis.Firma = bArtst.Firma
  290. AND AktPreis.Artnr = bArtst.Artnr
  291. AND AktPreis.Inhalt = bArtst.Inhalt
  292. AND AktPreis.Jahr = bArtst.Jahr
  293. AND AktPreis.Ab_Datum >= (TODAY - 2)
  294. AND AktPreis.Ab_Datum <= (TODAY):
  295. lPreisMut = TRUE.
  296. LEAVE.
  297. END.
  298. IF NOT lTest AND
  299. NOT lTotal THEN
  300. DO:
  301. IF AVAILABLE ttArtst AND
  302. NOT lPreisMut THEN
  303. DO:
  304. CASE WEEKDAY(TODAY):
  305. WHEN 01 THEN.
  306. OTHERWISE
  307. DO:
  308. IF bArtst.Mdat = ? THEN
  309. DO:
  310. IF bArtst.Edat < (TODAY - 30) THEN NEXT.
  311. END.
  312. ELSE
  313. DO:
  314. IF bArtst.Mdat < (TODAY - 7) THEN NEXT.
  315. END.
  316. END.
  317. END CASE.
  318. END.
  319. END.
  320. lRetVal = (IF AVAILABLE ttArtst THEN TRUE ELSE FALSE).
  321. IF NOT bArtst.Aktiv AND
  322. NOT lRetVal THEN NEXT.
  323. IF bArtst.Ausverk = 9 AND
  324. NOT lRetVal THEN NEXT.
  325. lVGebinde = (IF tWarenGrp.Int_2 = 0 THEN TRUE ELSE FALSE).
  326. FIND FIRST ProdGrp NO-LOCK
  327. WHERE ProdGrp.Firma = bArtst.Firma
  328. AND ProdGrp.Wgr = bArtst.Wg_Grp
  329. AND ProdGrp.Prod_Grp = bArtst.Prod_Grp NO-ERROR.
  330. IF AVAILABLE ProdGrp THEN
  331. DO:
  332. lVGebinde = (IF ProdGrp.Int_2 = 0 THEN TRUE ELSE FALSE).
  333. END.
  334. CREATE tArtst.
  335. BUFFER-COPY bArtst
  336. TO tArtst
  337. ASSIGN
  338. tArtst.lVGebinde = lVGebinde
  339. .
  340. IF bArtst.Aktiv AND
  341. NOT lRetVal THEN tArtst.iStatus = 0.
  342. IF bArtst.Aktiv AND
  343. lRetVal THEN tArtst.iStatus = 1.
  344. IF NOT bArtst.Aktiv AND
  345. lRetVal THEN tArtst.iStatus = 9.
  346. IF bArtst.Aktiv AND
  347. bArtst.Ausverk = 9 AND
  348. lRetVal THEN tArtst.iStatus = 8.
  349. ii = ii + 1.
  350. CASE tArtst.iStatus:
  351. WHEN 0 THEN
  352. iArtstatus[01] = iArtstatus[01] + 1.
  353. WHEN 1 THEN
  354. iArtstatus[02] = iArtstatus[02] + 1.
  355. WHEN 2 THEN
  356. iArtstatus[03] = iArtstatus[03] + 1.
  357. WHEN 3 THEN
  358. iArtstatus[04] = iArtstatus[04] + 1.
  359. WHEN 4 THEN
  360. iArtstatus[05] = iArtstatus[05] + 1.
  361. WHEN 5 THEN
  362. iArtstatus[06] = iArtstatus[06] + 1.
  363. WHEN 6 THEN
  364. iArtstatus[07] = iArtstatus[07] + 1.
  365. WHEN 7 THEN
  366. iArtstatus[08] = iArtstatus[08] + 1.
  367. WHEN 8 THEN
  368. iArtstatus[09] = iArtstatus[09] + 1.
  369. WHEN 9 THEN
  370. iArtstatus[10] = iArtstatus[10] + 1.
  371. END CASE.
  372. END.
  373. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl zur Verarbeitung gelesene Artikel &1', ii) ).
  374. DO ii = 1 TO 10:
  375. IF iArtstatus[ii] = 0 THEN NEXT.
  376. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl Artikel mit Status &1 -> &2', ii - 1, STRING(iArtstatus[ii],'zz,zz9')) ).
  377. END.
  378. /* ---------------------------------------------------------- */
  379. /* Preis des Artikel an Hand der Kundennummer 3259 ermitteln */
  380. /* ---------------------------------------------------------- */
  381. FOR EACH tArtst
  382. WHERE tArtst.iStatus < 8:
  383. EMPTY TEMP-TABLE tAufze.
  384. CREATE tAufze.
  385. ASSIGN
  386. tAufze.Firma = tArtst.Firma
  387. tAufze.Pos = 10
  388. tAufze.Artnr = tArtst.Artnr
  389. tAufze.Inhalt = tArtst.Inhalt
  390. tAufze.Jahr = tArtst.Jahr
  391. tAufze.Knr = 3259
  392. tAufze.Datum = TODAY
  393. tAufze.lAktion = FALSE
  394. .
  395. ii = DYNAMIC-FUNCTION ('fillAufze':U, INPUT-OUTPUT htAufze) NO-ERROR.
  396. ASSIGN
  397. tAufze.KGeb_Be = 1
  398. tAufze.KGeb_Me = 1
  399. tAufze.MBest = 1
  400. tAufze.MGeli = 1
  401. .
  402. ii = DYNAMIC-FUNCTION ('getPreisAufze':U, INPUT-OUTPUT htAufze) NO-ERROR.
  403. ASSIGN
  404. tArtst.nPreis = tAufze.Preis
  405. tArtst.iPreisArt = tAufze.PreisArt
  406. tArtst.lAktion = tAufze.lAktion.
  407. END.
  408. ii = 0.
  409. FOR EACH tArtst
  410. WHERE tArtst.iStatus < 8:
  411. cId = SUBSTITUTE('&1-&2-&3', STRING(tArtst.Artnr,'999999'), STRING(tArtst.Inhalt,'9999'), STRING(tArtst.Jahr,'9999')).
  412. FIND KGebinde NO-LOCK
  413. WHERE KGebinde.Firma = tArtst.Firma
  414. AND KGebinde.Geb_Cd = tArtst.KGeb_Cd NO-ERROR.
  415. FIND VGebinde NO-LOCK
  416. WHERE VGebinde.Firma = tArtst.Firma
  417. AND VGebinde.Geb_Cd = tArtst.VGeb_Cd NO-ERROR.
  418. FIND GGebinde NO-LOCK
  419. WHERE GGebinde.Firma = tArtst.Firma
  420. AND GGebinde.Geb_Cd = tArtst.GGeb_Cd NO-ERROR.
  421. FIND FIRST Artbez NO-LOCK OF tArtst.
  422. cName = TRIM(REPLACE((Artbez.Bez1 + ' ' + Artbez.Bez2), ' ', ' ')).
  423. cKBez = ''.
  424. cPrice_per = 'vessel'.
  425. iMinOrderCount = (IF tArtst.lVGebinde THEN VGebinde.Inhalt ELSE 1).
  426. CASE cInstallation:
  427. /* Ganze Artikelbezeichnung ermitteln */
  428. WHEN 'oswald' THEN
  429. DO:
  430. DO WHILE TRUE:
  431. IF INDEX(KGebinde.Bez, 'cl') > 0 THEN
  432. DO:
  433. cKBez = ENTRY(1, KGebinde.KBez, ' ').
  434. i1 = NUM-ENTRIES(KGebinde.Bez, ' ').
  435. DO i2 = 2 TO NUM-ENTRIES(KGebinde.Bez, ' '):
  436. cKBez = cKBez + ' ' + ENTRY(i2, KGebinde.Bez, ' ').
  437. cKBez = TRIM(cKBez).
  438. END.
  439. LEAVE.
  440. END.
  441. IF INDEX(KGebinde.Bez, 'dl') > 0 THEN
  442. DO:
  443. cKBez = ENTRY(1, KGebinde.KBez, ' ').
  444. i1 = NUM-ENTRIES(KGebinde.Bez, ' ').
  445. DO i2 = 2 TO NUM-ENTRIES(KGebinde.Bez, ' '):
  446. cKBez = cKBez + ' ' + ENTRY(i2, KGebinde.Bez, ' ').
  447. cKBez = TRIM(cKBez).
  448. END.
  449. LEAVE.
  450. END.
  451. IF INDEX(KGebinde.Bez, 'Liter') > 0 OR
  452. INDEX(KGebinde.Bez, 'Lt') > 0 THEN
  453. DO:
  454. cKBez = ENTRY(1, KGebinde.KBez, ' ').
  455. i1 = NUM-ENTRIES(KGebinde.Bez, ' ').
  456. DO i2 = 2 TO NUM-ENTRIES(KGebinde.Bez, ' '):
  457. cKBez = cKBez + ' ' + ENTRY(i2, KGebinde.Bez, ' ').
  458. cKBez = TRIM(cKBez).
  459. END.
  460. LEAVE.
  461. END.
  462. cKBez = KGebinde.KBez.
  463. LEAVE.
  464. END.
  465. END.
  466. OTHERWISE
  467. DO:
  468. cKBez = KGebinde.KBez.
  469. i1 = NUM-ENTRIES(cKBez, ' ').
  470. IF i1 > 0 THEN cKBez = TRIM(ENTRY(i1, cKBez, ' ')).
  471. END.
  472. END.
  473. cName = TRIM(SUBSTRING(cName,01,60 - LENGTH(cKBez))) + ', ' + cKBez.
  474. cKGebinde = ''.
  475. cVGebinde = ''.
  476. cGGebinde = ''.
  477. DO WHILE TRUE:
  478. IF INDEX(KGebinde.Bez, 'cl') > 0 OR
  479. INDEX(KGebinde.Bez, 'lt') > 0 OR
  480. INDEX(KGebinde.Bez, 'Liter') > 0 OR
  481. INDEX(KGebinde.Bez, 'dl') > 0 THEN
  482. DO:
  483. cKGebinde = 'cl'.
  484. LEAVE.
  485. END.
  486. cKGebinde = 'quantity'.
  487. LEAVE.
  488. END.
  489. tArtst.iKGeb_Inhalt = KGebinde.Inhalt.
  490. iVGebInhalt = 0.
  491. DO WHILE TRUE:
  492. IF NOT AVAILABLE VGebinde THEN LEAVE.
  493. IF cKGebinde = 'quantity' AND
  494. INDEX(VGebinde.Bez, 'Box') > 0 THEN
  495. DO:
  496. IF VGebinde.Inhalt > 1 THEN
  497. DO:
  498. cVGebinde = 'box'.
  499. iVGebInhalt = VGebinde.Inhalt.
  500. LEAVE.
  501. END.
  502. LEAVE.
  503. END.
  504. IF INDEX(VGebinde.Bez, 'Tank' ) > 0 OR
  505. INDEX(VGebinde.Bez, 'Box' ) > 0 OR
  506. INDEX(VGebinde.Bez, 'Bidon') > 0 THEN
  507. DO:
  508. IF VGebinde.Inhalt > 1 THEN
  509. DO:
  510. tArtst.iKGeb_Inhalt = KGebinde.Inhalt * VGebinde.Inhalt.
  511. END.
  512. ELSE
  513. DO:
  514. tArtst.nPreis = tArtst.nPreis / (KGebinde.Inhalt / 100).
  515. END.
  516. cPrice_per = 'l'.
  517. iMinOrderCount = 1.
  518. LEAVE.
  519. END.
  520. iVGebInhalt = VGebinde.Inhalt.
  521. IF VGebinde.Inhalt < 2 THEN LEAVE.
  522. IF INDEX(VGebinde.Bez, 'Har') > 0 OR
  523. INDEX(VGebinde.Bez, 'Box') > 0 OR
  524. INDEX(VGebinde.Bez, 'Kist') > 0 THEN
  525. DO:
  526. cVGebinde = 'box'.
  527. LEAVE.
  528. END.
  529. IF INDEX(VGebinde.Bez, 'Kar') > 0 THEN
  530. DO:
  531. cVGebinde = 'carton'.
  532. LEAVE.
  533. END.
  534. IF INDEX(VGebinde.Bez, 'Pack') > 0 OR
  535. INDEX(VGebinde.Bez, 'Pak') > 0 OR
  536. INDEX(VGebinde.Bez, 'Sch') > 0 THEN
  537. DO:
  538. cVGebinde = 'pack'.
  539. LEAVE.
  540. END.
  541. cVGebinde = 'box'.
  542. LEAVE.
  543. END.
  544. DO WHILE TRUE:
  545. IF NOT AVAILABLE GGebinde THEN LEAVE.
  546. IF GGebinde.Inhalt < 2 THEN LEAVE.
  547. cGGebinde = 'pallet'.
  548. LEAVE.
  549. END.
  550. CREATE tArtstYBM.
  551. ASSIGN
  552. tArtstYBM.cProdId = cId
  553. tArtstYBM.cCategory = STRING(tArtst.Wg_Grp,'999')
  554. tArtstYBM.cName = cName
  555. tArtstYBM.iInhaltKGeb = (IF tArtst.iKGeb_Inhalt > 0 THEN tArtst.iKGeb_Inhalt ELSE 1)
  556. tArtstYBM.iPrice = (IF cInstallation = 'oswald' THEN tArtst.nPreis * 100 ELSE 0)
  557. tArtstYBM.eVessel = cKGebinde
  558. tArtstYBM.iStatus = tArtst.iStatus
  559. tArtstYBM.cPrice_per = cPrice_per
  560. .
  561. IF cVGebinde <> '' THEN
  562. DO:
  563. ASSIGN
  564. tArtstYBM.eVGeb = cVGebinde
  565. tArtstYBM.iVGeb = iVGebInhalt.
  566. END.
  567. ELSE
  568. DO:
  569. ASSIGN
  570. tArtstYBM.eVGeb = ''
  571. tArtstYBM.iVGeb = 0.
  572. END.
  573. IF cGGebinde <> '' THEN
  574. DO:
  575. ASSIGN
  576. tArtstYBM.eGGeb = cGGebinde
  577. tArtstYBM.iGGeb = GGebinde.Inhalt.
  578. END.
  579. CASE tArtst.iStatus:
  580. WHEN 0 THEN
  581. tArtstYBM.eStatus = 'ACTIVE' .
  582. WHEN 1 THEN
  583. tArtstYBM.eStatus = 'ACTIVE' .
  584. WHEN 8 THEN
  585. tArtstYBM.eStatus = 'OUT_OF_STOCK'.
  586. WHEN 9 THEN
  587. tArtstYBM.eStatus = 'INACTIVE' .
  588. END CASE.
  589. tArtstYBM.iMinOrderCount = iMinOrderCount.
  590. ii = ii + 1.
  591. END.
  592. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl aufbereitete Artikel &1', ii) ).
  593. DEFINE VARIABLE htArtYBM AS HANDLE NO-UNDO.
  594. htArtYBM = TEMP-TABLE tArtstYBM:DEFAULT-BUFFER-HANDLE.
  595. htArtYBM:WRITE-XML( "File", "C:\TEMP\tArtstYBM.xml",
  596. TRUE, /* Formatted */
  597. "UTF-8", /* encoding */
  598. ?, /* schema-location */
  599. ?, /* write-xml-schema */
  600. ?, /* min-xmlschema */
  601. ?, /* write-before-image */
  602. TRUE). /* ommit-initial-values */
  603. /* ------------------------------------------ */
  604. /* Alle inaktiven Artikel */
  605. /* ------------------------------------------ */
  606. ii = 0.
  607. FOR EACH tArtst
  608. WHERE tArtst.iStatus = 9:
  609. cId = SUBSTITUTE('&1-&2-&3':U, STRING(tArtst.Artnr,'999999'), STRING(tArtst.Inhalt,'9999'), STRING(tArtst.Jahr,'9999')).
  610. FIND FIRST ttArtst
  611. WHERE ttArtst.cProdId = cId NO-ERROR.
  612. IF AVAILABLE ttArtst AND
  613. ttArtst.eStatus = 'INACTIVE' THEN NEXT.
  614. lRetVal = DYNAMIC-FUNCTION ('deleteProduct':U, cId ) NO-ERROR.
  615. IF NOT lRetVal THEN
  616. DO:
  617. lRetVal = DYNAMIC-FUNCTION ('setProductToStatus':U, cId, 'INACTIVE') NO-ERROR.
  618. END.
  619. IF lRetVal THEN ii = ii + 1.
  620. END.
  621. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl inaktivierte Artikel &1', ii) ).
  622. /* ------------------------------------------ */
  623. /* Alle neuen Artikel */
  624. /* ------------------------------------------ */
  625. iok = 0.
  626. inok = 0.
  627. FOR EACH tArtstYBM
  628. WHERE tArtstYBM.iStatus = 0:
  629. EMPTY TEMP-TABLE tProduct .
  630. EMPTY TEMP-TABLE tVessel .
  631. EMPTY TEMP-TABLE tBundle .
  632. EMPTY TEMP-TABLE tPalletBundle .
  633. CREATE tProduct.
  634. ASSIGN
  635. tProduct.cId = tArtstYBM.cProdId
  636. tProduct.cCategory = tArtstYBM.cCategory
  637. tProduct.cName = tArtstYBM.cName
  638. tProduct.cOrder_by = 'vessel'
  639. tProduct.cPrice_per = tArtstYBM.cPrice_per
  640. tProduct.iPrice = tArtstYBM.iPrice
  641. tProduct.iMinOrderCount = tArtstYBM.iMinOrderCount
  642. tProduct.eStatus = 'ACTIVE'
  643. tProduct.rtProduct = RECID(tProduct)
  644. .
  645. CREATE tVessel.
  646. ASSIGN
  647. tVessel.iSize = tArtstYBM.iInhaltKGeb
  648. tVessel.rtProduct = tProduct.rtProduct
  649. tVessel.rtVessel = RECID(tVessel)
  650. .
  651. CASE tArtstYBM.eVessel:
  652. WHEN 'cl' THEN
  653. tVessel.Unit = ProductsVesselUnit:cl:TOSTRING ().
  654. OTHERWISE
  655. tVessel.Unit = ProductsVesselUnit:quantity:TOSTRING ().
  656. END CASE.
  657. IF tArtstYBM.eVGeb <> '' THEN
  658. DO:
  659. CREATE tBundle.
  660. ASSIGN
  661. tBundle.iSize = tArtstYBM.iVGeb
  662. tBundle.eType = tArtstYBM.eVGeb
  663. tBundle.rtProduct = tProduct.rtProduct
  664. tBundle.rtBundle = RECID(tBundle)
  665. tBundle.iInd = 1
  666. .
  667. END.
  668. DO WHILE tArtstYBM.eGGeb <> '' :
  669. CREATE tBundle.
  670. ASSIGN
  671. tBundle.iSize = tArtstYBM.iGGeb
  672. tBundle.eType = tArtstYBM.eGGeb
  673. tBundle.rtProduct = tProduct.rtProduct
  674. tBundle.rtBundle = RECID(tBundle)
  675. tBundle.iInd = 2
  676. .
  677. IF tBundle.eType <> 'pallet' THEN LEAVE.
  678. IF tArtstYBM.eVGeb = '' THEN LEAVE.
  679. CREATE tPalletBundle.
  680. ASSIGN
  681. tPalletBundle.eType = tArtstYBM.eVGeb
  682. tPalletBundle.iSize = tArtstYBM.iVGeb
  683. tPalletBundle.rtBundle = RECID(tBundle)
  684. tPalletBundle.rtPalletBundle = RECID(tPalletBundle)
  685. .
  686. LEAVE.
  687. END.
  688. lRetVal = DYNAMIC-FUNCTION ('postProduct':U ) NO-ERROR.
  689. IF NOT lRetVal THEN inok = inok + 1.
  690. ELSE iok = iok + 1.
  691. END.
  692. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl neue Artikel &1 / Fehler = &2', iok, inok ) ).
  693. /* ------------------------------------------ */
  694. /* Alle ausverkauften Artikel */
  695. /* ------------------------------------------ */
  696. ii = 0.
  697. FOR EACH tArtstYBM
  698. WHERE tArtstYBM.iStatus = 8:
  699. lRetVal = DYNAMIC-FUNCTION ('setProductToStatus':U, tArtstYBM.cProdId, 'OUT_OF_STOCK') NO-ERROR.
  700. IF NOT lRetVal THEN
  701. DO:
  702. /* RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Fehler ausverkaufte Artikel &1 -> &2', tArtstYBM.cProdId, opErrorMessage) ).*/
  703. END.
  704. ELSE ii = ii + 1.
  705. END.
  706. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl ausverkaufte Artikel &1', ii) ).
  707. /* ------------------------------------------ */
  708. /* Alle mutierten Artikel */
  709. /* ------------------------------------------ */
  710. iok = 0.
  711. inok = 0.
  712. FOR EACH tArtstYBM
  713. WHERE tArtstYBM.iStatus = 1:
  714. EMPTY TEMP-TABLE tProduct .
  715. EMPTY TEMP-TABLE tVessel .
  716. EMPTY TEMP-TABLE tBundle .
  717. EMPTY TEMP-TABLE tPalletBundle .
  718. CREATE tProduct.
  719. ASSIGN
  720. tProduct.cId = tArtstYBM.cProdId
  721. tProduct.cCategory = tArtstYBM.cCategory
  722. tProduct.cName = tArtstYBM.cName
  723. tProduct.cOrder_by = 'vessel'
  724. tProduct.cPrice_per = tArtstYBM.cPrice_per
  725. tProduct.iPrice = tArtstYBM.iPrice
  726. tProduct.iMinOrderCount = tArtstYBM.iMinOrderCount
  727. tProduct.eStatus = 'ACTIVE'
  728. tProduct.rtProduct = RECID(tProduct)
  729. .
  730. CREATE tVessel.
  731. ASSIGN
  732. tVessel.iSize = tArtstYBM.iInhaltKGeb
  733. tVessel.rtProduct = tProduct.rtProduct
  734. tVessel.rtVessel = RECID(tVessel)
  735. .
  736. CASE tArtstYBM.eVessel:
  737. WHEN 'cl' THEN
  738. tVessel.Unit = ProductsVesselUnit:cl:TOSTRING ().
  739. OTHERWISE
  740. tVessel.Unit = ProductsVesselUnit:quantity:TOSTRING ().
  741. END CASE.
  742. IF tArtstYBM.eVGeb <> '' THEN
  743. DO:
  744. CREATE tBundle.
  745. ASSIGN
  746. tBundle.iSize = tArtstYBM.iVGeb
  747. tBundle.eType = tArtstYBM.eVGeb
  748. tBundle.rtProduct = tProduct.rtProduct
  749. tBundle.rtBundle = RECID(tBundle)
  750. tBundle.iInd = 1
  751. .
  752. END.
  753. DO WHILE tArtstYBM.eGGeb <> '' :
  754. CREATE tBundle.
  755. ASSIGN
  756. tBundle.iSize = tArtstYBM.iGGeb
  757. tBundle.eType = tArtstYBM.eGGeb
  758. tBundle.rtProduct = tProduct.rtProduct
  759. tBundle.rtBundle = RECID(tBundle)
  760. tBundle.iInd = 2
  761. .
  762. IF tBundle.eType <> 'pallet' THEN LEAVE.
  763. IF tArtstYBM.eVGeb = '' THEN LEAVE.
  764. CREATE tPalletBundle.
  765. ASSIGN
  766. tPalletBundle.eType = tArtstYBM.eVGeb
  767. tPalletBundle.iSize = tArtstYBM.iVGeb
  768. tPalletBundle.rtBundle = RECID(tBundle)
  769. tPalletBundle.rtPalletBundle = RECID(tPalletBundle)
  770. .
  771. LEAVE.
  772. END.
  773. lRetVal = DYNAMIC-FUNCTION ('updateProduct':U ) NO-ERROR.
  774. IF NOT lRetVal THEN inok = inok + 1.
  775. ELSE iok = iok + 1.
  776. END.
  777. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Anzahl mutierte Artikel &1 / Fehler = &2', iok, inok) ).
  778. RUN writeLogFile.p ( cProgramm, cLogFile, '' ).
  779. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE('Ende des Produktupdates &1', '') ).
  780. RUN writeLogFile.p ( cProgramm, cLogFile, '' ).
  781. RUN writeLogFile.p ( cProgramm, cLogFile, '' ).
  782. QUIT.
  783. /* ************************ Function Implementations ***************** */
  784. FUNCTION deleteProduct RETURNS LOGICAL
  785. ( ipcProdId AS CHARACTER ):
  786. /*------------------------------------------------------------------------------*/
  787. /* Purpose: Super Override */
  788. /* Parameters: */
  789. /* Notes: */
  790. /*------------------------------------------------------------------------------*/
  791. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  792. DEFINE VARIABLE cProduct AS LONGCHAR NO-UNDO.
  793. DEFINE VARIABLE cUrlWithID AS CHARACTER NO-UNDO.
  794. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  795. DEFINE VARIABLE oResponseMessage AS JsonObject NO-UNDO.
  796. DEFINE VARIABLE cResponseMessage AS CHARACTER NO-UNDO.
  797. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  798. DEFINE VARIABLE oBody AS JsonObject NO-UNDO.
  799. DEFINE VARIABLE cMeldung AS CHARACTER NO-UNDO.
  800. cUrlWithID = cURL + '/' + ipcProdId.
  801. oBody = NEW JsonObject().
  802. lOK = HttpHandler:delete(INPUT cURLwithID, INPUT cApiName, INPUT cApiKeyValue, INPUT cServerNameIndication, INPUT oBody, OUTPUT opErrorMessage, OUTPUT oResponse).
  803. oParser = NEW ObjectModelParser().
  804. oResponseMessage = CAST(oParser:Parse(CAST(oResponse:Entity, JsonObject):GetJsonText()), JsonObject).
  805. IF oResponseMessage:has('code') THEN cMeldung = oResponseMessage:GetCharacter("code").
  806. oResponseMessage:WRITE(cResponseMessage, FALSE).
  807. cResponseMessage = SUBSTITUTE ('Status-Code = &1, Artikel &2 / &3', oResponse:StatusCode, ipcProdId, cResponseMessage).
  808. RUN writeLogFile.p ('deleteProduct', cLogFile, cResponseMessage ).
  809. IF NOT lOK AND
  810. INDEX(cMeldung, 'PRODUCT_HAS_CUSTOMERS') > 0 THEN
  811. DO:
  812. lOK = DYNAMIC-FUNCTION ('setProductToStatus':U, ipcProdId, 'INACTIVE') NO-ERROR.
  813. END.
  814. DELETE OBJECT oParser NO-ERROR.
  815. DELETE OBJECT oResponseMessage NO-ERROR.
  816. DELETE OBJECT oBody NO-ERROR.
  817. RETURN lOK.
  818. END FUNCTION.
  819. FUNCTION postProduct RETURNS LOGICAL
  820. ( ):
  821. /*------------------------------------------------------------------------------*/
  822. /* Purpose: Super Override */
  823. /* Parameters: */
  824. /* Notes: */
  825. /*------------------------------------------------------------------------------*/
  826. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  827. DEFINE VARIABLE cProduct AS LONGCHAR NO-UNDO.
  828. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  829. DEFINE VARIABLE oResponseMessage AS JsonObject NO-UNDO.
  830. DEFINE VARIABLE cResponseMessage AS CHARACTER NO-UNDO.
  831. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  832. DEFINE VARIABLE cBody AS CHARACTER NO-UNDO.
  833. DEFINE VARIABLE lBundles AS LOGICAL NO-UNDO.
  834. FIND FIRST tProduct.
  835. /* tProduct.cName = CODEPAGE-CONVERT(tProduct.cName, SESSION:CHARSET, "utf-8").*/
  836. oProduct = NEW JsonObject().
  837. oProduct:READ(htProduct).
  838. FIND FIRST tVessel NO-ERROR.
  839. IF AVAILABLE tVessel THEN
  840. DO:
  841. oVessel = NEW JsonObject().
  842. oVessel:READ(htVessel).
  843. END.
  844. lBundles = FALSE.
  845. oBundles = NEW JsonArray().
  846. FOR EACH tBundle USE-INDEX tBundle-k1
  847. WHERE tBundle.iSize > 0:
  848. oBundle = NEW JsonObject().
  849. oBundle:READ(htBundle).
  850. FOR EACH tPalletBundle NO-LOCK
  851. WHERE tPalletBundle.rtBundle = tBundle.rtBundle:
  852. oPalletBundle = NEW JsonObject().
  853. oPalletBundle:Read(htPalletBundle).
  854. oBundle:Add('pallet_bundle', oPalletBundle).
  855. END.
  856. oBundles:Add(oBundle).
  857. lBundles = TRUE.
  858. END.
  859. oProduct:Add('vessel' , oVessel).
  860. /* IF lBundles THEN oProduct:Add('bundles', oBundles).*/
  861. oProduct:Add('bundles', oBundles).
  862. oProduct:WRITE(cBody, TRUE).
  863. /* RUN writeLogFile.p ('postProduct', cLogFile, cBody ).*/
  864. lOK = HttpHandler:post(INPUT cURL, INPUT cApiName, INPUT cApiKeyValue, INPUT cServerNameIndication, INPUT oProduct, OUTPUT opErrorMessage, OUTPUT oResponse).
  865. oParser = NEW ObjectModelParser().
  866. oResponseMessage = CAST(oParser:Parse(CAST(oResponse:Entity, JsonObject):GetJsonText()), JsonObject).
  867. oResponseMessage:WRITE(cResponseMessage, FALSE).
  868. cResponseMessage = SUBSTITUTE ('Status-Code = &1, Artikel &2 / &3', oResponse:StatusCode, tProduct.cId, cResponseMessage).
  869. RUN writeLogFile.p ('postProduct', cLogFile, cResponseMessage ).
  870. IF NOT lOK THEN RUN writeLogFile.p ('postProduct', cLogFile, cBody ).
  871. DELETE OBJECT oParser NO-ERROR.
  872. DELETE OBJECT oResponseMessage NO-ERROR.
  873. DELETE OBJECT oProduct NO-ERROR.
  874. DELETE OBJECT oVessel NO-ERROR.
  875. DELETE OBJECT oBundle NO-ERROR.
  876. DELETE OBJECT oPalletBundle NO-ERROR.
  877. DELETE OBJECT oBundles NO-ERROR.
  878. RETURN lOK.
  879. END FUNCTION.
  880. FUNCTION setProductToStatus RETURNS LOGICAL
  881. ( ipcProdId AS CHARACTER, ipcStatus AS CHARACTER ):
  882. /*------------------------------------------------------------------------------*/
  883. /* Purpose: Super Override */
  884. /* Parameters: */
  885. /* Notes: */
  886. /*------------------------------------------------------------------------------*/
  887. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  888. DEFINE VARIABLE cProduct AS LONGCHAR NO-UNDO.
  889. DEFINE VARIABLE cUrlWithID AS CHARACTER NO-UNDO.
  890. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  891. DEFINE VARIABLE oResponseMessage AS JsonObject NO-UNDO.
  892. DEFINE VARIABLE cResponseMessage AS CHARACTER NO-UNDO.
  893. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  894. DEFINE VARIABLE oBody AS JsonObject NO-UNDO.
  895. cUrlWithID = cURL + '/' + ipcProdId.
  896. oBody = NEW JsonObject().
  897. oBody:Add('status', ipcStatus).
  898. lOK = HttpHandler:patch(INPUT cURLwithID, INPUT cApiName, INPUT cApiKeyValue, INPUT cServerNameIndication, INPUT oBody, OUTPUT opErrorMessage, OUTPUT oResponse).
  899. oParser = NEW ObjectModelParser().
  900. oResponseMessage = CAST(oParser:Parse(CAST(oResponse:Entity, JsonObject):GetJsonText()), JsonObject).
  901. oResponseMessage:WRITE(cResponseMessage, FALSE).
  902. cResponseMessage = SUBSTITUTE ('Status-Code = &1, Artikel &2, Status &3 / &4', oResponse:StatusCode, ipcProdId, ipcStatus, cResponseMessage).
  903. RUN writeLogFile.p ('setProductToStatus', cLogFile, cResponseMessage ).
  904. DELETE OBJECT oParser NO-ERROR.
  905. DELETE OBJECT oResponseMessage NO-ERROR.
  906. DELETE OBJECT oBody NO-ERROR.
  907. RETURN lOK.
  908. END FUNCTION.
  909. FUNCTION updateProduct RETURNS LOGICAL
  910. ( ):
  911. /*------------------------------------------------------------------------------*/
  912. /* Purpose: Super Override */
  913. /* Parameters: */
  914. /* Notes: */
  915. /*------------------------------------------------------------------------------*/
  916. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  917. DEFINE VARIABLE cProduct AS LONGCHAR NO-UNDO.
  918. DEFINE VARIABLE cURLwithID AS CHARACTER NO-UNDO.
  919. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  920. DEFINE VARIABLE oResponseMessage AS JsonObject NO-UNDO.
  921. DEFINE VARIABLE cResponseMessage AS CHARACTER NO-UNDO.
  922. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  923. DEFINE VARIABLE cBody AS CHARACTER NO-UNDO.
  924. DEFINE VARIABLE lBundles AS LOGICAL NO-UNDO.
  925. FIND FIRST tProduct.
  926. /* tProduct.cName = CODEPAGE-CONVERT(tProduct.cName, SESSION:CHARSET, "utf-8").*/
  927. htProduct:BUFFER-FIELD('cId'):SERIALIZE-HIDDEN = TRUE.
  928. cURLwithID = cURL + '/' + tProduct.cId.
  929. oProduct = NEW JsonObject().
  930. oProduct:READ(htProduct).
  931. FIND FIRST tVessel.
  932. oVessel = NEW JsonObject().
  933. oVessel:READ(htVessel).
  934. lBundles = FALSE.
  935. oBundles = NEW JsonArray().
  936. FOR EACH tBundle USE-INDEX tBundle-k1
  937. WHERE tBundle.iSize > 0
  938. :
  939. oBundle = NEW JsonObject().
  940. oBundle:READ(htBundle).
  941. FOR EACH tPalletBundle NO-LOCK
  942. WHERE tPalletBundle.rtBundle = tBundle.rtBundle:
  943. oPalletBundle = NEW JsonObject().
  944. oPalletBundle:Read(htPalletBundle).
  945. oBundle:Add('pallet_bundle', oPalletBundle).
  946. END.
  947. oBundles:Add(oBundle).
  948. lBundles = TRUE.
  949. END.
  950. oProduct:Add('vessel' , oVessel).
  951. /* IF lBundles THEN oProduct:Add('bundles', oBundles).*/
  952. oProduct:Add('bundles', oBundles).
  953. oProduct:WRITE(cBody, TRUE).
  954. /* RUN writeLogFile.p ('updateProduct', cLogFile, cBody ).*/
  955. lOK = HttpHandler:patch(INPUT cURLwithID, INPUT cApiName, INPUT cApiKeyValue, INPUT cServerNameIndication, INPUT oProduct, OUTPUT opErrorMessage, OUTPUT oResponse).
  956. oParser = NEW ObjectModelParser().
  957. oResponseMessage = CAST(oParser:Parse(CAST(oResponse:Entity, JsonObject):GetJsonText()), JsonObject).
  958. oResponseMessage:WRITE(cResponseMessage, FALSE).
  959. cResponseMessage = SUBSTITUTE ('Status-Code = &1, Artikel &2 / &3', oResponse:StatusCode, tProduct.cId, cResponseMessage).
  960. RUN writeLogFile.p ('updateProduct', cLogFile, cResponseMessage ).
  961. IF NOT lOK THEN RUN writeLogFile.p ('updateProduct', cLogFile, cBody ).
  962. htProduct:BUFFER-FIELD('cId'):SERIALIZE-HIDDEN = TRUE.
  963. DELETE OBJECT oParser NO-ERROR.
  964. DELETE OBJECT oResponseMessage NO-ERROR.
  965. DELETE OBJECT oProduct NO-ERROR.
  966. DELETE OBJECT oVessel NO-ERROR.
  967. DELETE OBJECT oBundle NO-ERROR.
  968. DELETE OBJECT oPalletBundle NO-ERROR.
  969. DELETE OBJECT oBundles NO-ERROR.
  970. RETURN lOK.
  971. END FUNCTION.