function sepa_credittransfer($laskurow, $popvm_nyt, $netotetut_rivit = '') { global $xml, $pain, $PmtInf, $yhtiorow, $kukarow; // HUOM: Tämä kuuluu PmtInf -segmentin sisään! $CdtTrfTxInf = $PmtInf->addChild('CdtTrfTxInf', ''); // CreditTransferTransaction Information $PmtId = $CdtTrfTxInf->addChild('PmtId', ''); // PaymentIdentification $InstrId = $PmtId->addChild('InstrId', "{$laskurow['tunnus']}-" . preg_replace("/[^0-9]/", "", $popvm_nyt)); // Instruction Id $EndToEndId = $PmtId->addChild('EndToEndId', "{$laskurow['tunnus']}-" . preg_replace("/[^0-9]/", "", $popvm_nyt)); // EndToEndIdentification, Pakollinen kenttä $PmtTpInf = $CdtTrfTxInf->addChild('PmtTpInf', ''); // PaymentTypeInformation // $InstrPrty = $PmtTpInf->addChild('InstrPrty', ''); // $SvcLvl = $PmtTpInf->addChild('SvcLvl', ''); // ServiceLevel // $Prtry = $SvcLvl->addChild('Prtry', ''); // Proprietary Nordea (URGP = Urgent payment) // $Cd = $SvcLvl->addChild('Cd', 'SEPA'); // $LclInstrm = $PmtTpInf->addChild('LclInstrm', ''); // $Cd = $LclInstrm->addChild('Cd', ''); // $CtgyPurp = $PmtTpInf->addChild('CtgyPurp', ''); // CategoryPurpose (INTC = Intercompany eli Nordea -> Nordea) $Amt = $CdtTrfTxInf->addChild('Amt', ''); // Amount if ($laskurow['alatila'] != 'K') { $InstdAmt = $Amt->addChild('InstdAmt', round($laskurow['summa'], 2)); // InstructedAmount, Pakollinen kenttä } else { $InstdAmt = $Amt->addChild('InstdAmt', round($laskurow['summa'] - $laskurow['kasumma'], 2)); // InstructedAmount, Pakollinen kenttä } $InstdAmt->addAttribute('Ccy', $laskurow['valkoodi']); // Currency, Pakollinen attribute // $XchgRateInf = $CdtTrfTxInf->addChild('XchgRateInf', ''); // ExchangeRateInformation // $XchgRate = $XchgRateInf->addChild('XchgRate', ''); // $RateTp = $XchgRateInf->addChild('RateTp', ''); // $CtrctId = $XchgRateInf->addChild('CtrctId', ''); // ContractIdentification (FX trade reference provided the FX rate is agreed in advance) // $ChrgBr = $CdtTrfTxInf->addChild('ChrgBr', 'SLEV'); // $ChqInstr = $CdtTrfTxInf->addChild('ChqInstr', ''); // $ChqTp = $ChqInstr->addChild('ChqTp', ''); // $DlvryMtd = $ChqInstr->addChild('DlvryMtd', ''); // $Cd = $DlvryMtd->addChild('Cd', ''); // $UltmtDbtr = $CdtTrfTxInf->addChild('UltmtDbtr', ''); // UltimateDebtor (käytetään vain jos eri kuin Debtor) // $Nm = $UltmtDbtr->addChild('Nm', ''); // Name // $PstlAdr = $UltmtDbtr->addChild('PstlAdr', ''); // $AdrTp = $PstlAdr->addChild('AdrTp', ''); // $AdrLine = $PstlAdr->addChild('AdrLine', ''); // $StrtNm = $PstlAdr->addChild('StrtNm', ''); // $BldgNb = $PstlAdr->addChild('BldgNb', ''); // $PstCd = $PstlAdr->addChild('PstCd', ''); // $TwnNm = $PstlAdr->addChild('TwnNm', ''); // $CtrySubDvsn = $PstlAdr->addChild('CtrySubDvsn', ''); // $Ctry = $PstlAdr->addChild('Ctry', ''); // $Id = $UltmtDbtr->addChild('Id', ''); // $OrgId = $Id->addChild('OrgId', ''); // $BIC = $OrgId->addChild('BIC', ''); // $IBEI = $OrgId->addChild('IBEI', ''); // $BEI = $OrgId->addChild('BEI', ''); // $EANGLN = $OrgId->addChild('EANGLN', ''); // $USCHU = $OrgId->addChild('USCHU', ''); // $DUNS = $OrgId->addChild('DUNS', ''); // $BkPtyId = $OrgId->addChild('BkPtyId', ''); // $TaxIdNb = $OrgId->addChild('TaxIdNb', ''); // $PrtryId = $OrgId->addChild('PrtryId', ''); // $Id = $PrtryId->addChild('Id', ''); // $Issr = $PrtryId->addChild('Issr', ''); // $CtryOfRes = $UltmtDbtr->addChild('CtryOfRes', ''); // $IntrmyAgt1 = $CdtTrfTxInf->addChild('IntrmyAgt1', ''); // $FinInstnId = $IntrmyAgt1->addChild('FinInstnId', ''); // $BIC = $FinInstnId->addChild('BIC', ''); // $IntrmyAgt1Acct = $CdtTrfTxInf->addChild('IntrmyAgt1Acct', ''); // $Id = $IntrmyAgt1Acct->addChild('Id', ''); // $IBAN = $Id->addChild('IBAN', ''); // $Ccy = $IntrmyAgt1Acct->addChild('Ccy', ''); // $Nm = $IntrmyAgt1Acct->addChild('Nm', ''); // $IntrmyAgt2 = $CdtTrfTxInf->addChild('IntrmyAgt2', ''); // $FinInstnId = $IntrmyAgt2->addChild('FinInstnId', ''); // $BIC = $FinInstnId->addChild('BIC', ''); // $IntrmyAgt2Acct = $CdtTrfTxInf->addChild('IntrmyAgt2Acct', ''); // $Id = $IntrmyAgt2Acct->addChild('Id', ''); // $IBAN = $Id->addChild('IBAN', ''); // $Ccy = $IntrmyAgt2Acct->addChild('Ccy', ''); // $Nm = $IntrmyAgt2Acct->addChild('Nm', ''); $CdtrAgt = $CdtTrfTxInf->addChild('CdtrAgt', ''); // CreditorAgent $FinInstnId = $CdtrAgt->addChild('FinInstnId', ''); // FinancialInstitutionIdentification $BIC = $FinInstnId->addChild('BIC', $laskurow['swift']); // BIC if ($laskurow['clearing'] != '') { $CmbndId = $FinInstnId->addChild('CmbndId', ''); // CombinedIdentification $ClrSysMmbId = $CmbndId->addChild('ClrSysMmbId', ''); // ClearingSystemMemberIdentification $ClrSysMmbId->addChild('Id', sprintf("%-1.35s", $laskurow['clearing'])); // Identification $Nm = $CmbndId->addChild('Nm', sprintf("%-1.70s", $laskurow['pankki1'])); // Name (Bank's) $PstlAdr = $CmbndId->addChild('PstlAdr', ''); // Postal Address $PstlAdr->addChild('CtrySubDvsn', sprintf("%-1.35s", $laskurow['pankki2'])); // CountrySubDivision $PstlAdr->addChild('Ctry', ''); // Country } // $CdtrAgtAcct = $CdtTrfTxInf->addChild('CdtrAgtAcct', ''); // $Id = $CdtrAgtAcct->addChild('Id', ''); // $IBAN = $Id->addChild('IBAN', ''); // $Ccy = $CdtrAgtAcct->addChild('Ccy', ''); // $Nm = $CdtrAgtAcct->addChild('Nm', ''); $Cdtr = $CdtTrfTxInf->addChild('Cdtr', ''); // Creditor // jos pankkihaltijan nimi on syötetty, laitetaan se nimen tilalle if (trim($laskurow['pankki_haltija']) != '') { $Nm = $Cdtr->addChild('Nm', sprintf("%-1.70s", str_replace("&", "&", $laskurow['pankki_haltija']))); // Name, Pakollinen kenttä 1-70 } else { $Nm = $Cdtr->addChild('Nm', sprintf("%-1.70s", str_replace("&", "&", trim($laskurow['nimi'] . " " . $laskurow['nimitark'])))); // Name, Pakollinen kenttä 1-70 } $PstlAdr = $Cdtr->addChild('PstlAdr', ''); // PostalAddress // $AdrTp = $PstlAdr->addChild('AdrTp', ''); // Danske hylkää (joskus) aineistot, jos on vaan space, laitetaan tyhjässä tapauksessa defaultteja $_osoite = trim($laskurow['osoite']) == '' ? '-' : $laskurow['osoite']; $_postino = trim($laskurow['postino']) == '' ? '-' : $laskurow['postino']; $_postitp = trim($laskurow['postitp']) == '' ? '-' : $laskurow['postitp']; $_maa = trim($laskurow['maa']) == '' ? 'FI' : $laskurow['maa']; $AdrLine = $PstlAdr->addChild('AdrLine', sprintf("%-1.70s", $_osoite)); // AddressLine 1-70 $AdrLine = $PstlAdr->addChild('AdrLine', sprintf("%-1.70s", "{$_maa}-{$_postino}-{$_postitp}")); $StrtNm = $PstlAdr->addChild('StrtNm', sprintf("%-1.70s", $_osoite)); // StreetName 1-70 // $BldgNb = $PstlAdr->addChild('BldgNb', ''); // BuildingNumber $PstCd = $PstlAdr->addChild('PstCd', sprintf("%-1.16s", "{$_maa}-{$_postino}")); // PostCode 1-16 $TwnNm = $PstlAdr->addChild('TwnNm', sprintf("%-1.35s", $_postitp)); // TownName 1-35 // $CtrySubDvsn = $PstlAdr->addChild('CtrySubDvsn', ''); $Ctry = $PstlAdr->addChild('Ctry', sprintf("%-2.2s", $_maa)); // Country // $Id = $Cdtr->addChild('Id', ''); // $OrgId = $Id->addChild('OrgId', ''); // $BIC = $OrgId->addChild('BIC', ''); // $IBEI = $OrgId->addChild('IBEI', ''); // $BEI = $OrgId->addChild('BEI', ''); // $EANGLN = $OrgId->addChild('EANGLN', ''); // $USCHU = $OrgId->addChild('USCHU', ''); // $DUNS = $OrgId->addChild('DUNS', ''); // $BkPtyId = $OrgId->addChild('BkPtyId', $laskurow['ytunnus']); // $TaxIdNb = $OrgId->addChild('TaxIdNb', ''); // $PrtryId = $OrgId->addChild('PrtryId', ''); // $Id = $PrtryId->addChild('Id', ''); // $Issr = $PrtryId->addChild('Issr', ''); $CtryOfRes = $Cdtr->addChild('CtryOfRes', sprintf("%-2.2s", $_maa)); $CdtrAcct = $CdtTrfTxInf->addChild('CdtrAcct', ''); // CreditorAccount $Id = $CdtrAcct->addChild('Id', ''); // Identification if (tarkista_sepa($laskurow["iban_maa"]) !== FALSE) { $Id->addChild('IBAN', $laskurow['ultilno']); // IBAN = kotimaa, BBAN = ulkomaa, Pakollinen tieto } else { $Id->addChild('BBAN', $laskurow['ultilno']); // IBAN = kotimaa, BBAN = ulkomaa, Pakollinen tieto } // $Ccy = $CdtrAcct->addChild('Ccy', ''); // $Nm = $CdtrAcct->addChild('Nm', ''); // $UltmtCdtr = $CdtTrfTxInf->addChild('UltmtCdtr', ''); // $Nm = $UltmtCdtr->addChild('Nm', ''); // $PstlAdr = $UltmtCdtr->addChild('PstlAdr', ''); // $AdrTp = $PstlAdr->addChild('AdrTp', ''); // $AdrLine = $PstlAdr->addChild('AdrLine', ''); // $StrtNm = $PstlAdr->addChild('StrtNm', ''); // $BldgNb = $PstlAdr->addChild('BldgNb', ''); // $PstCd = $PstlAdr->addChild('PstCd', ''); // $TwnNm = $PstlAdr->addChild('TwnNm', ''); // $CtrySubDvsn = $PstlAdr->addChild('CtrySubDvsn', ''); // $Ctry = $PstlAdr->addChild('Ctry', ''); // $Id = $UltmtCdtr->addChild('Id', ''); // $OrgId = $Id->addChild('OrgId', ''); // $BIC = $OrgId->addChild('BIC', ''); // $IBEI = $OrgId->addChild('IBEI', ''); // $BEI = $OrgId->addChild('BEI', ''); // $EANGLN = $OrgId->addChild('EANGLN', ''); // $USCHU = $OrgId->addChild('USCHU', ''); // $DUNS = $OrgId->addChild('DUNS', ''); // $BkPtyId = $OrgId->addChild('BkPtyId', ''); // $TaxIdNb = $OrgId->addChild('TaxIdNb', ''); // $PrtryId = $OrgId->addChild('PrtryId', ''); // $Id = $PrtryId->addChild('Id', ''); // $Issr = $PrtryId->addChild('Issr', ''); // $CtryOfRes = $UltmtCdtr->addChild('CtryOfRes', ''); // $InstrForDbtrAgt = $CdtTrfTxInf->addChild('InstrForDbtrAgt', ''); // $Purp = $CdtTrfTxInf->addChild('Purp', ''); // $Cd = $Purp->addChild('Cd', ''); // $RgltryRptg = $CdtTrfTxInf->addChild('RgltryRptg', ''); // $DbtCdtRptgInd = $RgltryRptg->addChild('DbtCdtRptgInd', ''); // $Authrty = $RgltryRptg->addChild('Authrty', ''); // $AuthrtyNm = $Authrty->addChild('AuthrtyNm', ''); // $AuthrtyCtry = $Authrty->addChild('AuthrtyCtry', ''); // $RgltryDtls = $RgltryRptg->addChild('RgltryDtls', ''); // $Cd = $RgltryDtls->addChild('Cd', ''); // $Amt = $RgltryDtls->addChild('Amt', ''); // $Inf = $RgltryDtls->addChild('Inf', ''); $RmtInf = $CdtTrfTxInf->addChild('RmtInf', ''); // RemittanceInformation if ($yhtiorow['maa'] == 'EE' and strlen(trim($laskurow["laskunro"])) > 0 and $laskurow['viesti'] != "") { $reference_number_and_message = "/RFB/" . $laskurow['laskunro'] . "/TXT/" . $laskurow['viesti']; $Ustrd = $RmtInf->addChild('Ustrd', sprintf("%-1.140s", $reference_number_and_message)); // Unstructured (max 140 char) } else { if (strlen(trim($laskurow["viite"])) > 0 and $laskurow["tilaustyyppi"] == 'M') { // Matkalaskuilla viite viestiksi sanomalle $Ustrd = $RmtInf->addChild('Ustrd', sprintf("%-1.140s", $laskurow['viite'])); // Unstructured (max 140 char) } elseif (strlen(trim($laskurow["viite"])) > 0) { $Strd = $RmtInf->addChild('Strd', ''); // Structured (Max 9 occurrences) // $RfrdDocInf = $Strd->addChild('RfrdDocInf', ''); // ReferredDocumentInformation // $RfrdDocTp = $RfrdDocInf->addChild('RfrdDocTp', ''); // $Cd = $RfrdDocTp->addChild('Cd', ''); // $RfrdDocNb = $RfrdDocInf->addChild('RfrdDocNb', ''); // $RfrdDocRltdDt = $Strd->addChild('RfrdDocRltdDt', ''); // $RfrdDocAmt = $Strd->addChild('RfrdDocAmt', ''); // $RmtdAmt = $RfrdDocAmt->addChild('RmtdAmt', ''); $CdtrRefInf = $Strd->addChild('CdtrRefInf', ''); // CreditorReferenceInformation $CdtrRefTp = $CdtrRefInf->addChild('CdtrRefTp', ''); // CreditorReferenceType $Cd = $CdtrRefTp->addChild('Cd', 'SCOR'); // Code (SCOR = Structured Communication Reference) $CdtrRef = $CdtrRefInf->addChild('CdtrRef', sprintf("%-1.35s", $laskurow['viite'])); // CreditorReference // $AddtlRmtInf = $Strd->addChild('AddtlRmtInf', ''); } elseif ($laskurow['viesti'] != "") { $Ustrd = $RmtInf->addChild('Ustrd', sprintf("%-1.140s", $laskurow['viesti'])); // Unstructured (max 140 char) } } // jos tämä muuttuja on setattu, on tämä ko. lasku/tapahtuma netotettu näistä tunnuksista! if ($netotetut_rivit != "") { $query = "SELECT *\n FROM lasku\n WHERE yhtio = '{$kukarow['yhtio']}'\n AND tunnus in ({$netotetut_rivit})"; $result = pupe_query($query); while ($nettorow = mysql_fetch_assoc($result)) { // Jos laskunumero on syötetty, lisätään se viestiin mukaan if ($nettorow['laskunro'] != 0 and $nettorow['laskunro'] != $nettorow['viesti']) { $nettorow['viesti'] = trim($nettorow['viesti']) == "" ? $nettorow['laskunro'] : trim($nettorow['viesti'] . " " . $nettorow['laskunro']); } if ($nettorow["summa"] < 0) { $code = "CREN"; // hyvityslasku } else { $code = "CINV"; // veloituslasku } $Strd = $RmtInf->addChild('Strd', ''); // Structured (Max 9 occurrences) $RfrdDocInf = $Strd->addChild('RfrdDocInf', ''); // ReferredDocumentInformation $RfrdDocTp = $RfrdDocInf->addChild('RfrdDocTp', ''); // ReferredDocumentType $Cd = $RfrdDocTp->addChild('Cd', $code); // Code, Pakollinen tieto (CINV = Commercial invoice, CREN = Credit note) // $RfrdDocNb = $RfrdDocInf->addChild('RfrdDocNb', ''); // $RfrdDocRltdDt = $Strd->addChild('RfrdDocRltdDt', ''); $RfrdDocAmt = $Strd->addChild('RfrdDocAmt', ''); // ReferredDocumentAmount if ($nettorow["summa"] < 0) { $RmtdAmt = $RfrdDocAmt->addChild('CdtNoteAmt', abs($nettorow["summa"])); // CreditNoteAmount } else { if ($nettorow['alatila'] != 'K') { $RmtdAmt = $RfrdDocAmt->addChild('RmtdAmt', $nettorow["summa"]); // RemittedAmount } else { $RmtdAmt = $RfrdDocAmt->addChild('RmtdAmt', round($nettorow["summa"] - $nettorow['kasumma'], 2)); // RemittedAmount } } $RmtdAmt->addAttribute('Ccy', $nettorow['valkoodi']); // Attribute Currency if (strlen(trim($nettorow["viite"])) > 0) { $CdtrRefInf = $Strd->addChild('CdtrRefInf', ''); // CreditorReferenceInformation $CdtrRefTp = $CdtrRefInf->addChild('CdtrRefTp', ''); // CreditorReferenceType $Cd = $CdtrRefTp->addChild('Cd', 'SCOR'); // Code (SCOR = Structured Communication Reference) $CdtrRef = $CdtrRefInf->addChild('CdtrRef', sprintf("%-1.35s", $nettorow['viite'])); // CreditorReference } elseif ($nettorow["viesti"] != "") { $AddtlRmtInf = $Strd->addChild('AddtlRmtInf', sprintf("%-1.140s", $nettorow['viesti'])); // AdditionalRemittanceInformation } } } }
$trow['swift'] = $iban['swift']; $pankkitiliok = TRUE; } } elseif (strtoupper($yhtiorow['maa']) == 'SE' and $trow['tilinumero'] != '') { // Ruotsin keississä ei tehdä Bankgirolle eikä Plusgirolle tsekkiä $pankkitiliok = TRUE; } // IBAN / BBAN if ($trow['ultilno'] != "") { // Vaaditaan isot kirjaimet $trow['ultilno'] = strtoupper($trow['ultilno']); $trow['swift'] = strtoupper($trow['swift']); // Jos SEPA-maa, tarkistetaan IBAN if (tarkista_sepa($ibanmaa) and tarkista_iban($trow['ultilno']) == $trow['ultilno']) { $pankkitiliok = TRUE; } elseif (!tarkista_sepa($ibanmaa) and tarkista_bban($trow['ultilno']) !== FALSE) { $pankkitiliok = TRUE; } } if (!$pankkitiliok) { $errormsg .= "<font class='error'>" . t("Pankkitili puuttuu tai on virheellinen") . "!</font><br>"; $tee = 'E'; } } if ($tee == 'Y') { if ($yhtiorow['skannatut_laskut_polku'] != '' and $nayta_skannattu_lasku != "") { $muutparametrit = $nayta_skannattu_lasku; } require "inc/kevyt_toimittajahaku.inc"; // Toimittaja löytyi if ($toimittajaid != 0) {