private void cmdSave_Click(object sender, EventArgs e) { tblBetaling betaling = (tblBetaling)olvBetalingen.SelectedObject; if (betaling == null) { return; } SetChangeMode(false); object myCrediteur = cboCrediteur.SelectedObject; if (myCrediteur is tblCrediteur) { tblCrediteur c = (tblCrediteur)myCrediteur; betaling.BIC_Creditor = c.BIC; betaling.IBAN_Creditor = c.IBAN; } if (myCrediteur is tblLid) { tblLid l = (tblLid)myCrediteur; betaling.BIC_Creditor = l.BIC; betaling.IBAN_Creditor = l.IBAN; } betaling.AanmaakDatum = dtpAanmaakDatum.Value; betaling.EndToEndId = txtEndToEndid.Text.RemoveNonNumeric().Trim(); betaling.GewensteVerwerkingsDatum = dtpGewensteDatum.Value; betaling.Omschrijving = txtOmschrijving.Text; betaling.TotaalBedrag = txtTotaalbedrag.ToFromDecimal; betaling.TypeBetaling = cboTypeRekening.SelectedIndex; betaling.Verstuurd = ckbVerstuurd.Checked; betaling.VerstuurdDatum = dtpDatumVerstuurd.Value; betaling.Crediteur = cboCrediteur.Text; dataAdaptor.UpdateBetalingen(betalingen); dataAdaptor.CommitTransaction(true); olvBetalingen.RefreshObject(olvBetalingen.SelectedObject); toolStripStatusLabel1.Text = "Wijziging bewaard"; }
/// <summary> /// Het aanmaken van het betaling bestand. /// De list selectedInc moet gesorteed zijn op 'geincasseerd' omdat we hierop batchen /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmdMaakbestand_Click(object sender, EventArgs e) { try { if (betalingen.Count == 0) { MessageBox.Show("Geen betalingen", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //dit fileSeqnr gebruiken we om in de db terug te schrijven zodat we weten in welk bestand een betaling zit // dit verder niet gebruikt maar miscchien later handig voor het nazoeken. fileSeqnr = txtFileSeqnrB.Text.IsNumeric() ? Convert.ToInt32(txtFileSeqnrB.Text) : 0; string outputfile = txtOutputLocationIncB.Text + @"\" + txtFilePrefixB.Text + fileSeqnr.ToString("000") + ".xml"; #region BetalingVerslag init outputverslag = txtOutputLocationIncB.Text + @"\" + txtFilePrefixB.Text + fileSeqnr.ToString("000") + "_OutputVerslag.txt"; betalingVerslag.AppendLine("Betalingverslag: " + outputfile); betalingVerslag.AppendLine(); #endregion #region Template voor betaling //Ik maak hier eerst de template voor de credit's. StringBuilder templateBetaling = new StringBuilder(); templateBetaling.AppendLine(" <CdtTrfTxInf>"); templateBetaling.AppendLine(" <PmtId>"); templateBetaling.AppendLine(" <EndToEndId>***EndToEndId***</EndToEndId>"); templateBetaling.AppendLine(" </PmtId>"); templateBetaling.AppendLine(" <Amt>"); templateBetaling.AppendLine(@" <InstdAmt Ccy=""EUR"">***InstdAmt***</InstdAmt>"); templateBetaling.AppendLine(" </Amt>"); templateBetaling.AppendLine(" <CdtrAgt>"); templateBetaling.AppendLine(" <FinInstnId>"); templateBetaling.AppendLine(" <BIC>***BIC***</BIC>"); templateBetaling.AppendLine(" </FinInstnId>"); templateBetaling.AppendLine(" </CdtrAgt>"); templateBetaling.AppendLine(" <Cdtr>"); templateBetaling.AppendLine(" <Nm>***Nm***</Nm>"); templateBetaling.AppendLine(" </Cdtr>"); templateBetaling.AppendLine(" <CdtrAcct>"); templateBetaling.AppendLine(" <Id>"); templateBetaling.AppendLine(" <IBAN>***IBAN***</IBAN>"); templateBetaling.AppendLine(" </Id>"); templateBetaling.AppendLine(" </CdtrAcct>"); templateBetaling.AppendLine(" <RmtInf>"); templateBetaling.Append(" ***RmtInf***"); templateBetaling.AppendLine(" </RmtInf>"); templateBetaling.AppendLine(" </CdtTrfTxInf>"); #endregion #region Template on batchlevel for Payment Info // Ik maak hier de template voor de batches. StringBuilder templateBatch = new StringBuilder(); templateBatch.AppendLine(" <PmtInf>"); templateBatch.AppendLine(" <PmtInfId>***PmtInfId***</PmtInfId> "); templateBatch.AppendLine(" <PmtMtd>TRF</PmtMtd>"); templateBatch.AppendLine(" <BtchBookg>true</BtchBookg>"); templateBatch.AppendLine(" <NbOfTxs>***NbOfTxs***</NbOfTxs>"); templateBatch.AppendLine(" <CtrlSum>***InstdAmt***</CtrlSum>"); templateBatch.AppendLine(" <PmtTpInf>"); templateBatch.AppendLine(" <SvcLvl>"); templateBatch.AppendLine(" <Cd>SEPA</Cd>"); templateBatch.AppendLine(" </SvcLvl>"); templateBatch.AppendLine(" <CtgyPurp>"); templateBatch.AppendLine(" <Cd>OTHR</Cd>"); templateBatch.AppendLine(" </CtgyPurp>"); templateBatch.AppendLine(" </PmtTpInf>"); templateBatch.AppendLine(" <ReqdExctnDt>***ReqdExctnDt***</ReqdExctnDt>"); templateBatch.AppendLine(" <Dbtr>"); templateBatch.AppendLine(" <Nm>***Nm***</Nm>"); templateBatch.AppendLine(" </Dbtr>"); templateBatch.AppendLine(" <DbtrAcct>"); templateBatch.AppendLine(" <Id>"); templateBatch.AppendLine(" <IBAN>***IBAN***</IBAN>"); templateBatch.AppendLine(" </Id>"); templateBatch.AppendLine(" <Ccy>EUR</Ccy>"); templateBatch.AppendLine(" </DbtrAcct>"); templateBatch.AppendLine(" <DbtrAgt>"); templateBatch.AppendLine(" <FinInstnId>"); templateBatch.AppendLine(" <BIC>***BIC***</BIC>"); templateBatch.AppendLine(" </FinInstnId>"); templateBatch.AppendLine(" </DbtrAgt>"); templateBatch.AppendLine(" <ChrgBr>SLEV</ChrgBr>"); templateBatch.Append("***insertCred****"); templateBatch.AppendLine(" </PmtInf>"); #endregion #region Template on file level StringBuilder templateFile = new StringBuilder(); templateFile.AppendLine(@"<Document xmlns=""urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">"); templateFile.AppendLine(" <CstmrCdtTrfInitn>"); templateFile.AppendLine(" <GrpHdr>"); templateFile.AppendLine(" <MsgId>***MsgId***</MsgId>"); templateFile.AppendLine(" <CreDtTm>***CreDtTm***</CreDtTm>"); templateFile.AppendLine(" <NbOfTxs>***NbOfTxs***</NbOfTxs>"); templateFile.AppendLine(" <InitgPty>"); templateFile.AppendLine(" <Nm>***InitgPtyNm***</Nm>"); templateFile.AppendLine(" <Id>"); templateFile.AppendLine(" <OrgId>"); templateFile.AppendLine(" <Othr>"); templateFile.AppendLine(" <Id>***InitgPtyId***</Id>"); templateFile.AppendLine(" </Othr>"); templateFile.AppendLine(" </OrgId>"); templateFile.AppendLine(" </Id>"); templateFile.AppendLine(" </InitgPty>"); templateFile.AppendLine(" </GrpHdr>"); templateFile.Append("***insertBET***"); templateFile.AppendLine(" </CstmrCdtTrfInitn>"); templateFile.AppendLine("</Document>"); #endregion decimal amtBetalingenInBatch = 0M; int nbrBetalingenInBatch = 0; int nbrBetalingenInFile = 0; string batchName = string.Empty; DateTime batchDatum = new DateTime().Date; //Sorteren op gewenste uitvoer datum en selecteerd alleen niet verstuurde IEnumerable <tblBetaling> OnverstuurdeBetalingen = from betaling in betalingen where !betaling.Verstuurd orderby betaling.GewensteVerwerkingsDatum select betaling; //Sorteren op gewenste uitvoer datum //betalingen.Sort(new BetalingenComparer("GewensteDatum")); BetalingenLijst betalingenPerDatum = new BetalingenLijst(); List <BetalingenLijst> betalingPerDatumLijst = new List <BetalingenLijst>(); foreach (tblBetaling bet in OnverstuurdeBetalingen) { if (bet.GewensteVerwerkingsDatum.Date == batchDatum.Date) { betalingenPerDatum.Add(bet); } else { if (betalingenPerDatum.Count > 0) { betalingPerDatumLijst.Add(betalingenPerDatum); } betalingenPerDatum = new BetalingenLijst(); betalingenPerDatum.Add(bet); batchDatum = bet.GewensteVerwerkingsDatum.Date; } } betalingPerDatumLijst.Add(betalingenPerDatum); StringBuilder sbrBatches = new StringBuilder(); foreach (BetalingenLijst bl in betalingPerDatumLijst) { StringBuilder sbrBetalingenInABatch = new StringBuilder(); foreach (tblBetaling betaling in bl) { #region Create betaling from template replacing placeholders StringBuilder sbrBetaling = new StringBuilder(templateBetaling.ToString()); sbrBetaling.Replace("***EndToEndId***", "Ref: " + betaling.EndToEndId); sbrBetaling.Replace("***InstdAmt***", betaling.TotaalBedrag.ToXMLString()); sbrBetaling.Replace("***BIC***", betaling.BIC_Creditor); sbrBetaling.Replace("***Nm***", betaling.Crediteur); sbrBetaling.Replace("***IBAN***", betaling.IBAN_Creditor); StringBuilder RmtInf = new StringBuilder(); if (betaling.Omschrijving == string.Empty) { RmtInf.AppendLine("<Strd>"); RmtInf.AppendLine(" <CdtrRefInf>"); RmtInf.AppendLine(" <Tp>"); RmtInf.AppendLine(" <CdOrPrtry>"); RmtInf.AppendLine(" <Cd>SCOR</Cd>"); RmtInf.AppendLine(" </CdOrPrtry>"); RmtInf.AppendLine(" </Tp>"); RmtInf.AppendLine(" <Ref>" + betaling.EndToEndId + "</Ref>"); RmtInf.AppendLine(" </CdtrRefInf>"); RmtInf.AppendLine(" </Strd>"); } else { RmtInf.AppendLine("<Ustrd>" + betaling.Omschrijving + "</Ustrd>"); } sbrBetaling.Replace("***RmtInf***", RmtInf.ToString()); #endregion sbrBetalingenInABatch.Append(sbrBetaling.ToString()); nbrBetalingenInBatch++; nbrBetalingenInFile++; amtBetalingenInBatch += betaling.TotaalBedrag; regelVerslag.Append(betaling.Crediteur.PadRight(30)); regelVerslag.Append(betaling.GewensteVerwerkingsDatum.ToShortDateString().PadRight(15)); regelVerslag.Append(betaling.TotaalBedrag.ToEuroString().PadRight(12)); if (betaling.Omschrijving == string.Empty) { regelVerslag.Append(betaling.FormattedEndToEndId.PadRight(30)); } else { regelVerslag.Append(betaling.Omschrijving.PadRight(30)); } regelVerslag.AppendLine(); betaling.Verstuurd = true; betaling.VerstuurdDatum = DateTime.Now; betaling.ExtraB = txtFilePrefixB.Text + fileSeqnr.ToString("000"); } StringBuilder B = CreateBatchHeader(templateBatch, sbrBetalingenInABatch, nbrBetalingenInBatch, amtBetalingenInBatch, batchDatum); sbrBatches.Append(B.ToString()); } // batch (mits gevuld) worden hier in de body geplaatst templateFile.Replace("***MsgId***", param.ClubNameShort + " betaling " + fileSeqnr.ToString("000")); templateFile.Replace("***CreDtTm***", DateTime.Now.ToString("s")); templateFile.Replace("***NbOfTxs***", nbrBetalingenInFile.ToString()); templateFile.Replace("***InitgPtyNm***", param.ClubNameLong); templateFile.Replace("***InitgPtyId***", param.KvK); templateFile.Replace("***insertBET***", sbrBatches.ToString()); #region replace unwanted characters // We vervangen niet toegestane tekens. // Wie weet een mooiere methode? templateFile.Replace("À", "A"); templateFile.Replace("Á", "A"); templateFile.Replace("Â", "A"); templateFile.Replace("Ã", "A"); templateFile.Replace("Ä", "A"); templateFile.Replace("Å", "A"); templateFile.Replace("Æ", "AE"); templateFile.Replace("Ç", "C"); templateFile.Replace("È", "E"); templateFile.Replace("É", "E"); templateFile.Replace("Ê", "E"); templateFile.Replace("Ë", "E"); templateFile.Replace("Ì", "I"); templateFile.Replace("Í", "I"); templateFile.Replace("Î", "I"); templateFile.Replace("Ï", "I"); templateFile.Replace("Ð", "D"); templateFile.Replace("Ñ", "N"); templateFile.Replace("Ò", "O"); templateFile.Replace("Ó", "O"); templateFile.Replace("Ô", "O"); templateFile.Replace("Õ", "O"); templateFile.Replace("Ö", "O"); templateFile.Replace("Ø", "O"); templateFile.Replace("Ù", "U"); templateFile.Replace("Ú", "U"); templateFile.Replace("Û", "U"); templateFile.Replace("Ü", "U"); templateFile.Replace("ß", "ss"); templateFile.Replace("à", "a"); templateFile.Replace("á", "a"); templateFile.Replace("â", "a"); templateFile.Replace("ã", "a"); templateFile.Replace("ä", "a"); templateFile.Replace("å", "a"); templateFile.Replace("æ", "ae"); templateFile.Replace("ç", "c"); templateFile.Replace("è", "e"); templateFile.Replace("é", "e"); templateFile.Replace("ê", "e"); templateFile.Replace("ë", "e"); templateFile.Replace("ì", "i"); templateFile.Replace("í", "i"); templateFile.Replace("î", "i"); templateFile.Replace("ï", "i"); templateFile.Replace("ð", "o"); templateFile.Replace("ñ", "n"); templateFile.Replace("ò", "o"); templateFile.Replace("ó", "o"); templateFile.Replace("ô", "o"); templateFile.Replace("õ", "o"); templateFile.Replace("ö", "o"); templateFile.Replace("ø", "o"); templateFile.Replace("ù", "u"); templateFile.Replace("ú", "u"); templateFile.Replace("û", "u"); templateFile.Replace("ü", "u"); templateFile.Replace("ý", "u"); templateFile.Replace("ÿ", "y"); templateFile.Replace("ÿ", "y"); templateFile.Replace("€", "E"); #endregion // En klaar is kees. Nu het bestand inschrijven. StreamWriter swOutput = new StreamWriter(outputfile); swOutput.WriteLine(templateFile.ToString()); swOutput.Flush(); swOutput.Close(); swOutput.Dispose(); StreamWriter swVerslag = new StreamWriter(outputverslag); swVerslag.WriteLine(betalingVerslag.ToString()); swVerslag.Flush(); swVerslag.Close(); swVerslag.Dispose(); if (chkPrintVerslagB.Checked) { fileToPrint = new System.IO.StreamReader(outputverslag); printFont = new System.Drawing.Font("Courier New", 8); printDocument1.DocumentName = "Betaling Verslag"; printDocument1.Print(); fileToPrint.Close(); } #endregion // We controleren nog even of het bestand aan het schema voldoet. CheckPain(outputfile); fileSeqnr++; txtFileSeqnrB.Text = fileSeqnr.ToString(); dataAdaptor.UpdateBetalingen(betalingen); dataAdaptor.CommitTransaction(true); MessageBox.Show("Bestand aangemaakt: " + outputfile + "\nAantal betaling's: " + nbrBetalingenInFile.ToString(), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); cmdMaakbestand.Enabled = false; } catch (Exception ex) { GuiRoutines.ExceptionMessageBox(this, ex); } }