Example #1
0
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
            }
        }
    }
}
Example #2
0
            $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) {