Advertisement
Guest User

Untitled

a guest
Apr 4th, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.56 KB | None | 0 0
  1. package C4::Billing::SapErp;
  2.  
  3. # This file is part of Koha.
  4. #
  5. # Copyright (C) 2016 Observis Oy
  6. #
  7. # Koha is free software; you can redistribute it and/or modify it
  8. # under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 3 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # Koha is distributed in the hope that it will be useful, but
  13. # WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with Koha; if not, see <http://www.gnu.org/licenses>.
  19.  
  20. use strict;
  21. use warnings;
  22. use Modern::Perl;
  23. use XML::LibXML;
  24. use XML::Compile::Schema;
  25. use Net::FTP;
  26. use Net::SFTP::Foreign;
  27. use POSIX;
  28.  
  29. use DBI;
  30. use DBD::mysql;
  31.  
  32. use C4::Accounts;
  33. use Data::Dumper;
  34.  
  35. use vars qw($VERSION @ISA @EXPORT);
  36.  
  37. BEGIN {
  38. # set the version for version checking
  39. $VERSION = 1.0;
  40. require Exporter;
  41. @ISA = qw(Exporter);
  42. @EXPORT = qw(send_xml);
  43. }
  44.  
  45. sub send_xml{
  46.  
  47. my (@billingdata) = @_;
  48.  
  49. #Create and validate xml
  50. my($path, $name) = create_xml(@billingdata);
  51.  
  52. # Now since Net::SFTP is complete and utter rubbish,
  53. # we'll just spawn a shell and use "real" sftp instead. sshpass is needed for this.
  54. my $usesftp = C4::Context->config("sap_use_sftp");
  55.  
  56. #Get the ftp-connection.
  57. my $providerConfig = {host=>C4::Context->config("sap_ftp_host"),
  58. port=>C4::Context->config("sap_ftp_port"),
  59. timeout=>C4::Context->config("sap_ftp_timeout"),
  60. ispassive=>C4::Context->config("sap_ftp_ispassive"),
  61. user=>C4::Context->config("sap_ftp_user"),
  62. pw=>C4::Context->config("sap_ftp_pw")};
  63.  
  64. if ( $usesftp == 1 ) {
  65.  
  66. system ("sshpass -p $providerConfig->{pw} sftp $providerConfig->{user}\@$providerConfig->{host} > /dev/null 2>&1 << EOF
  67. cd IN
  68. put $path$name
  69. bye
  70. EOF") == 0 or die "system failed: $?:$!";
  71.  
  72. # my ($sftpcon, $error) = get_sftp($providerConfig);
  73. # warn $error;
  74. # if ($error) {
  75. # return(undef, $error);
  76. # } else {
  77. # $sftpcon->put($filepath.$filename, $filename) or die "put failed: " . $sftpcon->error;
  78. # return 1;
  79. # }
  80. } else {
  81.  
  82. # my ($ftpcon, $error) = get_ftp($providerConfig);
  83. # warn $error;
  84. # if ($error) {
  85. # return(undef, $error);
  86. # } else {
  87. # $ftpcon->binary();
  88. # $ftpcon->put($filepath.$filename, $filename) or die ("Can't put $filepath to ftp server");
  89. # return 1;
  90. # }
  91. }
  92. }
  93.  
  94. sub create_xml {
  95.  
  96. my (@billingdata) = @_;
  97.  
  98. my $timestamp = POSIX::strftime '%y%m%d', gmtime();
  99. my $datum = POSIX::strftime '%Y%m%d', gmtime();
  100. my $year = POSIX::strftime '%Y', gmtime();
  101.  
  102. my $i = 0;
  103. my $filenumber = sprintf("%04d", $i);
  104. my $filename = "KOH_1402LS".$filenumber.$timestamp.".xml";
  105. my $filepath = C4::Context->config("sendoverduebills_pathtoxml");
  106.  
  107. #Test if file exists
  108. while(-e $filepath.$filename){
  109. $filenumber = sprintf("%04d", $i=$i+1);
  110. $filename = "KOH_1402LS".$filenumber.$timestamp.".xml";
  111. }
  112.  
  113. my $doc = XML::LibXML::Document->new( '1.0', 'UTF-8' );
  114. my $root = $doc->createElement("ZORDERS5"); #Root element
  115.  
  116. my $element; #Level 1 element
  117. my $tag; #Level 2 element
  118. my $rowtag; #Level 3 element
  119. my $lastrowtag; #Level 4 element
  120.  
  121. my $start; #Starting index when cutting strings
  122. my $rounds; #Number how many time to cut a given string
  123.  
  124. while (my $data = shift @billingdata){
  125.  
  126. my $idoc = $doc->createElement("IDOC");
  127. my $i = 10; #Used to form rowstring
  128. my $rowstring = sprintf("%06d", $i);
  129.  
  130. # Getting ssn for the bill
  131. my $ssn = get_ssn($data->{borrowernumber});
  132.  
  133. $idoc->setAttribute("BEGIN", "1");
  134.  
  135. #EDI_DC40
  136. $element = $doc->createElement("EDI_DC40");
  137. $element->setAttribute("SEGMENT", "1");
  138.  
  139. $tag = $doc->createElement("TABNAM");$tag->appendTextNode("EDI_DC40");
  140. $element->appendChild($tag);
  141.  
  142. $tag = $doc->createElement("DIRECT");$tag->appendTextNode("2");
  143. $element->appendChild($tag);
  144.  
  145. $tag = $doc->createElement("IDOCTYP");$tag->appendTextNode("ORDERS05");
  146. $element->appendChild($tag);
  147.  
  148. $tag = $doc->createElement("CIMTYP");$tag->appendTextNode("ZORDERS5");
  149. $element->appendChild($tag);
  150.  
  151. $tag = $doc->createElement("SNDPOR");
  152. $element->appendChild($tag);
  153.  
  154. $tag = $doc->createElement("SNDPRT");$tag->appendTextNode("LS");
  155. $element->appendChild($tag);
  156.  
  157. $tag = $doc->createElement("SNDPRN");$tag->appendTextNode("KOH_1402");
  158. $element->appendChild($tag);
  159.  
  160. $tag = $doc->createElement("RCVPOR");
  161. $element->appendChild($tag);
  162.  
  163. $tag = $doc->createElement("RCVPRN");
  164. $element->appendChild($tag);
  165.  
  166. $idoc->appendChild($element);
  167.  
  168. #E1EDK01
  169. $element = $doc->createElement("E1EDK01");
  170. $element->setAttribute("SEGMENT", "1");
  171.  
  172. $tag = $doc->createElement("ZTERM");$tag->appendTextNode("");
  173. $element->appendChild($tag);
  174.  
  175. $idoc->appendChild($element);
  176.  
  177. #E1EDK14
  178. $element = $doc->createElement("E1EDK14");
  179. $element->setAttribute("SEGMENT", "1");
  180.  
  181. $tag = $doc->createElement("QUALF");$tag->appendTextNode("006");
  182. $element->appendChild($tag);
  183.  
  184. $tag = $doc->createElement("ORGID");$tag->appendTextNode("00");
  185. $element->appendChild($tag);
  186.  
  187. $idoc->appendChild($element);
  188.  
  189. #E1EDK14
  190. $element = $doc->createElement("E1EDK14");
  191. $element->setAttribute("SEGMENT", "1");
  192.  
  193. $tag = $doc->createElement("QUALF");$tag->appendTextNode("007");
  194. $element->appendChild($tag);
  195.  
  196. $tag = $doc->createElement("ORGID");$tag->appendTextNode("00");
  197. $element->appendChild($tag);
  198.  
  199. $idoc->appendChild($element);
  200.  
  201. #E1EDK14
  202. $element = $doc->createElement("E1EDK14");
  203. $element->setAttribute("SEGMENT", "1");
  204.  
  205. $tag = $doc->createElement("QUALF");$tag->appendTextNode("008");
  206. $element->appendChild($tag);
  207.  
  208. $tag = $doc->createElement("ORGID");$tag->appendTextNode("1402");
  209. $element->appendChild($tag);
  210.  
  211. $idoc->appendChild($element);
  212.  
  213. #E1EDK14
  214. $element = $doc->createElement("E1EDK14");
  215. $element->setAttribute("SEGMENT", "1");
  216.  
  217. $tag = $doc->createElement("QUALF");$tag->appendTextNode("012");
  218. $element->appendChild($tag);
  219.  
  220. $tag = $doc->createElement("ORGID");$tag->appendTextNode("ZVT");
  221. $element->appendChild($tag);
  222.  
  223. $idoc->appendChild($element);
  224.  
  225. #E1EDK14
  226. $element = $doc->createElement("E1EDK14");
  227. $element->setAttribute("SEGMENT", "1");
  228.  
  229. $tag = $doc->createElement("QUALF");$tag->appendTextNode("016");
  230. $element->appendChild($tag);
  231.  
  232. $tag = $doc->createElement("ORGID");$tag->appendTextNode("C007");
  233. $element->appendChild($tag);
  234.  
  235. $idoc->appendChild($element);
  236.  
  237. #E1EDK14
  238. $element = $doc->createElement("E1EDK14");
  239. $element->setAttribute("SEGMENT", "1");
  240.  
  241. $tag = $doc->createElement("QUALF");$tag->appendTextNode("019");
  242. $element->appendChild($tag);
  243.  
  244. $tag = $doc->createElement("ORGID");$tag->appendTextNode("KOH");
  245. $element->appendChild($tag);
  246.  
  247. $idoc->appendChild($element);
  248.  
  249. #E1EDK03
  250. $element = $doc->createElement("E1EDK03");
  251. $element->setAttribute("SEGMENT", "1");
  252.  
  253. $tag = $doc->createElement("IDDAT");$tag->appendTextNode("016");
  254. $element->appendChild($tag);
  255.  
  256. $tag = $doc->createElement("DATUM");$tag->appendTextNode($datum);
  257. $element->appendChild($tag);
  258.  
  259. $idoc->appendChild($element);
  260.  
  261. #E1EDKA1
  262. $element = $doc->createElement("E1EDKA1");
  263. $element->setAttribute("SEGMENT", "1");
  264.  
  265. $tag = $doc->createElement("PARVW");$tag->appendTextNode("AG");
  266. $element->appendChild($tag);
  267.  
  268. $tag = $doc->createElement("PARTN");$tag->appendTextNode($ssn);
  269. $element->appendChild($tag);
  270.  
  271. $tag = $doc->createElement("NAME1");$tag->appendTextNode($data->{firstname}." ".$data->{surname});
  272. $element->appendChild($tag);
  273.  
  274. $tag = $doc->createElement("STRAS");$tag->appendTextNode($data->{address});
  275. $element->appendChild($tag);
  276.  
  277. $tag = $doc->createElement("ORT01");$tag->appendTextNode($data->{city});
  278. $element->appendChild($tag);
  279.  
  280. $tag = $doc->createElement("PSTLZ");$tag->appendTextNode($data->{zipcode});
  281. $element->appendChild($tag);
  282.  
  283. #$tag = $doc->createElement("BNAME");$tag->appendTextNode("Mari Haatainen");
  284. #$element->appendChild($tag);
  285.  
  286. $idoc->appendChild($element);
  287.  
  288. #E1EDK02
  289. $element = $doc->createElement("E1EDK02");
  290. $element->setAttribute("SEGMENT", "1");
  291.  
  292. $tag = $doc->createElement("QUALF");$tag->appendTextNode("001");
  293. $element->appendChild($tag);
  294.  
  295. $tag = $doc->createElement("BELNR");$tag->appendTextNode($year."C007".$rowstring);
  296. $element->appendChild($tag);
  297.  
  298. $idoc->appendChild($element);
  299.  
  300. #E1EDKT1
  301. $element = $doc->createElement("E1EDKT1");
  302. $element->setAttribute("SEGMENT", "1");
  303.  
  304. $tag = $doc->createElement("TDID");$tag->appendTextNode("0001");
  305. $element->appendChild($tag);
  306.  
  307. #E1EDKT2
  308. $tag = $doc->createElement("E1EDKT2");
  309. $tag->setAttribute("SEGMENT", "1");
  310.  
  311. $rowtag = $doc->createElement("TDLINE");$rowtag->appendTextNode("Mari Haatainen, 0447942467");
  312. $tag->appendChild($rowtag);
  313.  
  314. $element->appendChild($tag);
  315.  
  316. $idoc->appendChild($element);
  317.  
  318. #E1EDP01 Row level begins!
  319. $element = $doc->createElement("E1EDP01");
  320. $element->setAttribute("SEGMENT", "1");
  321.  
  322. $tag = $doc->createElement("POSEX");$tag->appendTextNode($rowstring);
  323. $element->appendChild($tag);
  324.  
  325. $tag = $doc->createElement("MENGE");$tag->appendTextNode("1.000");
  326. $element->appendChild($tag);
  327.  
  328. #ZE1EDP02
  329. $tag = $doc->createElement("ZE1EDP02");
  330. $tag->setAttribute("SEGMENT", "1");
  331.  
  332. $rowtag = $doc->createElement("POSNR");$rowtag->appendTextNode($rowstring);
  333. $tag->appendChild($rowtag);
  334.  
  335. $element->appendChild($tag);
  336.  
  337. #E1EDP02
  338. $tag = $doc->createElement("E1EDP02");
  339. $tag->setAttribute("SEGMENT", "1");
  340.  
  341. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("048");
  342. $tag->appendChild($rowtag);
  343.  
  344. $rowtag = $doc->createElement("ZEILE");$rowtag->appendTextNode($rowstring);
  345. $tag->appendChild($rowtag);
  346.  
  347. $rowtag = $doc->createElement("BSARK");$rowtag->appendTextNode("0140255101");
  348. $tag->appendChild($rowtag);
  349.  
  350. $element->appendChild($tag);
  351.  
  352. #E1EDP03
  353. $tag = $doc->createElement("E1EDP03");
  354. $tag->setAttribute("SEGMENT", "1");
  355.  
  356. $rowtag = $doc->createElement("IDDAT");$rowtag->appendTextNode("002");
  357. $tag->appendChild($rowtag);
  358.  
  359. $rowtag = $doc->createElement("DATUM");$rowtag->appendTextNode($datum);
  360. $tag->appendChild($rowtag);
  361.  
  362. $element->appendChild($tag);
  363.  
  364. #E1EDP05
  365. $tag = $doc->createElement("E1EDP05");
  366. $tag->setAttribute("SEGMENT", "1");
  367.  
  368. $rowtag = $doc->createElement("ALCKZ");$rowtag->appendTextNode("+");
  369. $tag->appendChild($rowtag);
  370.  
  371. $rowtag = $doc->createElement("KSCHL");$rowtag->appendTextNode("ZPR0");
  372. $tag->appendChild($rowtag);
  373.  
  374. $rowtag = $doc->createElement("KRATE");$rowtag->appendTextNode($data->{fine});
  375. C4::Accounts::manualinvoice($data->{borrowernumber}, $data->{itemnumber}, 'Laskutuslisä', 'F', $data->{fine}, 'Laskutuslisä');
  376. $tag->appendChild($rowtag);
  377.  
  378. $element->appendChild($tag);
  379.  
  380. #E1EDP19
  381. $tag = $doc->createElement("E1EDP19");
  382. $tag->setAttribute("SEGMENT", "1");
  383.  
  384. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("002");
  385. $tag->appendChild($rowtag);
  386.  
  387. $rowtag = $doc->createElement("IDTNR");$rowtag->appendTextNode("7445");
  388. $tag->appendChild($rowtag);
  389.  
  390. $element->appendChild($tag);
  391.  
  392. #E1EDPT1
  393. $tag = $doc->createElement("E1EDPT1");
  394. $tag->setAttribute("SEGMENT", "1");
  395.  
  396. $rowtag = $doc->createElement("TDID");$rowtag->appendTextNode("0001");
  397. $tag->appendChild($rowtag);
  398.  
  399. #E1EDPT2
  400. $rowtag = $doc->createElement("E1EDPT2");
  401. $rowtag->setAttribute("SEGMENT", "1");
  402.  
  403. $lastrowtag = $doc->createElement("TDLINE");$lastrowtag->appendTextNode("Laskutuslisä");
  404. $rowtag->appendChild($lastrowtag);
  405.  
  406. $lastrowtag = $doc->createElement("TDFORMAT");$lastrowtag->appendTextNode("*");
  407. $rowtag->appendChild($lastrowtag);
  408.  
  409. $tag->appendChild($rowtag);
  410.  
  411. $element->appendChild($tag);
  412.  
  413. $idoc->appendChild($element);
  414.  
  415. #New row
  416. $rowstring = sprintf("%06d", $i=$i+10);
  417.  
  418. #E1EDP01 Borrower's first item
  419. $element = $doc->createElement("E1EDP01");
  420. $element->setAttribute("SEGMENT", "1");
  421.  
  422. $tag = $doc->createElement("POSEX");$tag->appendTextNode($rowstring);
  423. $element->appendChild($tag);
  424.  
  425. $tag = $doc->createElement("MENGE");$tag->appendTextNode("1.000");
  426. $element->appendChild($tag);
  427.  
  428. #ZE1EDP02
  429. $tag = $doc->createElement("ZE1EDP02");
  430. $tag->setAttribute("SEGMENT", "1");
  431.  
  432. $rowtag = $doc->createElement("POSNR");$rowtag->appendTextNode($rowstring);
  433. $tag->appendChild($rowtag);
  434.  
  435. $element->appendChild($tag);
  436.  
  437. #E1EDP02
  438. $tag = $doc->createElement("E1EDP02");
  439. $tag->setAttribute("SEGMENT", "1");
  440.  
  441. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("048");
  442. $tag->appendChild($rowtag);
  443.  
  444. $rowtag = $doc->createElement("ZEILE");$rowtag->appendTextNode($rowstring);
  445. $tag->appendChild($rowtag);
  446.  
  447. $rowtag = $doc->createElement("BSARK");$rowtag->appendTextNode("0140255101");
  448. $tag->appendChild($rowtag);
  449.  
  450. $element->appendChild($tag);
  451.  
  452. #E1EDP03
  453. $tag = $doc->createElement("E1EDP03");
  454. $tag->setAttribute("SEGMENT", "1");
  455.  
  456. $rowtag = $doc->createElement("IDDAT");$rowtag->appendTextNode("002");
  457. $tag->appendChild($rowtag);
  458.  
  459. $rowtag = $doc->createElement("DATUM");$rowtag->appendTextNode($datum);
  460. $tag->appendChild($rowtag);
  461.  
  462. $element->appendChild($tag);
  463.  
  464. #E1EDP05
  465. $tag = $doc->createElement("E1EDP05");
  466. $tag->setAttribute("SEGMENT", "1");
  467.  
  468. $rowtag = $doc->createElement("ALCKZ");$rowtag->appendTextNode("+");
  469. $tag->appendChild($rowtag);
  470.  
  471. $rowtag = $doc->createElement("KSCHL");$rowtag->appendTextNode("ZPR0");
  472. $tag->appendChild($rowtag);
  473.  
  474. $rowtag = $doc->createElement("KRATE");$rowtag->appendTextNode($data->{replacementprice});
  475. C4::Accounts::manualinvoice($data->{borrowernumber}, $data->{itemnumber}, 'Lasku', 'F', $data->{replacementprice}, 'Perintä');
  476. $tag->appendChild($rowtag);
  477.  
  478. $element->appendChild($tag);
  479.  
  480. #E1EDP19
  481. $tag = $doc->createElement("E1EDP19");
  482. $tag->setAttribute("SEGMENT", "1");
  483.  
  484. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("002");
  485. $tag->appendChild($rowtag);
  486.  
  487. $rowtag = $doc->createElement("IDTNR");$rowtag->appendTextNode("7359");
  488. $tag->appendChild($rowtag);
  489.  
  490. $element->appendChild($tag);
  491.  
  492. #E1EDPT1
  493. $tag = $doc->createElement("E1EDPT1");
  494. $tag->setAttribute("SEGMENT", "1");
  495.  
  496. $rowtag = $doc->createElement("TDID");$rowtag->appendTextNode("0001");
  497. $tag->appendChild($rowtag);
  498.  
  499. if(length($data->{title}) > 70){
  500.  
  501. $start = 0;
  502. $rounds = POSIX::ceil(length($data->{title})/70);
  503.  
  504. for(my $j=0;$j<$rounds;$j++){
  505. #E1EDPT2
  506. $rowtag = $doc->createElement("E1EDPT2");
  507. $rowtag->setAttribute("SEGMENT", "1");
  508.  
  509. $lastrowtag = $doc->createElement("TDLINE");$lastrowtag->appendTextNode(substr($data->{title}, $start, 70));
  510. $rowtag->appendChild($lastrowtag);
  511.  
  512. $lastrowtag = $doc->createElement("TDFORMAT");$lastrowtag->appendTextNode("*");
  513. $rowtag->appendChild($lastrowtag);
  514.  
  515. $tag->appendChild($rowtag);
  516.  
  517. $element->appendChild($tag);
  518.  
  519. $start = $start+70;
  520. }
  521. }
  522. else{
  523. #E1EDPT2
  524. $rowtag = $doc->createElement("E1EDPT2");
  525. $rowtag->setAttribute("SEGMENT", "1");
  526.  
  527. $lastrowtag = $doc->createElement("TDLINE");$lastrowtag->appendTextNode($data->{title});
  528. $rowtag->appendChild($lastrowtag);
  529.  
  530. $lastrowtag = $doc->createElement("TDFORMAT");$lastrowtag->appendTextNode("*");
  531. $rowtag->appendChild($lastrowtag);
  532.  
  533. $tag->appendChild($rowtag);
  534.  
  535. $element->appendChild($tag);
  536. }
  537. $idoc->appendChild($element);
  538.  
  539. $rowstring = sprintf("%06d", $i=$i+10);
  540.  
  541. #E1EDP01 Borrower's first plastic fine
  542. $element = $doc->createElement("E1EDP01");
  543. $element->setAttribute("SEGMENT", "1");
  544.  
  545. $tag = $doc->createElement("POSEX");$tag->appendTextNode($rowstring);
  546. $element->appendChild($tag);
  547.  
  548. $tag = $doc->createElement("MENGE");$tag->appendTextNode("1.000");
  549. $element->appendChild($tag);
  550.  
  551. #ZE1EDP02
  552. $tag = $doc->createElement("ZE1EDP02");
  553. $tag->setAttribute("SEGMENT", "1");
  554.  
  555. $rowtag = $doc->createElement("POSNR");$rowtag->appendTextNode($rowstring);
  556. $tag->appendChild($rowtag);
  557.  
  558. $element->appendChild($tag);
  559.  
  560. #E1EDP02
  561. $tag = $doc->createElement("E1EDP02");
  562. $tag->setAttribute("SEGMENT", "1");
  563.  
  564. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("048");
  565. $tag->appendChild($rowtag);
  566.  
  567. $rowtag = $doc->createElement("ZEILE");$rowtag->appendTextNode($rowstring);
  568. $tag->appendChild($rowtag);
  569.  
  570. $rowtag = $doc->createElement("BSARK");$rowtag->appendTextNode("0140255101");
  571. $tag->appendChild($rowtag);
  572.  
  573. $element->appendChild($tag);
  574.  
  575. #E1EDP03
  576. $tag = $doc->createElement("E1EDP03");
  577. $tag->setAttribute("SEGMENT", "1");
  578.  
  579. $rowtag = $doc->createElement("IDDAT");$rowtag->appendTextNode("002");
  580. $tag->appendChild($rowtag);
  581.  
  582. $rowtag = $doc->createElement("DATUM");$rowtag->appendTextNode($datum);
  583. $tag->appendChild($rowtag);
  584.  
  585. $element->appendChild($tag);
  586.  
  587. #E1EDP05
  588. $tag = $doc->createElement("E1EDP05");
  589. $tag->setAttribute("SEGMENT", "1");
  590.  
  591. $rowtag = $doc->createElement("ALCKZ");$rowtag->appendTextNode("+");
  592. $tag->appendChild($rowtag);
  593.  
  594. $rowtag = $doc->createElement("KSCHL");$rowtag->appendTextNode("ZPR0");
  595. $tag->appendChild($rowtag);
  596.  
  597. $rowtag = $doc->createElement("KRATE");$rowtag->appendTextNode($data->{plastic});
  598. C4::Accounts::manualinvoice($data->{borrowernumber}, $data->{itemnumber}, 'Muovitusmaksu', 'F', $data->{plastic}, 'Muovitusmaksu');
  599. $tag->appendChild($rowtag);
  600.  
  601. $element->appendChild($tag);
  602.  
  603. #E1EDP19
  604. $tag = $doc->createElement("E1EDP19");
  605. $tag->setAttribute("SEGMENT", "1");
  606.  
  607. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("002");
  608. $tag->appendChild($rowtag);
  609.  
  610. $rowtag = $doc->createElement("IDTNR");$rowtag->appendTextNode("?????");
  611. $tag->appendChild($rowtag);
  612.  
  613. $element->appendChild($tag);
  614.  
  615. #E1EDPT1
  616. $tag = $doc->createElement("E1EDPT1");
  617. $tag->setAttribute("SEGMENT", "1");
  618.  
  619. $rowtag = $doc->createElement("TDID");$rowtag->appendTextNode("0001");
  620. $tag->appendChild($rowtag);
  621.  
  622. #E1EDPT2
  623. $rowtag = $doc->createElement("E1EDPT2");
  624. $rowtag->setAttribute("SEGMENT", "1");
  625.  
  626. $lastrowtag = $doc->createElement("TDLINE");$lastrowtag->appendTextNode("Muovitusmaksu");
  627. $rowtag->appendChild($lastrowtag);
  628.  
  629. $lastrowtag = $doc->createElement("TDFORMAT");$lastrowtag->appendTextNode("*");
  630. $rowtag->appendChild($lastrowtag);
  631.  
  632. $tag->appendChild($rowtag);
  633.  
  634. $element->appendChild($tag);
  635.  
  636. $idoc->appendChild($element);
  637.  
  638. # All borrower's items
  639. while($data->{borrowernumber} eq $billingdata[0]->{borrowernumber}){
  640.  
  641. $data = shift @billingdata;
  642. #New row
  643. $rowstring = sprintf("%06d", $i=$i+10);
  644.  
  645. #E1EDP01 Borrower's item
  646. $element = $doc->createElement("E1EDP01");
  647. $element->setAttribute("SEGMENT", "1");
  648.  
  649. $tag = $doc->createElement("POSEX");$tag->appendTextNode($rowstring);
  650. $element->appendChild($tag);
  651.  
  652. $tag = $doc->createElement("MENGE");$tag->appendTextNode("1.000");
  653. $element->appendChild($tag);
  654.  
  655. #ZE1EDP02
  656. $tag = $doc->createElement("ZE1EDP02");
  657. $tag->setAttribute("SEGMENT", "1");
  658.  
  659. $rowtag = $doc->createElement("POSNR");$rowtag->appendTextNode($rowstring);
  660. $tag->appendChild($rowtag);
  661.  
  662. $element->appendChild($tag);
  663.  
  664. #E1EDP02
  665. $tag = $doc->createElement("E1EDP02");
  666. $tag->setAttribute("SEGMENT", "1");
  667.  
  668. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("048");
  669. $tag->appendChild($rowtag);
  670.  
  671. $rowtag = $doc->createElement("ZEILE");$rowtag->appendTextNode($rowstring);
  672. $tag->appendChild($rowtag);
  673.  
  674. $rowtag = $doc->createElement("BSARK");$rowtag->appendTextNode("0140255101");
  675. $tag->appendChild($rowtag);
  676.  
  677. $element->appendChild($tag);
  678.  
  679. #E1EDP03
  680. $tag = $doc->createElement("E1EDP03");
  681. $tag->setAttribute("SEGMENT", "1");
  682.  
  683. $rowtag = $doc->createElement("IDDAT");$rowtag->appendTextNode("002");
  684. $tag->appendChild($rowtag);
  685.  
  686. $rowtag = $doc->createElement("DATUM");$rowtag->appendTextNode($datum);
  687. $tag->appendChild($rowtag);
  688.  
  689. $element->appendChild($tag);
  690.  
  691. #E1EDP05
  692. $tag = $doc->createElement("E1EDP05");
  693. $tag->setAttribute("SEGMENT", "1");
  694.  
  695. $rowtag = $doc->createElement("ALCKZ");$rowtag->appendTextNode("+");
  696. $tag->appendChild($rowtag);
  697.  
  698. $rowtag = $doc->createElement("KSCHL");$rowtag->appendTextNode("ZPR0");
  699. $tag->appendChild($rowtag);
  700.  
  701. $rowtag = $doc->createElement("KRATE");$rowtag->appendTextNode($data->{replacementprice});
  702. C4::Accounts::manualinvoice($data->{borrowernumber}, $data->{itemnumber}, 'Lasku', 'F', $data->{replacementprice}, 'Perintä');
  703. $tag->appendChild($rowtag);
  704.  
  705. $element->appendChild($tag);
  706.  
  707. #E1EDP19
  708. $tag = $doc->createElement("E1EDP19");
  709. $tag->setAttribute("SEGMENT", "1");
  710.  
  711. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("002");
  712. $tag->appendChild($rowtag);
  713.  
  714. $rowtag = $doc->createElement("IDTNR");$rowtag->appendTextNode("7359");
  715. $tag->appendChild($rowtag);
  716.  
  717. $element->appendChild($tag);
  718.  
  719. #E1EDPT1
  720. $tag = $doc->createElement("E1EDPT1");
  721. $tag->setAttribute("SEGMENT", "1");
  722.  
  723. $rowtag = $doc->createElement("TDID");$rowtag->appendTextNode("0001");
  724. $tag->appendChild($rowtag);
  725.  
  726. if(length($data->{title}) > 70){
  727.  
  728. $start = 0;
  729. $rounds = POSIX::ceil(length($data->{title})/70);
  730.  
  731. for(my $j=0;$j<$rounds;$j++){
  732. #E1EDPT2
  733. $rowtag = $doc->createElement("E1EDPT2");
  734. $rowtag->setAttribute("SEGMENT", "1");
  735.  
  736. $lastrowtag = $doc->createElement("TDLINE");$lastrowtag->appendTextNode(substr($data->{title}, $start, 70));
  737. $rowtag->appendChild($lastrowtag);
  738.  
  739. $lastrowtag = $doc->createElement("TDFORMAT");$lastrowtag->appendTextNode("*");
  740. $rowtag->appendChild($lastrowtag);
  741.  
  742. $tag->appendChild($rowtag);
  743.  
  744. $element->appendChild($tag);
  745.  
  746. $start = $start+70;
  747. }
  748. }
  749. else{
  750. #E1EDPT2
  751. $rowtag = $doc->createElement("E1EDPT2");
  752. $rowtag->setAttribute("SEGMENT", "1");
  753.  
  754. $lastrowtag = $doc->createElement("TDLINE");$lastrowtag->appendTextNode($data->{title});
  755. $rowtag->appendChild($lastrowtag);
  756.  
  757. $lastrowtag = $doc->createElement("TDFORMAT");$lastrowtag->appendTextNode("*");
  758. $rowtag->appendChild($lastrowtag);
  759.  
  760. $tag->appendChild($rowtag);
  761.  
  762. $element->appendChild($tag);
  763. }
  764.  
  765.  
  766. $idoc->appendChild($element);
  767.  
  768. $rowstring = sprintf("%06d", $i=$i+10);
  769.  
  770. #E1EDP01 Borrower's next plastic fine
  771. $element = $doc->createElement("E1EDP01");
  772. $element->setAttribute("SEGMENT", "1");
  773.  
  774. $tag = $doc->createElement("POSEX");$tag->appendTextNode($rowstring);
  775. $element->appendChild($tag);
  776.  
  777. $tag = $doc->createElement("MENGE");$tag->appendTextNode("1.000");
  778. $element->appendChild($tag);
  779.  
  780. #ZE1EDP02
  781. $tag = $doc->createElement("ZE1EDP02");
  782. $tag->setAttribute("SEGMENT", "1");
  783.  
  784. $rowtag = $doc->createElement("POSNR");$rowtag->appendTextNode($rowstring);
  785. $tag->appendChild($rowtag);
  786.  
  787. $element->appendChild($tag);
  788.  
  789. #E1EDP02
  790. $tag = $doc->createElement("E1EDP02");
  791. $tag->setAttribute("SEGMENT", "1");
  792.  
  793. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("048");
  794. $tag->appendChild($rowtag);
  795.  
  796. $rowtag = $doc->createElement("ZEILE");$rowtag->appendTextNode($rowstring);
  797. $tag->appendChild($rowtag);
  798.  
  799. $rowtag = $doc->createElement("BSARK");$rowtag->appendTextNode("0140255101");
  800. $tag->appendChild($rowtag);
  801.  
  802. $element->appendChild($tag);
  803.  
  804. #E1EDP03
  805. $tag = $doc->createElement("E1EDP03");
  806. $tag->setAttribute("SEGMENT", "1");
  807.  
  808. $rowtag = $doc->createElement("IDDAT");$rowtag->appendTextNode("002");
  809. $tag->appendChild($rowtag);
  810.  
  811. $rowtag = $doc->createElement("DATUM");$rowtag->appendTextNode($datum);
  812. $tag->appendChild($rowtag);
  813.  
  814. $element->appendChild($tag);
  815.  
  816. #E1EDP05
  817. $tag = $doc->createElement("E1EDP05");
  818. $tag->setAttribute("SEGMENT", "1");
  819.  
  820. $rowtag = $doc->createElement("ALCKZ");$rowtag->appendTextNode("+");
  821. $tag->appendChild($rowtag);
  822.  
  823. $rowtag = $doc->createElement("KSCHL");$rowtag->appendTextNode("ZPR0");
  824. $tag->appendChild($rowtag);
  825.  
  826. $rowtag = $doc->createElement("KRATE");$rowtag->appendTextNode($data->{plastic});
  827. C4::Accounts::manualinvoice($data->{borrowernumber}, $data->{itemnumber}, 'Muovitusmaksu', 'F', $data->{plastic}, 'Muovitusmaksu');
  828. $tag->appendChild($rowtag);
  829.  
  830. $element->appendChild($tag);
  831.  
  832. #E1EDP19
  833. $tag = $doc->createElement("E1EDP19");
  834. $tag->setAttribute("SEGMENT", "1");
  835.  
  836. $rowtag = $doc->createElement("QUALF");$rowtag->appendTextNode("002");
  837. $tag->appendChild($rowtag);
  838.  
  839. $rowtag = $doc->createElement("IDTNR");$rowtag->appendTextNode("?????");
  840. $tag->appendChild($rowtag);
  841.  
  842. $element->appendChild($tag);
  843.  
  844. #E1EDPT1
  845. $tag = $doc->createElement("E1EDPT1");
  846. $tag->setAttribute("SEGMENT", "1");
  847.  
  848. $rowtag = $doc->createElement("TDID");$rowtag->appendTextNode("0001");
  849. $tag->appendChild($rowtag);
  850.  
  851. #E1EDPT2
  852. $rowtag = $doc->createElement("E1EDPT2");
  853. $rowtag->setAttribute("SEGMENT", "1");
  854.  
  855. $lastrowtag = $doc->createElement("TDLINE");$lastrowtag->appendTextNode("Muovitusmaksu");
  856. $rowtag->appendChild($lastrowtag);
  857.  
  858. $lastrowtag = $doc->createElement("TDFORMAT");$lastrowtag->appendTextNode("*");
  859. $rowtag->appendChild($lastrowtag);
  860.  
  861. $tag->appendChild($rowtag);
  862.  
  863. $element->appendChild($tag);
  864.  
  865. $idoc->appendChild($element);
  866. }
  867.  
  868. $root->appendChild($idoc);
  869.  
  870. $data = shift @billingdata;
  871.  
  872. }
  873.  
  874. $doc->setDocumentElement($root);
  875.  
  876. #Write xml to file
  877. open my $out, '>', $filepath.$filename or die("Can't open file : $!");
  878. binmode $out; # as above
  879. print {$out} $doc->toString(C4::Context->config("sendoverduebills_xmlwritemode"));
  880. close $out;
  881.  
  882. my $xsd = C4::Context->config("sendoverduebills_pathtoxsd");
  883. my $xmlschema = XML::LibXML::Schema->new(location => $xsd);
  884. $xmlschema->validate($doc);
  885.  
  886. return ($filepath, $filename);
  887. }
  888.  
  889. sub get_ssn {
  890. my ($borrowernumber) = @_;
  891.  
  892. my $dbh = C4::Context->dbh;
  893. my $sth = $dbh->prepare("SELECT attribute FROM borrower_attributes WHERE borrowernumber = ? and code = 'SSN'");
  894. $sth->execute($borrowernumber);
  895. my $ssnkey = $sth->fetchrow;
  896. $ssnkey =~ s/\D//g;
  897.  
  898. my $host = C4::Context->config('ssnProvider')->{'host'};
  899. my $port = C4::Context->config('ssnProvider')->{'port'};
  900. my $user = C4::Context->config('ssnProvider')->{'user'};
  901. my $password = C4::Context->config('ssnProvider')->{'password'};
  902.  
  903. my $dsn = "dbi:mysql:ssn:".$host.":".$port;
  904.  
  905. my $connect_ssn = DBI->connect($dsn, $user, $password);
  906.  
  907. my $sth_dsn = $connect_ssn->prepare("SELECT ssnvalue FROM ssn WHERE ssnkey = ?");
  908. $sth_dsn->execute($ssnkey);
  909. my $ssnvalue = $sth_dsn->fetchrow;
  910.  
  911. return $ssnvalue;
  912. }
  913.  
  914. sub get_ftp {
  915.  
  916. my ($providerConfig) = @_;
  917.  
  918. my $ftpcon = Net::FTP->new( Host => $providerConfig->{host},
  919. Port => $providerConfig->{port},
  920. Timeout => $providerConfig->{timeout},
  921. Passive => $providerConfig->{ispassive});
  922. unless ($ftpcon) {
  923. return (undef, "Cannot connect to ftp server: $@");
  924. }
  925.  
  926. if ($ftpcon->login($providerConfig->{user},$providerConfig->{pw})){
  927. return ($ftpcon, undef);
  928. }
  929. else {
  930. return (undef, "Cannot login to ftp server: $@");
  931. }
  932. }
  933.  
  934. sub get_sftp {
  935.  
  936. my ($providerConfig) = @_;
  937.  
  938. my $sftpcon = Net::SFTP::Foreign->new(host => $providerConfig->{host},
  939. user => $providerConfig->{user},
  940. password => $providerConfig->{pw},
  941. more => [qw(-o StrictHostKeyChecking=no)]);
  942. if ($sftpcon->error) {
  943. return (undef, "Cannot connect to ftp server: ". $sftpcon->error);
  944. } else {
  945. return ($sftpcon, undef);
  946. }
  947. }
  948.  
  949. 1;
  950. __END__
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement