diff --git a/directdebit.php b/directdebit.php new file mode 100644 index 0000000000..53ebb403b9 --- /dev/null +++ b/directdebit.php @@ -0,0 +1,398 @@ +".t("Direct Debit siirtotiedosto").":

"; + +// Nordea SEPA Direct Debit (toimii vain EUR-valuutalla) +$factoringyhtio = "NORDEA_DD"; +$valkoodi = "EUR"; + +$factoring_tarkista_lisa = ""; + +if ($tee == 'TARKISTA') { + $tee = "TULOSTA"; + + // lisätään tämä queryyn alle, niin ei ikinä päästä eteenpäin, jos factoring_id on virheellinen + $factoring_tarkista_lisa = " and tunnus = '$factoring_id' "; +} + +$query = "SELECT * + FROM factoring + WHERE yhtio = '{$kukarow["yhtio"]}' + and factoringyhtio = '{$factoringyhtio}' + {$factoring_tarkista_lisa}"; +$factoring_result = pupe_query($query); + +if (mysql_num_rows($factoring_result) == 0) { + echo t("%s Direct Debit-sopimusta ei ole perustettu!", null, $factoringyhtio); + + $tee = "ohita"; +} +elseif (mysql_num_rows($factoring_result) == 1) { + // meillä on vaan yksi, ei tarvitse valita + $vrow = mysql_fetch_assoc($factoring_result); + $factoring_id = $vrow['tunnus']; + $tee = isset($tee) ? $tee : 'TOIMINNOT'; +} + +if ($tee == '') { + //Käyttöliittymä + echo "
"; + echo ""; + + echo t("Valitse Direct Debit-sopimus"); + echo " "; + echo "
"; + echo "

"; +} + +if ($tee == 'TOIMINNOT') { + echo "
"; + echo "Luo uusi siirtotiedosto
"; + echo ""; + echo ""; + echo ""; + echo ""; + + $query = "SELECT * + FROM factoring + WHERE yhtio = '$kukarow[yhtio]' + and factoringyhtio = '$factoringyhtio' + and tunnus = '$factoring_id' + and valkoodi = '$valkoodi'"; + $fres = pupe_query($query); + $frow = mysql_fetch_assoc($fres); + + $query = "SELECT min(laskunro) eka, max(laskunro) vika + FROM lasku use index (yhtio_tila_tapvm) + JOIN maksuehto ON (lasku.yhtio = maksuehto.yhtio + and lasku.maksuehto = maksuehto.tunnus + and maksuehto.factoring_id = '$factoring_id') + WHERE lasku.yhtio = '$kukarow[yhtio]' + and lasku.tila = 'U' + and lasku.tapvm > date_sub(CURDATE(), interval 6 month) + and lasku.alatila = 'X' + and lasku.summa != 0 + and lasku.factoringsiirtonumero = 0 + and lasku.valkoodi = '$valkoodi'"; + $aresult = pupe_query($query); + $arow = mysql_fetch_assoc($aresult); + + $query = "SELECT nimi, tunnus + FROM valuu + WHERE yhtio = '$kukarow[yhtio]' + ORDER BY jarjestys"; + $vresult = pupe_query($query); + + echo ""; + echo ""; + + echo " + + + + + + + "; + + $query = "SELECT max(lasku.factoringsiirtonumero)+1 seuraava + FROM lasku use index (yhtio_tila_tapvm) + JOIN maksuehto ON (lasku.yhtio = maksuehto.yhtio + and lasku.maksuehto = maksuehto.tunnus + and maksuehto.factoring_id = '$factoring_id') + WHERE lasku.yhtio = '$kukarow[yhtio]' + and lasku.tila = 'U' + and lasku.tapvm > date_sub(CURDATE(), interval 6 month) + and lasku.alatila = 'X' + and lasku.summa != 0 + and lasku.factoringsiirtonumero > 0"; + $aresult = pupe_query($query); + $arow = mysql_fetch_assoc($aresult); + + echo " + "; + + echo "
Sopimusnumero:$frow[sopimusnumero]
Valitse valuutta:EUR
Syötä laskuvälin alku:
Syötä laskuvälin loppu:
Siirtoluettelon numero:


"; + + + //Käyttöliittymä + echo "
"; + echo "
"; + echo "Uudelleenluo siirtotiedosto
"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + + $query = "SELECT * + FROM factoring + WHERE yhtio = '$kukarow[yhtio]' + and factoringyhtio = '$factoringyhtio' + and tunnus = '$factoring_id' + and valkoodi = '$valkoodi'"; + $fres = pupe_query($query); + $frow = mysql_fetch_assoc($fres); + + echo ""; + echo ""; + + echo " + "; + + echo "
Sopimusnumero:$frow[sopimusnumero]
Valitse valuutta:EUR
Siirtoluettelon numero:


"; +} + +if ($tee == 'TULOSTA') { + + $luontipvm = date("ymd"); + $luontiaika = date("Hi"); + + $query = "SELECT * + FROM factoring + WHERE yhtio = '$kukarow[yhtio]' + and factoringyhtio = '$factoringyhtio' + and tunnus = '$factoring_id' + and valkoodi = '$valkoodi'"; + $fres = pupe_query($query); + $frow = mysql_fetch_assoc($fres); + + $xmlstr = ''; + $xmlstr .= 'addChild('CstmrDrctDbtInitn'); + $GrpHdr = $dd->addChild('GrpHdr'); // GroupHeader + $GrpHdr->addChild('MsgId', date('Ymd')."/".$dd_siirtonumero); // MessageIdentification, Text, Pakollinen kenttä + $GrpHdr->addChild('CreDtTm', date('Y-m-d')."T".date('H:i:s')); // CreationDateTime, DateTime, Pakollinen kenttä + $GrpHdr->addChild('NbOfTxs', 1); // NumberOfTransactions, Text, Pakollinen kenttä + $GrpHdr->addChild('CtrlSum', 123456); // Total of all individual amounts included in the message. + + $InitgPty = $GrpHdr->addChild('InitgPty'); // InitiatingParty, Pakollinen + $InitgPty->addChild('Nm', sprintf("%-1.70s", $yhtiorow['nimi'])); // Name 1-70 + $InitgPty->addChild('Id')->addChild('OrgId')->addChild('Othr')->addChild('id', $frow["sopimusnumero"]); // 'Palvelutunnus' or 'Intermediary code' informed by Nordea + + if ($ppl == '') { + $ppl = $ppa; + } + + if ($tee_u != 'UUDELLEENLUO' and ($ppa == '' or $ppl == '' or $ppl < $ppa)) { + echo "Huono laskunumeroväli!"; + exit; + } + + if ($tee_u == 'UUDELLEENLUO') { + $where = " and lasku.factoringsiirtonumero = '$dd_siirtonumero' "; + } + else { + $where = " and lasku.laskunro >= '$ppa' + and lasku.laskunro <= '$ppl' + and lasku.factoringsiirtonumero = 0 "; + } + + $dquery = "SELECT lasku.yhtio + FROM lasku + JOIN maksuehto ON (lasku.yhtio = maksuehto.yhtio + and lasku.maksuehto = maksuehto.tunnus + and maksuehto.factoring_id = '$factoring_id') + WHERE lasku.yhtio = '$kukarow[yhtio]' + and lasku.tila = 'U' + and lasku.alatila = 'X' + and lasku.summa != 0 + and lasku.valkoodi = '$valkoodi' + $where"; + $dresult = pupe_query($dquery); + + if (mysql_num_rows($dresult) == 0) { + echo "Huono laskunumeroväli! Yhtään siirettävää laskua ei löytynyt!"; + exit; + } + + $query = "SELECT if (lasku.summa >= 0, '01', '02') tyyppi, + lasku.ytunnus, + lasku.nimi, + lasku.nimitark, + lasku.osoite, + lasku.postino, + lasku.postitp, + lasku.maa, + lasku.laskunro, + round(lasku.viikorkopros*100,0) viikorkopros, + round(abs(lasku.summa*100),0) summa, + round(abs(lasku.kasumma*100),0) kasumma, + round(abs(lasku.summa_valuutassa*100),0) summa_valuutassa, + round(abs(lasku.kasumma_valuutassa*100),0) kasumma_valuutassa, + lasku.toim_nimi, + lasku.toim_nimitark, + lasku.toim_osoite, + lasku.toim_postino, + lasku.toim_postitp, + lasku.toim_maa, + lasku.maa, + lasku.viite, + DATE_FORMAT(lasku.tapvm, '%y%m%d') tapvm, + DATE_FORMAT(lasku.erpcm, '%y%m%d') erpcm, + DATE_FORMAT(lasku.kapvm, '%y%m%d') kapvm, + lasku.tunnus, + lasku.valkoodi, + lasku.liitostunnus + FROM lasku + JOIN maksuehto ON (lasku.yhtio = maksuehto.yhtio + and lasku.maksuehto = maksuehto.tunnus + and maksuehto.factoring_id = '$factoring_id') + WHERE lasku.yhtio = '$kukarow[yhtio]' + and lasku.tila = 'U' + and lasku.alatila = 'X' + and lasku.summa != 0 + and lasku.valkoodi = '$valkoodi' + $where + ORDER BY laskunro"; + $laskures = pupe_query($query); + + if (mysql_num_rows($laskures) > 0) { + + $laskukpl = 0; + $vlaskukpl = 0; + $vlaskusum = 0; + $hlaskukpl = 0; + $hlaskusum = 0; + $laskuvirh = 0; + + echo ""; + echo ""; + echo ""; + echo "
Päivämäärä:".date("d.m.Y")."
Sopimusnumero:{$frow["sopimusnumero"]}
Siirtoluettelon numero:$dd_siirtonumero

"; + + echo ""; + echo ""; + + while ($laskurow = mysql_fetch_assoc($laskures)) { + + // Haetaan asiakkaan tiedot + $query = "SELECT * + FROM asiakas + WHERE yhtio = '$kukarow[yhtio]' + and tunnus = '$laskurow[liitostunnus]'"; + $asires = pupe_query($query); + $asirow = mysql_fetch_assoc($asires); + + // Valuuttalasku + if ($laskurow["valkoodi"] != '' and trim(strtoupper($laskurow["valkoodi"])) != trim(strtoupper($yhtiorow["valkoodi"]))) { + $laskurow["summa"] = $laskurow["summa_valuutassa"]; + $laskurow["kasumma"] = $laskurow["kasumma_valuutassa"]; + } + + if ($asirow["asiakasnro"] == 0 or !is_numeric($asirow["asiakasnro"]) or strlen($asirow["asiakasnro"]) > 6) { + $laskuvirh++; + } + + echo ""; + + $laskukpl++; + + if ($laskurow["tyyppi"] == "01") { + $vlaskukpl++; + $vlaskusum += $laskurow["summa"]; + + echo ""; + } + if ($laskurow["tyyppi"] == "02") { + $hlaskukpl++; + $hlaskusum += $laskurow["summa"]; + + echo ""; + } + + if ($asirow["asiakasnro"] == 0 or !is_numeric($asirow["asiakasnro"]) or strlen($asirow["asiakasnro"]) > 6) { + echo ""; + } + } + + if ($laskuvirh > 0) { + echo "
TyyppiLaskunumeroNimiSummaValuutta
Veloituslasku$laskurow[laskunro]$laskurow[nimi]".sprintf('%.2f', $laskurow["summa"]/100)."$laskurow[valkoodi]Hyvityslasku:$laskurow[laskunro]$laskurow[nimi]".sprintf('%.2f', $laskurow["summa"]/100)."$laskurow[valkoodi]VIRHE: Asiakasnumero: $asirow[asiakasnro] ei kelpaa! Muuta asiakkaan tietoja
"; + echo "

"; + echo "Aineistossa oli virheitä! Korjaa ne ja aja uudestaan!"; + } + else { + if ($tee_u != 'UUDELLEENLUO') { + $dquery = "UPDATE lasku, maksuehto + SET lasku.factoringsiirtonumero = '$dd_siirtonumero' + WHERE lasku.yhtio = '$kukarow[yhtio]' + and lasku.tila = 'U' + and lasku.alatila = 'X' + and lasku.summa != 0 + and lasku.laskunro >= '$ppa' + and lasku.laskunro <= '$ppl' + and lasku.factoringsiirtonumero = 0 + and lasku.valkoodi = '$valkoodi' + and lasku.yhtio = maksuehto.yhtio + and lasku.maksuehto = maksuehto.tunnus + and maksuehto.factoring_id = '$factoring_id'"; + $dresult = pupe_query($dquery); + } + + + //keksitään uudelle failille joku hyvä nimi: + $filenimi = "NordeaDirectDebit-$dd_siirtonumero.xml"; + + //kirjoitetaan faili levylle.. + $fh = fopen("dataout/".$filenimi, "w"); + + // Kirjoitetaaan XML, tehdään tästä jäsennelty aineisto. Tämä toimii paremmin mm OPn kanssa + $dom = new DOMDocument('1.0'); + $dom->preserveWhiteSpace = true; + $dom->formatOutput = true; + $dom->loadXML(utf8_encode($xml->asXML())); + fwrite($fh, ($dom->saveXML())); + fclose($fh); + + echo "
"; + + echo "Yhteensä $vlaskukpl veloituslaskua".sprintf('%.2f', $vlaskusum/100)."$laskurow[valkoodi]"; + echo "Yhteensä $hlaskukpl hyvityslaskua ".sprintf('%.2f', $hlaskusum/100)."$laskurow[valkoodi]"; + echo "Yhteensä ".sprintf('%.2f', ($vlaskusum+($hlaskusum*-1))/100)."$laskurow[valkoodi]"; + + echo ""; + echo "

"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
Tallenna siirtoaineisto levylle:
"; + } + } + else { + echo "

Yhtään siirrettävää laskua ei ole!
"; + $tee = ""; + } +} + +if ($tee != "lataa_tiedosto") { + require "inc/footer.inc"; +} diff --git a/inc/factoring.inc b/inc/factoring.inc index d33cae69ef..454aa8a77e 100644 --- a/inc/factoring.inc +++ b/inc/factoring.inc @@ -1,6 +1,6 @@ "; $jatko = 0; diff --git a/inc/factoringtarkista.inc b/inc/factoringtarkista.inc index eb290f4ead..8811c04260 100644 --- a/inc/factoringtarkista.inc +++ b/inc/factoringtarkista.inc @@ -4,5 +4,21 @@ if (!function_exists("factoringtarkista")) { function factoringtarkista(&$t, $i, $result, $tunnus, &$virhe, $trow) { global $kukarow, $yhtiorow, $alias_set; + static $directdebit; + + if (mysql_field_name($result, $i) == "factoringyhtio") { + if (substr($t[$i], -3) == "_DD") { + $directdebit = TRUE; + } + } + + if (mysql_field_name($result, $i) == "direct_debit") { + if (!empty($directdebit)) { + $t[$i] = "D"; + } + else { + $t[$i] = ""; + } + } } } diff --git a/nordeafactoring.php b/nordeafactoring.php index c7a18c9679..55654b86e0 100755 --- a/nordeafactoring.php +++ b/nordeafactoring.php @@ -219,7 +219,7 @@ echo "Siirtoluettelon numero: "; - echo "

"; + echo "

"; } if ($tee == 'TULOSTA') { diff --git a/sveafactoring.php b/sveafactoring.php index f7d5fd6f7a..1e0e245f46 100644 --- a/sveafactoring.php +++ b/sveafactoring.php @@ -241,7 +241,7 @@ echo "Siirtoluettelon numero: "; - echo "

"; + echo "

"; } if ($tee == 'TULOSTA') {