diff --git a/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs b/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs index 1a6d0a8d2..f4bb554d5 100644 --- a/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs +++ b/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs @@ -79,16 +79,37 @@ namespace AwoIntegrationsGGmbH.Invoicing public override ServiceInvoice CreateSingleInvoice(int invoiceCounter, CostBearer costBearer, DateTimeSpan invoicePeriod, CompactSupportConceptDC supportConcept, List serviceRecords) { - var i = base.CreateSingleInvoice(invoiceCounter, costBearer, invoicePeriod, supportConcept, serviceRecords); - if (i != null) + if (supportConcept.IsApproved || !supportConcept.IsDeleted && !supportConcept.IsArchived) // auch nicht bewilligte abgerechnet werden { - var claim = i.GetTotalClaim(); - if (!claim.HasValue || claim.Value == 0) + var invoice = new ServiceInvoice(); + var supportConceptList = new List { supportConcept }; + + SetSenderInformation(invoice); + SetInvoiceBaseData(invoiceCounter, invoice, costBearer, invoicePeriod, supportConceptList); + SetSingleInvoiceBaseData(invoiceCounter, invoice, costBearer, invoicePeriod, supportConcept); + SetRecipientInformation(invoice, costBearer); + SetServiceInvoicePeriods(invoice, invoice.InvoiceBase.CostBearer2SupportConcept, invoicePeriod, + serviceRecords); + + SetServiceInvoicePeriodAmounts(invoice); + + // Spitzabrechnung + if (invoicePeriod == null) { - return null; + SetAmountAdvancePayments(invoice); + SetAmountEquityContribution(invoice); } + if (invoice != null) + { + var claim = invoice.GetTotalClaim(); + if (!claim.HasValue || claim.Value == 0) + { + return null; + } + } + return invoice; } - return i; + return null; } public override void SetInvoiceBaseData(int invoiceCounter, ServiceInvoice invoice, CostBearer costBearer, DateTimeSpan invoicePeriod, @@ -116,11 +137,10 @@ namespace AwoIntegrationsGGmbH.Invoicing { SupportConceptApprovalPeriodDC approvalPeriodDC = MapperFactory.SupportConceptApprovalPeriodDC_SupportConceptApprovalPeriod.MapToNewDC(iPeriod); - - if (approvalPeriodDC.Span.EndDateTime < invoiceAccountingPeriodSpan.StartDateTime || approvalPeriodDC.Span.StartDateTime > invoiceAccountingPeriodSpan.EndDate) - { - continue; - } + //if (approvalPeriodDC.Span.EndDateTime < invoiceAccountingPeriodSpan.StartDateTime || approvalPeriodDC.Span.StartDateTime > invoiceAccountingPeriodSpan.EndDate) + //{ + // continue; + //} ServiceInvoicePeriod serviceInvoicePeriod = CreateServiceInvoicePeriod(approvalPeriodDC, invoiceAccountingPeriodSpan); serviceInvoicePeriod.SupportConceptApprovalPeriod = iPeriod; @@ -139,6 +159,69 @@ namespace AwoIntegrationsGGmbH.Invoicing } } + public override ServiceInvoicePeriod CreateServiceInvoicePeriod(SupportConceptApprovalPeriodDC approvalPeriodDC, DateTimeSpan invoiceAccountingPeriodSpan) + { + var sip = new ServiceInvoicePeriod + { + Start = invoiceAccountingPeriodSpan.StartDateTime, + End = invoiceAccountingPeriodSpan.EndDateTime, + }; + + return sip; + } + + public override void SetInvoiceItems(ServiceInvoice invoice, ServiceInvoicePeriod serviceInvoicePeriod, SupportConceptApprovalPeriodDC supportConceptApprovalPeriod, + CostBearer2SupportConcept cb2sc, DateTimeSpan invoicePeriod, List serviceRecords) + { + BS.Shared.Services.Calculations calc = PluginLoader.FindClass(_SpecificID) ?? BS.Shared.Services.Calculations.GetInstance(_SpecificID); + + if (ShouldCreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc)) + { + CreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc); + } + else + { + List serviceRecordsInPeriod = serviceRecords.Where( + i => + { + bool valid = i.Start.Value.InBetween(serviceInvoicePeriod.Start.Value, + serviceInvoicePeriod.End.Value, true); + + if (valid && serviceInvoicePeriod.SupportConceptApprovalPeriod != null && serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory != null) + valid = serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory.Oid == + i.ServiceDescription.Category.ServiceCategoryOid; + return valid; + }).ToList(); + + if (serviceRecordsInPeriod.Count > 0) + { + //var approvalPeriodDC = DAOFactory.GenericDAO + // .LoadByID(serviceInvoicePeriod.SupportConceptApprovalPeriodOid.Value) + // .MapToNewDC(); + + //Dictionary span2HoursTest = cb2sc.SupportConcept.Customer.GetAbsencesTimesNotBillableWholeWeeks(); + var absenceTimes = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(cb2sc.SupportConcept.Customer.AbsenceTimes); + Dictionary span2Hours = calc.GetAbsencesTimesNotBillable(absenceTimes); + + serviceInvoicePeriod.HoursNotBillableAbsence += + calc.GetHoursNotBillableDueToAbsenceTimes(supportConceptApprovalPeriod, + cb2sc.CostBearer.CostRatePeriods.MapToNewDCs(), + serviceRecordsInPeriod, + span2Hours, + true, true); + + //serviceInvoicePeriod.HoursNotBillableNotApproved += + // calc.GetHoursNotBillableDueToMoreThanApproved(supportConceptApprovalPeriod, + // cb2sc.CostBearer.CostRatePeriods.MapToNewDCs(), + // serviceRecordsInPeriod, + // true, true); + + var itemList = CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, serviceInvoicePeriod.SupportConceptApprovalPeriod, calc); + serviceInvoicePeriod.InvoiceItemList.AddRange(itemList); + } + } + } + public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, BS.Shared.Services.Calculations calc) {