using BeWo.Data.Entities; using BeWo.Data.Models; using BeWo.Service.Plugins; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.GkvAbrechnung; using BS.Shared.Extensions; using DevExpress.XtraPrinting.Drawing; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BeWo.Report.ReportObjects { public class GkvAbrechnungRO : AbstractBeWoReportObject { public string SenderOrganisationName { get; set; } public string SenderStreet { get; set; } public string SenderPostCodeAndTown { get; set; } public string SenderPhone { get; set; } public string SenderFax { get; set; } public string SenderMail { get; set; } public string SenderWebsite { get; set; } public string SenderContactPerson { get; set; } public string SenderBankName { get; set; } public string SenderBankIBAN { get; set; } public string SenderBankBIC { get; set; } public string ReceiverDatenannahmestelle { get; set; } public string ReceiverContactPerson { get; set; } public string ReceiverDivision { get; set; } public string ReceiverStreet { get; set; } public string ReceiverPostCodeAndTown { get; set; } public string KrankenkasseIK { get; set; } public string KrankenkasseName { get; set; } public string SenderIK { get; set; } public string Rechnungsnummer { get; set; } public string Rechnungsdatum { get; set; } public string AnzahlDerUrbelege { get; set; } public InvoiceBaseDC InvoiceBase { get; set; } public ImageSource Logo { get; set; } public static GkvAbrechnungRO Create(GkvAbrechnungDC abrechnung, Mandator mandator, Employee employee, AddressInformation addressInformation) { var protokoll = (GkvTransferProtokollDC)abrechnung.LastTransferProtokoll; var organisation = abrechnung.Organisation; var invoicebase = abrechnung.InvoiceBases.First(); var result = new GkvAbrechnungRO(); result.SenderOrganisationName = addressInformation.OrganisationName; result.SenderStreet = addressInformation.Street; result.SenderPostCodeAndTown = $"{addressInformation.PostCode} {addressInformation.Town}"; result.SenderWebsite = addressInformation.Website; result.SenderBankName = mandator.BankAccount.BankName; result.SenderBankIBAN = mandator.BankAccount.IBAN; result.SenderBankBIC = mandator.BankAccount.Bic; var person = mandator.SoziotherapieAnsprechpartner?.Person ?? employee.Person; result.SenderContactPerson = person.FirstNameLastName; result.SenderPhone = addressInformation.Phone; result.SenderFax = addressInformation.Fax; result.SenderMail = addressInformation.Mail; var receiver_first = invoicebase.RecipientPersonFirstName; var receiver_last = invoicebase.RecipientPersonLastName; var receiver_first_last = receiver_first.ToFormatFollows(receiver_last); var receiver_postcode = invoicebase.RecipientPostCode; var receiver_town = invoicebase.RecipientTown; var receiver_postcode_town = receiver_postcode.ToFormatFollows(receiver_town); result.ReceiverDatenannahmestelle = invoicebase.RecipientOrganisation.ToNullIfEmpty(); result.ReceiverContactPerson = receiver_first_last; result.ReceiverDivision = invoicebase.RecipientDivision.ToNullIfEmpty(); result.ReceiverStreet = invoicebase.RecipientStreet.ToNullIfEmpty(); result.ReceiverPostCodeAndTown = receiver_postcode_town; result.KrankenkasseIK = organisation.IKKostentrager; result.KrankenkasseName = organisation.Name; result.SenderIK = addressInformation.IKLeistungserbringer; result.Rechnungsnummer = protokoll.Rechnungsnummer; result.Rechnungsdatum = protokoll.ErstelltAm.Value.ToString("dd.MM.yyyy"); result.AnzahlDerUrbelege = string.Empty; result.InvoiceBase = invoicebase; if(mandator.Logo?.Original is object) result.Logo = new ImageSource(false, mandator.Logo.Original); return result; } } }