using System; using System.Text; using BeWo.Data.Entities; using BeWo.Report; using BeWo.Report.ReportObjects; using BS.Shared.Core; using DevExpress.XtraReports.UI; namespace LebenshilfeStadeMID { [IDSpecificClass(Identifier = "SBD")] public partial class ServiceInvoiceReport : XtraReport, IBeWoReport { public ServiceInvoiceReport() { this.InitializeComponent(); } public void SetReportDataSource(ServiceInvoiceRO pRO) { //CreateAbrechnungsItems(pRO); SetzeEmpfaengerAdresse(pRO); SetzeBetraege(pRO); //var subReport = new LeistungsnachweisAbrechnung(); //subReport.SetReportDataSource(pRO); //this.xrSubreport1.ReportSource = subReport; this.bindingSource1.DataSource = pRO; } //private void CreateAbrechnungsItems(ServiceInvoiceRO pRo) //{ // if (pRo.InvoiceBase.SupportConceptCostBearerRelDc != null) // { // var c2s = DAOFactory.GenericDAO.LoadByID(pRo.InvoiceBase.SupportConceptCostBearerRelDc.CostBearer2SupportConceptOid.Value); // var list = ErstelleStundenplanItems(c2s.SupportConcept.Customer, pRo.AccountingPeriodStart, pRo.AccountingPeriodEnd); // var srList = HoleAbrechenbareServiceRecords(c2s, pRo.AccountingPeriodStart, pRo.AccountingPeriodEnd); // pRo.BillableServiceRecords = MergeBillableServiceRecords(list, srList); // } //} //private List MergeBillableServiceRecords(List stundenplanItems, List srList) //{ // List result = new List(); // Dictionary dayExistDict = new Dictionary(); // foreach (var sr in srList) // { // if (!dayExistDict.ContainsKey(sr.Start.Value.Day)) // { // dayExistDict.Add(sr.Start.Value.Day, true); // } // result.Add(sr); // } // foreach (var sr in stundenplanItems) // { // if (!dayExistDict.ContainsKey(sr.Start.Value.Day)) // { // result.Add(sr); // } // } // return result; //} //private List HoleAbrechenbareServiceRecords(CostBearer2SupportConcept c2S, DateTime pRoAccountingPeriodStart, DateTime pRoAccountingPeriodEnd) //{ // var srList = c2S.ServiceRecords; // List result = new List(); // foreach (var sr in srList) // { // var dc = MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDC(sr); // result.Add(dc); // } // return result; //} //private List ErstelleStundenplanItems(Customer customer, DateTime start, DateTime ende) //{ // var stundenplan = GetStundenplan(customer, start); // List items = new List(); // while (start <= ende) // { // var subItems = ErstelleStundenplanEintraege(stundenplan, start); // items.AddRange(subItems); // start = start.AddDays(1); // } // return items; //} private static Organisation SucheSchule(Customer customer) { foreach (var c2o in customer.Customer2OrganisationList) { foreach (var v2o in c2o.ValueList) { if (v2o.Entry.Value != null && v2o.Entry.Value.Contains("Schule")) { return c2o.Organisation; } } } return null; } //private static Arbeitszeit GetStundenplan(Customer customer, DateTime date) //{ // var stundenplan = SucheStundenplan(customer.Arbeitszeiten, date); // if (stundenplan == null) // { // //Kein Stundenplan hinterlegt, suche Stundenplan bei der Organisation (Schule) // var org = SucheSchule(customer); // if (org != null) // { // return SucheStundenplan(org.Arbeitszeiten, date); // } // } // return stundenplan; //} //private static Arbeitszeit SucheStundenplan(IList arbeitszeiten, DateTime date) //{ // if (arbeitszeiten != null && arbeitszeiten.Count > 0) // { // foreach (var az in arbeitszeiten) // { // if ((!az.GueltigVon.HasValue || az.GueltigVon <= date) && (!az.GueltigBis.HasValue || az.GueltigBis >= date)) // { // return az; // } // } // } // return null; //} //private static List ErstelleStundenplanEintraege(Arbeitszeit arbeitszeit, DateTime datum) //{ // List items = new List(); // if (arbeitszeit != null && arbeitszeit.ArbeitszeitEintraege != null && arbeitszeit.ArbeitszeitEintraege.Count > 0) // { // if (arbeitszeit.GueltigVon <= datum && datum <= arbeitszeit.GueltigBis) // { // var day = datum.DayOfWeek; // foreach (var ae in arbeitszeit.ArbeitszeitEintraege) // { // if (SindAmGleichenWochentag(day, ae.Tag)) // { // String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", datum, ae.UhrzeitVon); // String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", datum, ae.UhrzeitBis); // DateTime date1; // DateTime date2; // if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) // { // var item = new ServiceRecordDC(); // item.Start = date1; // item.End = date2; // items.Add(item); // } // } // } // } // } // return items; //} //private static decimal BerechneStunden(ArbeitszeitEintrag ae) //{ // String dateStr1 = String.Format("31.12.2018 {0}", ae.UhrzeitVon); // String dateStr2 = String.Format("31.12.2018 {0}", ae.UhrzeitBis); // DateTime date1; // DateTime date2; // if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) // { // return (decimal)date2.Subtract(date1).TotalHours; // } // return 0; //} //private static bool SindAmGleichenWochentag(DayOfWeek day, AppointmentDayOfWeek aeTag) //{ // if (day == DayOfWeek.Monday && aeTag == AppointmentDayOfWeek.Montag) // { // return true; // } // if (day == DayOfWeek.Tuesday && aeTag == AppointmentDayOfWeek.Dienstag) // { // return true; // } // if (day == DayOfWeek.Wednesday && aeTag == AppointmentDayOfWeek.Mittwoch) // { // return true; // } // if (day == DayOfWeek.Thursday && aeTag == AppointmentDayOfWeek.Donnerstag) // { // return true; // } // if (day == DayOfWeek.Friday && aeTag == AppointmentDayOfWeek.Freitag) // { // return true; // } // if (day == DayOfWeek.Saturday && aeTag == AppointmentDayOfWeek.Samstag) // { // return true; // } // return false; //} private void SetzeBetraege(ServiceInvoiceRO pRo) { lblZuschlagText.Text = ""; lblAnzahlZuschlag.Text = ""; lblBetragEinheitZuschlag.Text = ""; lblGesamtBetragZuschlag.Text = ""; decimal stundenAnzahl = 0; decimal stundenSatz = 0; String prozentZuschlag = ""; decimal anzahlZuschlag = 0; decimal betragEinheitZuschlag = 0; if (pRo.ServiceInvoicePeriods != null) { foreach (var sip in pRo.ServiceInvoicePeriods) { if (sip.ServiceInvoiceItems != null) { foreach (var ii in sip.ServiceInvoiceItems) { if (ii.ServiceDescription != null) { if (ii.ServiceDescription == "Betreuungseinsätze") { stundenAnzahl = ii.UnitCount ?? 0; stundenSatz = ii.AmountPerUnit ?? 0; } else if (ii.ServiceDescription.Contains("Zuschlag auf Betreuungszeit")) { anzahlZuschlag = ii.UnitCount ?? 0; betragEinheitZuschlag = ii.AmountPerUnit ?? 0; prozentZuschlag = ii.RateFactor; prozentZuschlag = prozentZuschlag.Replace(",00%", "%"); } } } } } } lblStunden.Text = String.Format("{0:0.00} Stunden zu je", stundenAnzahl); lblStundensatz.Text = String.Format("{0:c}", stundenSatz); lblBetragStunden.Text = String.Format("{0:c}", stundenAnzahl * stundenSatz); if (!String.IsNullOrWhiteSpace(prozentZuschlag)) { lblZuschlagText.Text = String.Format("{0} Zuschlag auf Betreuungszeit", prozentZuschlag); lblAnzahlZuschlag.Text = String.Format("{0:0.00}", anzahlZuschlag); lblBetragEinheitZuschlag.Text = String.Format("{0:c}", betragEinheitZuschlag); lblGesamtBetragZuschlag.Text = String.Format("{0:c}", anzahlZuschlag * betragEinheitZuschlag); } lblGesamtBetrag.Text = pRo.GrossClaim; } private void SetzeEmpfaengerAdresse(ServiceInvoiceRO pRO) { StringBuilder sb = new StringBuilder(); if (!String.IsNullOrEmpty(pRO.RecipientOrganisation)) { sb.AppendLine(pRO.RecipientOrganisation); } if (!String.IsNullOrEmpty(pRO.RecipientDivision)) { sb.AppendLine(pRO.RecipientDivision); } if (!String.IsNullOrEmpty(pRO.RecipientAddressLine1)) { sb.AppendLine(pRO.RecipientAddressLine1); } if (!String.IsNullOrEmpty(pRO.RecipientStreet)) { sb.AppendLine(pRO.RecipientStreet); } if (!String.IsNullOrEmpty(pRO.RecipientPostCodeAndTown)) { sb.AppendLine(pRO.RecipientPostCodeAndTown); } lblAdresse.Text = sb.ToString(); } } }