Stundenkonto Herr Kloss

This commit is contained in:
Christian
2023-11-23 02:16:27 +01:00
parent bc676ee252
commit 17468b63e6
23 changed files with 2417 additions and 290 deletions

View File

@@ -44,7 +44,7 @@
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Grid.Row="0" Grid.ColumnSpan="4" HorizontalAlignment="Left" VerticalAlignment="Top" Source="Ressources\Icons\bewoplaner_logo_big.png" Height="45" Margin="7,7,0,0"/>
<Image Grid.Row="0" Grid.ColumnSpan="4" HorizontalAlignment="Left" VerticalAlignment="Top" Source="Ressources\Icons\bewoplaner_logo_small.png" Height="45" Margin="7,7,0,0"/>
<Label VerticalAlignment="Top" HorizontalAlignment="Right" Content="Version x.x.x" Foreground="#FF818181" Margin="5,7,3,0" Grid.Row="0" Grid.ColumnSpan="4" Grid.Column="0" FontSize="10" x:Name="LblVersion" />
<StackPanel Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="2" Margin="0,100,0,0" MaxWidth="330">
<Label x:Name="lblGesperrt" Content="Gesperrt" Foreground="#FF000000" FontSize="12" FontWeight="Bold" Margin="0,30,0,0" HorizontalAlignment="Center" />

View File

@@ -82,8 +82,8 @@
<TextBox Grid.Column="1" Margin="1" VerticalContentAlignment="Center" Text="{Binding ViewModel.NewVM.Description, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Column="2" Height="25" Content="Hinzufügen" Margin="3" Click="ZielHinzufuegenButton_Click" />
<Button Grid.Column="3" Height="25" Content="Icf Importieren" Margin="3" Click="IcfImport_Click" />
<ToggleButton Grid.Column="4" Height="25" Content="Bearbeiten" Margin="3" Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked" Visibility="Collapsed"/>
<StackPanel Orientation="Horizontal" Grid.Column="5" Grid.Row="0" Grid.ColumnSpan="10" HorizontalAlignment="Right" Visibility="Collapsed">
<ToggleButton Grid.Column="4" Height="25" Content="Bearbeiten" Margin="3" Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked" Visibility="Visible"/>
<StackPanel Orientation="Horizontal" Grid.Column="5" Grid.Row="0" Grid.ColumnSpan="10" HorizontalAlignment="Right" Visibility="Visible">
<Button x:Name="PrevButton" Height="25" Content="Prev" Margin="3" Click="PrevButton_Click" />
<Button x:Name="NextButton" Height="25" Content="Next" Margin="3" Click="NextButton_Click" />
</StackPanel>

View File

@@ -74,7 +74,7 @@ namespace BeWo.View.Detail
public ObservableSortCollection<SupportConceptGoalTreeItem> GoalTree { get; private set; }
public override bool IsDirty => ViewModel != null && ViewModel.IsDirty || (_History?.GotChanges ?? false);
public static bool IsAllowedToEditGoals => BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditGoals);
public static bool IsAllowedToEditGoals => BeWoApp.LoggedOnUser.HasRight(UserRightType.AdministrationView_Edit);
public GenericValueListEntryListVM ViewModel
{

View File

@@ -8,7 +8,7 @@
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
<ProjectView>ShowAllFiles</ProjectView>
<WebStackScaffolding_ViewDialogWidth>600</WebStackScaffolding_ViewDialogWidth>
<Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>

View File

@@ -140,6 +140,7 @@ namespace BeWo.Report.ReportObjects
decimal workdaysTotal = 0;
decimal stundenSollGesamt = 0;
decimal tatSollStdGesamt = 0;
decimal azDurchFeiertage = 0;
IList<ServiceRecord> groupFilteredRecords = empDetail.AllServiceRecords;
@@ -301,6 +302,7 @@ namespace BeWo.Report.ReportObjects
}
}
var ath2 = GetAbwesenheitenDurchServiceRecords(empDetail, c, groupFilteredRecords, berichtsAnfang, berichtsEnde);
@@ -349,6 +351,13 @@ namespace BeWo.Report.ReportObjects
flsSollGesamt += BerechneFlsSoll(emp, c, berichtsAnfang, berichtsEnde, tatSollStdImVertragsUndBerichtzeitraum, stundenSollProMonat);
if (ath.StundenAlsIst > 0)
{
tatSollStdGesamt += ath.StundenAlsIst;
summaryTotal.IstNichtAbrechenbar += ath.StundenAlsIst * 60;
}
azDurchFeiertage += BerechneGesamtArbeitszeitDurchFeiertage(empDetail, berichtsAnfang, berichtsEnde);
berichtsAnfang = berichtsEnde;
@@ -399,6 +408,8 @@ namespace BeWo.Report.ReportObjects
empDetail.StundenGesamtIst -= pause1/60;
empDetail.StundenGesamtIst -= pause2/60;
empDetail.StundenGesamtIst += azDurchFeiertage;
if (empDetail.FlsSoll != 0)
empDetail.RelationIstSoll = (empDetail.FlsIst/empDetail.FlsSoll)*100m;
@@ -455,6 +466,7 @@ namespace BeWo.Report.ReportObjects
ro.EmployeeDetailList = FilterEmployeeList(ro.EmployeeDetailList);
}
#region Ist-Berechnung für Dienstplanung
public decimal BerechneDienstplanIst(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, List<DienstEintrag> eintraege, List<Dienstvertretung> vertretungen, DateTime monat, out decimal? ueberstunden, out decimal? alteExtraUeberstunden) // ABCDEF
{
@@ -545,16 +557,19 @@ namespace BeWo.Report.ReportObjects
MitarbeiterstundenkontoRO.EmployeeDetail ed = new MitarbeiterstundenkontoRO.EmployeeDetail();
ed.SollProTag = weeklyTotalHours / arbeitstageProWoche;
ed.ArbeitstageProWoche = arbeitstageProWoche;
ed.ArbeitstageImBerichtszeitraum = arbeitstage;
ed.SollProWoche = BerechneSollProWoche(c, ed);
ed.Employee = emp;
ed.StundenSollMax = sollMitarbeiter;
AktuellBearbeitetesEmployeeDetail = ed;
var ath = GetAbsenceTimeDaysWithWorkWeeks(emp, start, ende, arbeitstageProWoche);
ed.ArbeitstageProWoche = arbeitstageProWoche;
ed.ArbeitstageImBerichtszeitraum = arbeitstage;
ed.SollProWoche = BerechneSollProWoche(c, ed);
ed.AbsenceTimeDays = ath;
ed.Employee = emp;
ed.StundenSollMax = sollMitarbeiter;
if (ath.TageGesamt.HasValue)
{
@@ -987,10 +1002,6 @@ namespace BeWo.Report.ReportObjects
else
sum.IstNichtAbrechenbar += duration;
if (duration > 0)
{
int test2 = 0;
}
}
sum.RecordsImBerichtszeitraum.Add(item);
}
@@ -1501,6 +1512,32 @@ namespace BeWo.Report.ReportObjects
protected virtual decimal GetDuration(ServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
if (!StundenBeiAbwesenheitenBerechnen())
{
foreach (var at in ed.Employee.AbsenceTimes)
{
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MaxValue;
if (at.Start.HasValue)
{
start = at.Start.Value;
}
if (at.End.HasValue)
{
end = at.End.Value;
if (end.Hour == 0)
{
end = end.AddDays(1);
}
}
if (start <= sr.Start && sr.Start < end)
{
return 0;
}
}
}
decimal duration = 0;
if (sr.GroupRoundedDuration.HasValue)
@@ -1549,6 +1586,7 @@ namespace BeWo.Report.ReportObjects
return duration;
}
//Mit "SpecialHours" sind Sonderzeiten wie Nachtzeiten oder Arbeitszeiten an Sonn und Feiertags gemeint. Da diese gesondert abgerechnet werden können.
public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration)
{
if (sr.Start.Value.DayOfWeek == DayOfWeek.Sunday)
@@ -1641,7 +1679,7 @@ namespace BeWo.Report.ReportObjects
dd.BreakMinutes = 30;
CalculateAbsenceTimesForDay(dd, ed);
if (date.Year == 2023 && date.Month == 10 && date.Day == 2)
if (date.Year == 2023 && date.Month == 10 && date.Day == 3)
{
int test = 0;
}
@@ -1649,6 +1687,13 @@ namespace BeWo.Report.ReportObjects
BerechneSollStundenFuerDayDetail(ed, dd);
if (BerechneFeiertageAlsArbeitszeit())
{
if (dd.Feiertag != null)
{
dd.MinutesTotal = dd.SollStunden * 60;
}
}
return dd;
}
@@ -1674,7 +1719,13 @@ namespace BeWo.Report.ReportObjects
{
decimal sollDiesenTag = 0;
var faktor = GetFeiertagsFaktor(date);
if (BerechneFeiertageAlsArbeitszeit())
{
if (faktor == 1)
{
faktor = 0;
}
}
if (faktor < 1)
{
//Berechne Soll, entweder aus Vertrag oder Arbeitszeiten
@@ -1818,10 +1869,13 @@ namespace BeWo.Report.ReportObjects
//Dauer der Abwesenheit = Soll an diesem Tag
bool istGanztaegig = true;
var abwesenheitsDauer = sollDiesenTag;
if (span.StartDate.Hour > 0 && span.EndDate.Hour > 0)
{
istGanztaegig = false;
var ts = span.EndDate.Subtract(span.StartDate);
abwesenheitsDauer = (decimal)ts.TotalHours;
if (SchneideZuvieleAbwesenheitsstundenAb() && abwesenheitsDauer > sollDiesenTag)
@@ -1875,21 +1929,26 @@ namespace BeWo.Report.ReportObjects
}
if (IsUrlaubAbsenceTime(absenceTime))
if (!AbsenceTimeAufIstStundenAddieren(absenceTime) && IsUrlaubAbsenceTime(absenceTime))
{ // Vermutlich diese Methode in CustomMitarbeiterStundenKontoBerechnung überschreiben und hier Prüfung machen, ob absenceReason ohne Fortzahlung ist
//und wenn ja, HoursSick oder Soll oder so für den Tag auf 0 setzen
dd.HoursInVacation = abwesenheitsDauer;
}
else if (IsKrankheitAbsenceTime(absenceTime))
else if (!AbsenceTimeAufIstStundenAddieren(absenceTime) && IsKrankheitAbsenceTime(absenceTime))
{
dd.HoursSick = abwesenheitsDauer;
}
else
{
if (istGanztaegig)
{
//Bei ganztägigen Abwesenheiten darf nicht noch zusätzlich gearbeitet werden
dd.MinutesTotal = 0;
}
dd.MinutesTotal += abwesenheitsDauer * 60;
}
if (dd.AbsenceTimes == null)
{
dd.AbsenceTimes = new List<AbsenceTime>();
@@ -2061,8 +2120,16 @@ namespace BeWo.Report.ReportObjects
MitarbeiterstundenkontoRO.EmployeeDetail ed = new MitarbeiterstundenkontoRO.EmployeeDetail();
ed.SollProTag = weeklyTotalHours / arbeitstageProWoche;
ed.ArbeitstageProWoche = arbeitstageProWoche;
ed.ArbeitstageImBerichtszeitraum = arbeitstage;
ed.SollProWoche = BerechneSollProWoche(c, ed);
ed.Employee = emp;
AktuellBearbeitetesEmployeeDetail = ed;
var ath = GetAbsenceTimeDaysWithWorkWeeks(emp, start, ende, arbeitstageProWoche);
ed.AbsenceTimeDays = ath;
decimal? fehlzeit = GetFehlzeiten(records, start, ende);
if (fehlzeit.HasValue)
@@ -2071,13 +2138,6 @@ namespace BeWo.Report.ReportObjects
}
ed.ArbeitstageProWoche = arbeitstageProWoche;
ed.ArbeitstageImBerichtszeitraum = arbeitstage;
ed.SollProWoche = BerechneSollProWoche(c, ed);
ed.AbsenceTimeDays = ath;
ed.Employee = emp;
ed.StundenSollMax = sollMitarbeiter;
@@ -2125,9 +2185,11 @@ namespace BeWo.Report.ReportObjects
}
decimal stundenMonat = minutenMonat/60m;
var azDurchFeiertage = BerechneGesamtArbeitszeitDurchFeiertage(ed, start, ende);
sollMitarbeiter -= azDurchFeiertage;
decimal stundenMonat = minutenMonat/60m;
stundenMonat = ((flsIst*AddRateFactorToIst()) + mittelbarIst)/60m;
@@ -2244,10 +2306,10 @@ namespace BeWo.Report.ReportObjects
return BerechneStundenDurchAbwesenheitenAlt(ath, start, ende, c, ed);
}
if (ath.StundenGesamt.HasValue)
{
return ath.StundenGesamt.Value;
}
//if (ath.StundenGesamt.HasValue)
//{
// return ath.StundenGesamt.Value;
//}
decimal stunden = 0;
@@ -2818,7 +2880,17 @@ namespace BeWo.Report.ReportObjects
}
atd.TageProWocheDict = new Dictionary<DateTimeSpan, decimal>();
foreach (var week in weeks)
atd.StundenProTagDict = new Dictionary<DateTime, decimal>();
DateTime idt = start;
while (idt < end)
{
atd.StundenProTagDict.Add(idt.Date, 0);
idt = idt.AddDays(1);
}
foreach (var week in weeks)
{
atd.TageProWocheDict.Add(week, 0);
}
@@ -2910,6 +2982,11 @@ namespace BeWo.Report.ReportObjects
stunden += std;
if (AbsenceTimeAufIstStundenAddieren(item))
{
atd.TageAlsIst += tag;
atd.StundenAlsIst += sollAmTag ?? 0;
}
if (IsKrankheitAbsenceTime(item))
{
if (!atd.TageKrankheit.HasValue)
@@ -2959,9 +3036,153 @@ namespace BeWo.Report.ReportObjects
return atd;
}
public virtual AbsenceTimeDays GetAbsenceTimeDays(IList<AbsenceTime> absenceTimes, DateTime start, DateTime end)
public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeksAlt(IList<AbsenceTime> absenceTimes, DateTime start, DateTime end, int arbeitstageProWoche)
{
var atd = new AbsenceTimeDays();
var totalSpan = new DateTimeSpan();
totalSpan.StartDate = start;
totalSpan.EndDate = end.AddDays(-1);
var weeks = totalSpan.GetWeeks(true, false);
if (BerechneAlteAbwesenheitsStunden(start))
{
totalSpan.EndDate = end;
weeks = totalSpan.GetWholeWeeks();
}
atd.TageProWocheDict = new Dictionary<DateTimeSpan, decimal>();
foreach (var week in weeks)
{
atd.TageProWocheDict.Add(week, 0);
}
decimal? tage = null;
if (absenceTimes != null)
{
foreach (var item in absenceTimes)
{
if (IstAnrechenbareAbsenceTime(item))
{
DateTimeSpan span = new DateTimeSpan();
span.StartDate = start;
if (item.Start.HasValue && item.Start.Value > span.StartDate)
{
span.StartDate = item.Start.Value;
}
span.EndDate = end;
if (item.End.HasValue && item.End.Value.Date.AddDays(1) < span.EndDate)
{
span.EndDate = item.End.Value.Date.AddDays(1);
}
if (span.EndDate >= start && span.StartDate < end)
{
DateTime day = span.StartDate;
while (day < end && day < span.EndDate)
{
var faktor = GetFeiertagsFaktor(day);
bool istWochenende =
day.DayOfWeek == DayOfWeek.Saturday || day.DayOfWeek == DayOfWeek.Sunday;
if (arbeitstageProWoche == 6)
{
istWochenende = day.DayOfWeek == DayOfWeek.Sunday;
}
else if (arbeitstageProWoche > 6)
{
istWochenende = false;
}
if (faktor < 1 && !istWochenende)
{
if (!tage.HasValue)
tage = 0;
var tag = 1m;
var std = 24m;
if (item.Start.HasValue && item.End.HasValue && item.Start.Value.Date == item.End.Value.Date &&
item.Start.Value.Hour > 0)
{
if (AktuellBearbeitetesEmployeeDetail != null)
{
faktor = 1;
decimal hours = (decimal)item.End.Value.Subtract(item.Start.Value).TotalHours;
var sollAmTag = AktuellBearbeitetesEmployeeDetail.SollProTag;
if (SchneideZuvieleAbwesenheitsstundenAb() && hours > sollAmTag)
{
hours = sollAmTag;
}
if (sollAmTag > 0)
{
tag = hours / sollAmTag;
std = tag * 24;
}
}
}
if (faktor != 0)
{
tag *= faktor;
std *= faktor;
}
tage += std;
if (IsKrankheitAbsenceTime(item))
{
if (!atd.TageKrankheit.HasValue)
atd.TageKrankheit = 0;
atd.TageKrankheit += tag;
}
if (IsUrlaubAbsenceTime(item))
{
if (!atd.TageUrlaub.HasValue)
atd.TageUrlaub = 0;
atd.TageUrlaub += tag;
}
foreach (var week in weeks)
{
if (day >= week.StartDate && day <= week.EndDate)
{
if (atd.TageProWocheDict.ContainsKey(week))
{
atd.TageProWocheDict[week] += 1;
}
}
}
}
day = day.AddDays(1);
}
}
}
}
}
if (tage.HasValue)
tage /= 24;
atd.TageGesamt = tage;
return atd;
}
public virtual AbsenceTimeDays GetAbsenceTimeDays(IList<AbsenceTime> absenceTimes, DateTime start, DateTime end)
{
return GetAbsenceTimeDaysWithWorkWeeks(absenceTimes, start, end, ANZ_WOCHENTAGE);
}
@@ -3073,9 +3294,10 @@ namespace BeWo.Report.ReportObjects
}
else
{
maxDays -= GetFeiertagsFaktor(start);
//if (IstFeiertag(start))
// maxDays--;
if (!BerechneFeiertageAlsArbeitszeit())
{
maxDays -= GetFeiertagsFaktor(start);
}
}
start = start.AddDays(1);
}
@@ -3132,6 +3354,7 @@ namespace BeWo.Report.ReportObjects
protected DateTime GetOsterSonntag(int year)
{
return VacationService.GetOsterSonntag(year);
return VacationService.GetOsterSonntag(year);
}
public virtual bool IsServiceRecordFehlzeit(ServiceRecord sr)
@@ -3140,6 +3363,39 @@ namespace BeWo.Report.ReportObjects
return true;
return false;
}
public virtual bool BerechneFeiertageAlsArbeitszeit()
{
return false;
}
public virtual bool AbsenceTimeAufIstStundenAddieren(AbsenceTime at)
{
return false;
}
public virtual bool StundenBeiAbwesenheitenBerechnen()
{
return true;
}
public virtual decimal BerechneGesamtArbeitszeitDurchFeiertage(MitarbeiterstundenkontoRO.EmployeeDetail ed, DateTime start, DateTime ende)
{
decimal az = 0;
if (BerechneFeiertageAlsArbeitszeit() && ed.Employee.IsActive == ActivationTypeId.Active)
{
DateTime dt = start;
while (dt <= ende)
{
if (GetFeiertagsFaktor(dt) > 0)
{
az += BerechneSollStundenFuerTag(ed, dt);
}
dt = dt.AddDays(1);
}
}
return az;
}
}
public class AbsenceTimeDays
@@ -3147,12 +3403,15 @@ namespace BeWo.Report.ReportObjects
public decimal? TageUrlaub;
public decimal? TageKrankheit;
public decimal? TageGesamt;
public decimal TageAlsIst;
public decimal? StundenUrlaub;
public decimal? StundenKrankheit;
public decimal? StundenGesamt;
public decimal StundenAlsIst;
public Dictionary<DateTimeSpan, decimal> TageProWocheDict;
public Dictionary<DateTimeSpan, decimal> RestStundenProWocheDict;
public Dictionary<DateTime, decimal> StundenProTagDict;
public Dictionary<DateTimeSpan, decimal> RestStundenProWocheDict;
}
public class AbsenceTimeHours

View File

@@ -118,7 +118,10 @@ namespace AkggMid
decimal dec = 0;
if (varFieldValue != null && Decimal.TryParse(varFieldValue.ToString(), out dec))
{
return dec / 5;
if (dec > 0)
{
return dec / 5;
}
}
}
}
@@ -206,5 +209,20 @@ namespace AkggMid
// }
//return ed;
}
}
public override decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
if (ath.StundenGesamt.HasValue)
{
return ath.StundenGesamt.Value;
}
return base.BerechneStundenDurchAbwesenheiten(ath, start, ende, c, ed);
}
public override bool StundenBeiAbwesenheitenBerechnen()
{
return false;
}
}
}

View File

@@ -1,11 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Service.DCEntityMapper;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Services;
using Service.Invoicing;
@@ -22,23 +25,39 @@ namespace AkggMid.Invoicing
public override IList<InvoiceItem> CreateSbdInvoiceItems(Customer customer, List<ServiceRecordDC> serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc)
{
//Klassisch nur ohne StundenplanItems
DateTime monat = new DateTime(invoicePeriod.StartDate.Year, invoicePeriod.StartDate.Month, 1);
var ro = ServicesOverviewRO.Create(customer.Oid.Value, monat.Month, monat.Year, false, 0, 0, 1, DateTime.DaysInMonth(monat.Year, monat.Month), null);
var helper = new LeistungsnachweisHelper(ro, true);
ro.Services = helper.ErstelleDummyRecords(ro);
IList<InvoiceItem> result = new List<InvoiceItem>();
IList<InvoiceItem> srList = new List<InvoiceItem>();
foreach (ServiceRecordDC iServiceRecord in serviceRecordsInPeriod)
{
if (iServiceRecord.ServiceDescription.Category.IsBillable)
{
if (!iServiceRecord.AlreadyAccounted)
{
var invoiceItem = CreateInvoiceItem(iServiceRecord, scap, calc);
srList.Add(invoiceItem);
iServiceRecord.AlreadyAccounted = true;
}
var c2sDc = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(scap.CostBearer2SupportConcept);
foreach (var s in ro.Services)
{
if (s.Minutes > 0 && s.StartDate > DateTime.MinValue)
{
var ii = CreateInvoiceItem(s, scap, calc, c2sDc);
srList.Add(ii);
}
}
}
//foreach (ServiceRecordDC iServiceRecord in serviceRecordsInPeriod)
//{
// if (iServiceRecord.ServiceDescription.Category.IsBillable)
// {
// if (!iServiceRecord.AlreadyAccounted)
// {
// var invoiceItem = CreateInvoiceItem(iServiceRecord, scap, calc);
// srList.Add(invoiceItem);
// iServiceRecord.AlreadyAccounted = true;
// }
// }
//}
Dictionary<String, bool> dayDict = new Dictionary<String, bool>();
foreach (var item in srList)
@@ -57,8 +76,7 @@ namespace AkggMid.Invoicing
return CreateSummaryInvoiceItems(newList, invoicePeriod, scap, calc);
}
public override IList<InvoiceItem> CreateAllInvoiceItems(CostBearer2SupportConcept c2s, List<ServiceRecordDC> serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc)
public override IList<InvoiceItem> CreateAllInvoiceItems(CostBearer2SupportConcept c2s, List<ServiceRecordDC> serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc)
{
var items = CreateSbdInvoiceItems(c2s.SupportConcept.Customer, serviceRecordsInPeriod, invoicePeriod, scap, calc);
@@ -112,20 +130,57 @@ namespace AkggMid.Invoicing
return key;
}
public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, Calculations calc)
{
var ii = base.CreateInvoiceItem(iServiceRecord, scap, calc);
if (iServiceRecord.ServiceDescription.CategoryName.Contains("Klassenfahrt"))
{
ii.ItemDescription = "Klassenfahrt";
private InvoiceItem CreateInvoiceItem(ServicesOverviewRO.ServiceDetail s, SupportConceptApprovalPeriod scap, Calculations calc, SupportConceptCostBearerRelDC c2sDc)
{
var ii = new InvoiceItem();
ii.ItemDescription = "Betreuungsstunden - Schulassistenz";
if (s.ServiceRecordOid > 0)
{
var record = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(s.ServiceRecordOid);
var recordDc = MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDC(record);
BillingData bd = calc.GetBillingData(recordDc);
ii.ServiceRecord = record;
ii.AmountPerUnit = bd.AmountPerUnit;
ii.UnitCount = bd.UnitCount;
ii.AmountTotal = bd.AmountTotal;
ii.ItemPeriodStart = bd.BillingPeriodStart;
ii.ItemPeriodEnd = bd.BillingPeriodEnd;
ii.RateFactor = bd.RateFactor;
ii.GrossAmountTotal = bd.GrossAmountTotal;
ii.AccountingInterval = bd.AccountingInterval;
if (recordDc.ServiceDescription.CategoryName.Contains("Klassenfahrt"))
{
ii.ItemDescription = "Klassenfahrt";
}
}
else
{
ii.ItemDescription = "Betreuungsstunden - Schulassistenz";
{
var stundensatz = c2sDc.CostBearer.CostRatePeriods.GetCostRatePeriodForDate(CostRatePeriodType.HourlyRate, s.StartDate);
if (stundensatz != null && stundensatz.CostRateValue.HasValue)
{
ii.AmountPerUnit = stundensatz.CostRateValue.Value;
ii.UnitCount = (decimal)s.Minutes / 60;
ii.AmountTotal = ii.AmountPerUnit * ii.UnitCount;
ii.ItemPeriodStart = s.StartDate;
ii.ItemPeriodEnd = s.StartDate;
ii.RateFactor = 0;
ii.GrossAmountTotal = ii.AmountTotal;
ii.AccountingInterval = AccountingIntervalType.Hourly;
}
}
if (scap != null)
ii.SupportConceptApprovalPeriodOid = scap.Oid;
return ii;
}
}
}

View File

@@ -56,6 +56,7 @@ namespace AkggMid
{
var hours = day.HoursSick + day.HoursInVacation;
empDetail.StundenGesamtIst += hours;
day.ServiceRecords = null;
}
if (day.ServiceRecords != null && day.ServiceRecords.Count > 0)

View File

@@ -14,6 +14,7 @@ namespace AsbRuhr.Export
public String Belegdatum { get; set; }
public String Erloeskonto { get; set; }
public String Buchungstext { get; set; }
public String Kategorie { get; set; }
public decimal Betrag { get; set; }

View File

@@ -186,28 +186,34 @@ Alternativ wäre der 1120er Satz mit einzubauen (ab Seite 61)
foreach (DataRow row in dt.Rows)
{
var ds = ErstelleFibuNetDatensatz(row);
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
if (ds.Betrag != 0)
{
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
rowIndex++;
rowIndex++;
}
}
dt = ExecuteQuery(GetSpitzabrechnungSql(date), date);
foreach (DataRow row in dt.Rows)
{
var ds = ErstelleFibuNetDatensatz(row);
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
if (ds.Betrag != 0)
{
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
rowIndex++;
rowIndex++;
}
}
sb.AppendLine(String.Format("( ):5;"));
@@ -235,19 +241,24 @@ Alternativ wäre der 1120er Satz mit einzubauen (ab Seite 61)
if (!String.IsNullOrEmpty(row[3].ToString()))
{
var ds = ErstelleFibuNetDatensatz(row);
String nextInvoiceNumber = ApplyPattern(invoiceNumber.Pattern, number++);
ds.Belegnr = nextInvoiceNumber;
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
if (ds.Betrag != 0 && (String.IsNullOrEmpty(ds.Kategorie) || !ds.Kategorie.Contains("Assistenz")))
{
String nextInvoiceNumber = ApplyPattern(invoiceNumber.Pattern, number++);
ds.Belegnr = nextInvoiceNumber;
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
rowIndex++;
}
}
rowIndex++;
}
invoiceNumber.CurrentNumber = number;
DAOFactory.GenericDAO.Update(invoiceNumber);
sb.AppendLine(String.Format("( ):5;"));
@@ -307,6 +318,7 @@ Alternativ wäre der 1120er Satz mit einzubauen (ab Seite 61)
blg1 = "123456";
ds.Belegnr = blg1;
ds.Belegdatum = row[0].ToString();
ds.Kategorie = row[7].ToString();
ds.Erloeskonto = GetErloeskonto(row[7].ToString());
ds.Buchungstext = row[4].ToString();
ds.Kostenstelle = "4102";

View File

@@ -215,7 +215,7 @@ namespace BeWo.BeWoAmrath
tatsaechlicheSollStdGesamt -= fehlZeiten.Value;
}
AktuellBearbeitetesEmployeeDetail = empDetail;
var ath = GetAbsenceTimeDays(emp.AbsenceTimes, berichtsAnfang, berichtsEnde);
if (ath.TageUrlaub.HasValue)

View File

@@ -14,6 +14,7 @@ namespace DiePerspektive.Export
public String Belegdatum { get; set; }
public String Erloeskonto { get; set; }
public String Buchungstext { get; set; }
public String Kategorie { get; set; }
public decimal Betrag { get; set; }

View File

@@ -186,28 +186,34 @@ Alternativ wäre der 1120er Satz mit einzubauen (ab Seite 61)
foreach (DataRow row in dt.Rows)
{
var ds = ErstelleFibuNetDatensatz(row);
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
if (ds.Betrag != 0)
{
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
rowIndex++;
rowIndex++;
}
}
dt = ExecuteQuery(GetSpitzabrechnungSql(date), date);
foreach (DataRow row in dt.Rows)
{
var ds = ErstelleFibuNetDatensatz(row);
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
if (ds.Betrag != 0)
{
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
rowIndex++;
rowIndex++;
}
}
sb.AppendLine(String.Format("( ):0005;"));
@@ -234,17 +240,22 @@ Alternativ wäre der 1120er Satz mit einzubauen (ab Seite 61)
if (!String.IsNullOrEmpty(row[3].ToString()))
{
var ds = ErstelleFibuNetDatensatz(row);
String nextInvoiceNumber = ApplyPattern(invoiceNumber.Pattern, number++);
ds.Belegnr = nextInvoiceNumber;
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
if (ds.Betrag != 0 && (String.IsNullOrEmpty(ds.Kategorie) || !ds.Kategorie.Contains("Assistenz")))
{
String nextInvoiceNumber = ApplyPattern(invoiceNumber.Pattern, number++);
ds.Belegnr = nextInvoiceNumber;
Erstelle1100Satz(sb, ds);
sb.AppendLine();
Erstelle1110Satz(sb, ds);
sb.AppendLine();
Erstelle1120Satz(sb, ds);
sb.AppendLine();
rowIndex++;
}
}
rowIndex++;
}
invoiceNumber.CurrentNumber = number;
@@ -307,6 +318,7 @@ Alternativ wäre der 1120er Satz mit einzubauen (ab Seite 61)
blg1 = "123456";
ds.Belegnr = blg1;
ds.Belegdatum = row[0].ToString();
ds.Kategorie = row[7].ToString();
ds.Erloeskonto = GetErloeskonto(row[7].ToString());
ds.Buchungstext = row[4].ToString();
ds.Kostenstelle = "4102";

View File

@@ -71,6 +71,12 @@
<DependentUpon>CustomerDataReport.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ZeitdokumentationPlanIst.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ZeitdokumentationPlanIst.Designer.cs">
<DependentUpon>ZeitdokumentationPlanIst.cs</DependentUpon>
</Compile>
<Compile Include="Quittierungsbeleg.cs">
<SubType>Component</SubType>
</Compile>
@@ -105,6 +111,9 @@
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="ZeitdokumentationPlanIst.resx">
<DependentUpon>ZeitdokumentationPlanIst.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Quittierungsbeleg.resx">
<DependentUpon>Quittierungsbeleg.cs</DependentUpon>
</EmbeddedResource>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,162 @@
using System;
using System.Collections;
using System.Collections.Generic;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using DevExpress.XtraReports.UI;
namespace Fortis
{
public partial class ZeitdokumentationPlanIst : XtraReport
{
public ZeitdokumentationPlanIst()
{
InitializeComponent();
}
public void SetReportDataSource(ServicesOverviewRO pRO)
{
if (pRO.Services != null)
{
Dictionary<int, FortisServiceRecord> tag2Details = new Dictionary<int, FortisServiceRecord>();
foreach (var sr in pRO.Services)
{
FortisServiceRecord fsr = null;
if (!tag2Details.ContainsKey(sr.StartDate.Day))
{
fsr = new FortisServiceRecord();
tag2Details.Add(sr.StartDate.Day, fsr);
}
else
{
fsr = tag2Details[sr.StartDate.Day];
}
if (sr.ServiceDescription.Contains("Wohnraum"))
{
fsr.MinutenH += sr.Minutes;
}
else if (sr.ServiceDescription.Contains("Sozialraum"))
{
fsr.MinutenB += sr.Minutes;
}
else if (sr.ServiceDescription.Contains("Telefon"))
{
fsr.MinutenT += sr.Minutes;
}
else if (sr.ServiceDescription.Contains("Dienststelle"))
{
fsr.MinutenGD += sr.Minutes;
}
else if (sr.ServiceDescription.Contains("pool"))
{
fsr.MinutenGI += sr.Minutes;
}
else if (sr.ServiceDescription.Contains("Kompensatorisch"))
{
fsr.MinutenKL += sr.Minutes;
}
else if (sr.ServiceDescription.Contains("Krankenhaus"))
{
fsr.MinutenAK += sr.Minutes;
}
else if (sr.ServiceDescription.Contains("abgesagt"))
{
fsr.FehlkontaktBeginn = sr.StartDate;
fsr.FehlkontaktEnde = sr.EndDate;
}
fsr.AnzahlMA += sr.EmployeeCount;
fsr.Groesse += sr.CustomerCount;
}
List<ServicesOverviewRO.ServiceDetail> newServices = new List<ServicesOverviewRO.ServiceDetail>();
for (int i = pRO.StartDate.Day; i <= pRO.EndDate.Day; i++)
{
if (tag2Details.ContainsKey(i))
{
var fsr = tag2Details[i];
var sr = new ServicesOverviewRO.ServiceDetail();
sr.StartDate = new DateTime(pRO.StartDate.Year, pRO.StartDate.Month, i);
//H Hausbesuch = Notice
//B Begleitung im Sozialraum = Notice2
//T Kontakt per Telefon etc. = Notice3
//GD Kontakt mit Leistungsberechtigten in der Dienststelle = Notice4
//KL Kompensatorische Leistung ohne LB = Notice5
//AK Assistenz im Krankenhaus = ServiceCategory
//MA Anzahl Mitarbeitende = ServiceCategoryAbbr (EmployeeCount)
//GI Gemeinsame Inanspruchnahme = GefahreneKilometer
//Größe = StartDateString (CustomerCount)
//Summe1 = TimeRangeString
//Beginn = EmployeeFirstName
//Ende = EmployeeFullname
//Summe2 = EmployeeLastname
if (fsr.MinutenH > 0)
{
sr.Notice = String.Format("{0:0}", fsr.MinutenH);
}
if (fsr.MinutenB > 0)
{
sr.Notice2 = String.Format("{0:0}", fsr.MinutenB);
}
if (fsr.MinutenT > 0)
{
sr.Notice3 = String.Format("{0:0}", fsr.MinutenT);
}
if (fsr.MinutenGD > 0)
{
sr.Notice4 = String.Format("{0:0}", fsr.MinutenGD);
}
if (fsr.MinutenKL > 0)
{
sr.Notice5 = String.Format("{0:0}", fsr.MinutenKL);
}
if (fsr.MinutenAK > 0)
{
sr.ServiceCategory = String.Format("{0:0}", fsr.MinutenAK);
}
if (fsr.MinutenGI > 0)
{
sr.GefahreneKilometer = String.Format("{0:0}", fsr.MinutenGI);
}
sr.EmployeeCount = fsr.AnzahlMA;
sr.CustomerCount = fsr.Groesse;
sr.TimeRangeString = String.Format("{0:0}", fsr.MinutenH + fsr.MinutenB + fsr.MinutenT + fsr.MinutenGD + fsr.MinutenKL + fsr.MinutenAK + fsr.MinutenGI);
if (fsr.FehlkontaktBeginn.HasValue && fsr.FehlkontaktEnde.HasValue)
{
sr.EmployeeFirstName = String.Format("{0:HH:mm}", fsr.FehlkontaktBeginn);
sr.EmployeeFullname = String.Format("{0:HH:mm}", fsr.FehlkontaktEnde);
sr.EmployeeLastName = String.Format("{0:0}", fsr.FehlkontaktEnde.Value.Subtract(fsr.FehlkontaktBeginn.Value).TotalMinutes);
}
newServices.Add(sr);
}
}
pRO.Services = newServices;
}
bindingSource1.DataSource = pRO;
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>21, 17</value>
</metadata>
</root>

View File

@@ -14,8 +14,8 @@ namespace PerspektivenEV.Service
{
// Ausblenden der Fahrtzeit und Gesondert vorgehaltenen Flächen
var stat = base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate, ignoreServiceRecordOid);
stat.PeriodStatistics = stat.PeriodStatistics.Where(p => p.SupportConceptApprovalPeriod.ServiceCategory == null ||
(p.SupportConceptApprovalPeriod.ServiceCategory != null && !p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation.Contains("GVF")
stat.PeriodStatistics = stat.PeriodStatistics.Where(p => p.SupportConceptApprovalPeriod.ServiceCategory == null || String.IsNullOrEmpty(p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation) ||
(!p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation.Contains("GVF")
&& !p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation.Contains("AFZ"))).ToList();
return stat;

View File

@@ -9,6 +9,11 @@ namespace SHKService
{
public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
protected override void StarteBerechnung(DateTime berichtsAnfang, DateTime berichtsEnde, MitarbeiterstundenkontoRO.EmployeeDetail empDetail)
{
this.vacationService.Bundesland = "Hessen";
}
public override bool AddServiceRecordToDuration(ServiceRecord item)
{
if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null)
@@ -125,23 +130,66 @@ namespace SHKService
dd.MinutesTotal = 0;
}
}
if (dd.MinutesTotal == 0 && dd.Feiertag != null && dd.SollStunden > 0)
{
dd.MinutesTotal = dd.SollStunden * 60;
}
if (dd.AbsenceTimes != null)
{
foreach (var at in dd.AbsenceTimes)
{
if (at.AbsenceReason.Description == "Krankengeld" || at.AbsenceReason.Description == "Unbezahlten Urlaub")
{
dd.Custom1 = "x"; // String.Format("{0:0.00}", ed.SollProTag * 60);
}
if (AbsenceTimeAufIstStundenAddieren(at))
{
dd.MinutesTotal = dd.SollStunden * 60;
}
}
}
}
return list;
}
protected override decimal GetDuration(ServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
var d = base.GetDuration(sr, ed);
if (sr.ServiceDescription.ServiceCategory.Name == "Arbeitszeit" && sr.ServiceDescription.Name == "Zeitabzug")
{
d *= -1;
}
return d;
}
public override bool IstAnrechenbareAbsenceTime(AbsenceTime item)
{
if (item.AbsenceReason.Description == "Freizeitausgleich")
{
return false;
}
return base.IstAnrechenbareAbsenceTime(item);
}
public override bool IsKrankheitAbsenceTime(AbsenceTime absenceTime)
{
return !IsUrlaubAbsenceTime(absenceTime);
}
public override bool AbsenceTimeAufIstStundenAddieren(AbsenceTime at)
{
if (at.AbsenceReason.Description == "Mutterschutz")
{
return true;
}
return base.AbsenceTimeAufIstStundenAddieren(at);
}
public override bool SollPauseBerechnen()
{
return true;
@@ -188,5 +236,10 @@ namespace SHKService
}
return pausenZeit;
}
public override bool BerechneFeiertageAlsArbeitszeit()
{
return true;
}
}
}

View File

@@ -45,6 +45,7 @@ namespace SHKService
this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell67 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell32 = new DevExpress.XtraReports.UI.XRTableCell();
this.ruleIstFeiertagOderWE = new DevExpress.XtraReports.UI.FormattingRule();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand();
@@ -58,15 +59,19 @@ namespace SHKService
this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell();
this.GroupHeader3 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.lblMonat = new DevExpress.XtraReports.UI.XRLabel();
this.xrTable2 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell25 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell30 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow8 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell();
this.cellRegelarbeitszeit = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow10 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -80,6 +85,7 @@ namespace SHKService
this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell();
this.cellSumHoursSickDecimal = new DevExpress.XtraReports.UI.XRTableCell();
this.cellSumHoursInVacationDecimal = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell33 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTable1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell46 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -118,9 +124,7 @@ namespace SHKService
this.fieldSumHoliday2 = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldIstArbeitszeit = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldUeberstundenGesamt = new DevExpress.XtraReports.UI.CalculatedField();
this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell30 = new DevExpress.XtraReports.UI.XRTableCell();
this.fieldPause = new DevExpress.XtraReports.UI.CalculatedField();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit();
@@ -154,7 +158,7 @@ namespace SHKService
this.xrTableDetail.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrTableDetail.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRowDetail});
this.xrTableDetail.SizeF = new System.Drawing.SizeF(680.0001F, 22F);
this.xrTableDetail.SizeF = new System.Drawing.SizeF(735F, 22F);
this.xrTableDetail.StylePriority.UseBorders = false;
this.xrTableDetail.StylePriority.UseFont = false;
this.xrTableDetail.StylePriority.UsePadding = false;
@@ -169,7 +173,8 @@ namespace SHKService
this.xrTableCell31,
this.xrTableCell12,
this.xrTableCell67,
this.xrTableCell27});
this.xrTableCell27,
this.xrTableCell32});
this.xrTableRowDetail.FormattingRules.Add(this.ruleIstFeiertagOderWE);
this.xrTableRowDetail.Name = "xrTableRowDetail";
this.xrTableRowDetail.Weight = 0.88D;
@@ -184,7 +189,7 @@ namespace SHKService
this.xrTableCell3.StylePriority.UsePadding = false;
this.xrTableCell3.StylePriority.UseTextAlignment = false;
this.xrTableCell3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell3.Weight = 0.090171325518485154D;
this.xrTableCell3.Weight = 0.081154186862521918D;
this.xrTableCell3.XlsxFormatString = "ddd. dd.MM.yyyy";
//
// xrTableCell20
@@ -193,7 +198,7 @@ namespace SHKService
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.ZeitraeumeString", "{0:HH:mm}")});
this.xrTableCell20.Name = "xrTableCell20";
this.xrTableCell20.Text = "xrTableCell20";
this.xrTableCell20.Weight = 0.27051398343498156D;
this.xrTableCell20.Weight = 0.24346256746709186D;
//
// xrTableCell31
//
@@ -203,16 +208,16 @@ namespace SHKService
this.xrTableCell31.StylePriority.UseTextAlignment = false;
this.xrTableCell31.Text = "xrTableCell31";
this.xrTableCell31.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell31.Weight = 0.063119930374871888D;
this.xrTableCell31.Weight = 0.06762848938356511D;
//
// xrTableCell12
//
this.xrTableCell12.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.PauseInMinuten")});
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.fieldPause", "{0:0.00}")});
this.xrTableCell12.Name = "xrTableCell12";
this.xrTableCell12.StylePriority.UseTextAlignment = false;
this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell12.Weight = 0.063119875338662257D;
this.xrTableCell12.Weight = 0.0676284893835602D;
//
// xrTableCell67
//
@@ -222,7 +227,7 @@ namespace SHKService
this.xrTableCell67.StylePriority.UseTextAlignment = false;
this.xrTableCell67.Text = "xrTableCell67";
this.xrTableCell67.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell67.Weight = 0.063120042167172666D;
this.xrTableCell67.Weight = 0.067628491103456534D;
//
// xrTableCell27
//
@@ -232,7 +237,16 @@ namespace SHKService
this.xrTableCell27.StylePriority.UseTextAlignment = false;
this.xrTableCell27.Text = "xrTableCell27";
this.xrTableCell27.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell27.Weight = 0.063119914035996524D;
this.xrTableCell27.Weight = 0.06762847304468976D;
//
// xrTableCell32
//
this.xrTableCell32.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.Custom1")});
this.xrTableCell32.Name = "xrTableCell32";
this.xrTableCell32.StylePriority.UseTextAlignment = false;
this.xrTableCell32.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell32.Weight = 0.06762847304468976D;
//
// ruleIstFeiertagOderWE
//
@@ -291,7 +305,7 @@ namespace SHKService
this.xrTableHeader.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrTableHeader.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRowHeader});
this.xrTableHeader.SizeF = new System.Drawing.SizeF(680F, 30F);
this.xrTableHeader.SizeF = new System.Drawing.SizeF(735F, 30F);
this.xrTableHeader.StylePriority.UseBackColor = false;
this.xrTableHeader.StylePriority.UseBorders = false;
this.xrTableHeader.StylePriority.UseFont = false;
@@ -307,7 +321,8 @@ namespace SHKService
this.xrTableCell7,
this.xrTableCell11,
this.xrTableCell8,
this.xrTableCell10});
this.xrTableCell10,
this.xrTableCell29});
this.xrTableRowHeader.Name = "xrTableRowHeader";
this.xrTableRowHeader.Weight = 0.79999999999999982D;
//
@@ -319,7 +334,7 @@ namespace SHKService
this.xrTableCell5.StylePriority.UseTextAlignment = false;
this.xrTableCell5.Text = "Datum";
this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell5.Weight = 0.090171325629990237D;
this.xrTableCell5.Weight = 0.081154193095780036D;
//
// xrTableCell2
//
@@ -327,7 +342,7 @@ namespace SHKService
this.xrTableCell2.StylePriority.UseTextAlignment = false;
this.xrTableCell2.Text = "Uhrzeit";
this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell2.Weight = 0.27051397634361185D;
this.xrTableCell2.Weight = 0.24346257874098126D;
//
// xrTableCell7
//
@@ -335,7 +350,7 @@ namespace SHKService
this.xrTableCell7.StylePriority.UseTextAlignment = false;
this.xrTableCell7.Text = "Stunden";
this.xrTableCell7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell7.Weight = 0.063119928929937077D;
this.xrTableCell7.Weight = 0.067628495197042171D;
//
// xrTableCell11
//
@@ -343,7 +358,7 @@ namespace SHKService
this.xrTableCell11.StylePriority.UseTextAlignment = false;
this.xrTableCell11.Text = "Pause";
this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell11.Weight = 0.063119928895488023D;
this.xrTableCell11.Weight = 0.06762849516259313D;
//
// xrTableCell8
//
@@ -352,7 +367,7 @@ namespace SHKService
this.xrTableCell8.StylePriority.UseTextAlignment = false;
this.xrTableCell8.Text = "Krank";
this.xrTableCell8.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell8.Weight = 0.06311992750638197D;
this.xrTableCell8.Weight = 0.067628493773487064D;
//
// xrTableCell10
//
@@ -362,7 +377,15 @@ namespace SHKService
this.xrTableCell10.StylePriority.UseTextAlignment = false;
this.xrTableCell10.Text = "Urlaub";
this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell10.Weight = 0.063119926380177924D;
this.xrTableCell10.Weight = 0.067628492647283017D;
//
// xrTableCell29
//
this.xrTableCell29.Name = "xrTableCell29";
this.xrTableCell29.StylePriority.UseTextAlignment = false;
this.xrTableCell29.Text = "ohne LFZ";
this.xrTableCell29.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell29.Weight = 0.067628492647283017D;
//
// GroupHeader3
//
@@ -440,6 +463,30 @@ namespace SHKService
this.xrTableCell25.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell25.Weight = 0.42678331118474744D;
//
// xrTableCell30
//
this.xrTableCell30.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold);
this.xrTableCell30.Name = "xrTableCell30";
this.xrTableCell30.StylePriority.UseFont = false;
this.xrTableCell30.StylePriority.UseTextAlignment = false;
this.xrTableCell30.Text = "Personalnummer:";
this.xrTableCell30.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell30.Weight = 0.24895814510513284D;
//
// xrTableCell14
//
this.xrTableCell14.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.FirstName")});
this.xrTableCell14.Font = new System.Drawing.Font("Arial", 10F);
this.xrTableCell14.Name = "xrTableCell14";
this.xrTableCell14.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F);
this.xrTableCell14.StylePriority.UseFont = false;
this.xrTableCell14.StylePriority.UsePadding = false;
this.xrTableCell14.StylePriority.UseTextAlignment = false;
this.xrTableCell14.Text = "xrTableCell14";
this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell14.Weight = 0.24895814510513284D;
//
// xrTableRow8
//
this.xrTableRow8.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
@@ -472,6 +519,13 @@ namespace SHKService
this.cellRegelarbeitszeit.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.cellRegelarbeitszeit.Weight = 0.5835277006587D;
//
// xrTableCell22
//
this.xrTableCell22.Name = "xrTableCell22";
this.xrTableCell22.StylePriority.UseTextAlignment = false;
this.xrTableCell22.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell22.Weight = 0.34117190073631326D;
//
// xrTableRow10
//
this.xrTableRow10.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
@@ -544,7 +598,7 @@ namespace SHKService
this.xrTable4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrTable4.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow9});
this.xrTable4.SizeF = new System.Drawing.SizeF(570F, 22F);
this.xrTable4.SizeF = new System.Drawing.SizeF(625F, 22F);
this.xrTable4.StylePriority.UseBorders = false;
this.xrTable4.StylePriority.UseFont = false;
this.xrTable4.StylePriority.UsePadding = false;
@@ -558,7 +612,8 @@ namespace SHKService
this.cellSumMinutesTotalDecimal,
this.xrTableCell13,
this.cellSumHoursSickDecimal,
this.cellSumHoursInVacationDecimal});
this.cellSumHoursInVacationDecimal,
this.xrTableCell33});
this.xrTableRow9.Name = "xrTableRow9";
this.xrTableRow9.Weight = 0.87999999999999978D;
//
@@ -570,7 +625,7 @@ namespace SHKService
this.xrTableCell64.StylePriority.UseTextAlignment = false;
this.xrTableCell64.Text = "Summe:";
this.xrTableCell64.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell64.Weight = 0.26149405118689462D;
this.xrTableCell64.Weight = 0.22542590687581596D;
//
// cellSumMinutesTotalDecimal
//
@@ -584,18 +639,19 @@ namespace SHKService
this.cellSumMinutesTotalDecimal.Summary = xrSummary1;
this.cellSumMinutesTotalDecimal.Text = "cellSumMinutesTotalDecimal";
this.cellSumMinutesTotalDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.cellSumMinutesTotalDecimal.Weight = 0.0631191946273484D;
this.cellSumMinutesTotalDecimal.Weight = 0.06762776770185383D;
//
// xrTableCell13
//
this.xrTableCell13.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.PauseInMinuten")});
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.fieldPause")});
this.xrTableCell13.Name = "xrTableCell13";
this.xrTableCell13.StylePriority.UseTextAlignment = false;
xrSummary2.FormatString = "{0:0.00}";
xrSummary2.Running = DevExpress.XtraReports.UI.SummaryRunning.Report;
this.xrTableCell13.Summary = xrSummary2;
this.xrTableCell13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell13.Weight = 0.0631191946273484D;
this.xrTableCell13.Weight = 0.06762776770185383D;
//
// cellSumHoursSickDecimal
//
@@ -610,7 +666,7 @@ namespace SHKService
this.cellSumHoursSickDecimal.Summary = xrSummary3;
this.cellSumHoursSickDecimal.Text = "cellSumHoursSickDecimal";
this.cellSumHoursSickDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.cellSumHoursSickDecimal.Weight = 0.0631193595441027D;
this.cellSumHoursSickDecimal.Weight = 0.067627767511746345D;
//
// cellSumHoursInVacationDecimal
//
@@ -626,7 +682,14 @@ namespace SHKService
this.cellSumHoursInVacationDecimal.Summary = xrSummary4;
this.cellSumHoursInVacationDecimal.Text = "cellSumHoursInVacationDecimal";
this.cellSumHoursInVacationDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.cellSumHoursInVacationDecimal.Weight = 0.0631192564471769D;
this.cellSumHoursInVacationDecimal.Weight = 0.067627774486061748D;
//
// xrTableCell33
//
this.xrTableCell33.Name = "xrTableCell33";
this.xrTableCell33.StylePriority.UseTextAlignment = false;
this.xrTableCell33.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell33.Weight = 0.067627774486061748D;
//
// xrTable1
//
@@ -1016,36 +1079,12 @@ namespace SHKService
this.fieldUeberstundenGesamt.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldUeberstundenGesamt.Name = "fieldUeberstundenGesamt";
//
// xrTableCell14
// fieldPause
//
this.xrTableCell14.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.FirstName")});
this.xrTableCell14.Font = new System.Drawing.Font("Arial", 10F);
this.xrTableCell14.Name = "xrTableCell14";
this.xrTableCell14.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F);
this.xrTableCell14.StylePriority.UseFont = false;
this.xrTableCell14.StylePriority.UsePadding = false;
this.xrTableCell14.StylePriority.UseTextAlignment = false;
this.xrTableCell14.Text = "xrTableCell14";
this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell14.Weight = 0.24895814510513284D;
//
// xrTableCell22
//
this.xrTableCell22.Name = "xrTableCell22";
this.xrTableCell22.StylePriority.UseTextAlignment = false;
this.xrTableCell22.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell22.Weight = 0.34117190073631326D;
//
// xrTableCell30
//
this.xrTableCell30.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold);
this.xrTableCell30.Name = "xrTableCell30";
this.xrTableCell30.StylePriority.UseFont = false;
this.xrTableCell30.StylePriority.UseTextAlignment = false;
this.xrTableCell30.Text = "Personalnummer:";
this.xrTableCell30.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell30.Weight = 0.24895814510513284D;
this.fieldPause.DataMember = "EmployeeDetailList.Days";
this.fieldPause.Expression = "[PauseInMinuten]/60";
this.fieldPause.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldPause.Name = "fieldPause";
//
// bindingSource1
//
@@ -1069,13 +1108,14 @@ namespace SHKService
this.fieldSumHours,
this.fieldSumHoliday2,
this.fieldIstArbeitszeit,
this.fieldUeberstundenGesamt});
this.fieldUeberstundenGesamt,
this.fieldPause});
this.DataSource = this.bindingSource1;
this.DisplayName = "Mitarbeiterstundenkonto";
this.Font = new System.Drawing.Font("Arial", 8F);
this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] {
this.ruleIstFeiertagOderWE});
this.Margins = new System.Drawing.Printing.Margins(75, 50, 50, 50);
this.Margins = new System.Drawing.Printing.Margins(40, 40, 50, 50);
this.PageHeight = 1169;
this.PageWidth = 827;
this.PaperKind = System.Drawing.Printing.PaperKind.A4;
@@ -1184,5 +1224,9 @@ namespace SHKService
private DevExpress.XtraReports.UI.XRTableCell xrTableCell30;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell14;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell22;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell29;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell32;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell33;
private DevExpress.XtraReports.UI.CalculatedField fieldPause;
}
}

View File

@@ -347,6 +347,16 @@ namespace SHKServiceSBD
return true;
}
public override bool BerechneFeiertageAlsArbeitszeit()
{
return true;
}
public override bool AbsenceTimeAufIstStundenAddieren(AbsenceTime at)
{
return false;
}
public override MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
var dd = base.CreateDayDetail(date, ed);
@@ -364,7 +374,6 @@ namespace SHKServiceSBD
return 1;
}
return base.GetFeiertagsFaktor(start);
}

View File

@@ -9,152 +9,152 @@ using BS.Shared.Services;
namespace VSDHammReports
{
public class VSDCalculations : LWLCalculations
{
//public class VSDCalculations : LWLCalculations
//{
public override decimal? GetApprovedHoursTotal(SupportConceptCostBearerRelDC relDC, bool useIsCalculationWithFactor)
{
if (relDC.ApprovalPeriodList == null || !relDC.GetApprovedDuration().HasValue)
{
return null;
}
// public override decimal? GetApprovedHoursTotal(SupportConceptCostBearerRelDC relDC, bool useIsCalculationWithFactor)
// {
// if (relDC.ApprovalPeriodList == null || !relDC.GetApprovedDuration().HasValue)
// {
// return null;
// }
if (!useIsCalculationWithFactor)
{
return base.GetApprovedHoursTotal(relDC, useIsCalculationWithFactor);
}
// if (!useIsCalculationWithFactor)
// {
// return base.GetApprovedHoursTotal(relDC, useIsCalculationWithFactor);
// }
decimal hoursTotal = 0;
// decimal hoursTotal = 0;
foreach (var scap in relDC.ApprovalPeriodList)
{
var newhoursTotal = this.GetApprovedHoursTotal(scap, relDC.CostBearer.CostRatePeriods);
// foreach (var scap in relDC.ApprovalPeriodList)
// {
// var newhoursTotal = this.GetApprovedHoursTotal(scap, relDC.CostBearer.CostRatePeriods);
if (newhoursTotal.HasValue)
{
newhoursTotal = ApplyIsCalculationWithFactor(relDC, scap, newhoursTotal);
hoursTotal += newhoursTotal.Value;
}
}
// if (newhoursTotal.HasValue)
// {
// newhoursTotal = ApplyIsCalculationWithFactor(relDC, scap, newhoursTotal);
// hoursTotal += newhoursTotal.Value;
// }
// }
hoursTotal = Math.Round(hoursTotal, 10, MidpointRounding.AwayFromZero);
return hoursTotal;
}
// hoursTotal = Math.Round(hoursTotal, 10, MidpointRounding.AwayFromZero);
// return hoursTotal;
// }
public override decimal? GetApprovedHoursForPeriod(SupportConceptCostBearerRelDC relDC,
SupportConceptApprovalPeriodDC scap,
List<CostRatePeriodDC> costRatePeriods,
DateTime? pStart,
DateTime? pEnd,
bool useIsCalculationWithFactor)
{
decimal? approvedHours = GetApprovedHoursForPeriod(scap, costRatePeriods, pStart, pEnd);
if (approvedHours.HasValue && useIsCalculationWithFactor)
approvedHours = ApplyIsCalculationWithFactor(relDC, scap, approvedHours);
return approvedHours;
// public override decimal? GetApprovedHoursForPeriod(SupportConceptCostBearerRelDC relDC,
// SupportConceptApprovalPeriodDC scap,
// List<CostRatePeriodDC> costRatePeriods,
// DateTime? pStart,
// DateTime? pEnd,
// bool useIsCalculationWithFactor)
// {
// decimal? approvedHours = GetApprovedHoursForPeriod(scap, costRatePeriods, pStart, pEnd);
// if (approvedHours.HasValue && useIsCalculationWithFactor)
// approvedHours = ApplyIsCalculationWithFactor(relDC, scap, approvedHours);
// return approvedHours;
}
// }
public decimal? ApplyIsCalculationWithFactor(SupportConceptCostBearerRelDC relDC, SupportConceptApprovalPeriodDC scap, decimal? valueToApply)
{
if (valueToApply.HasValue && relDC .CostBearer != null && relDC.CostBearer.IsCalculatingWithFactor)
{
if (relDC.CostBearer.CostRatePeriods != null)
{
var rateFactorsInSpan = relDC.CostBearer.CostRatePeriods.GetSpans(CostRatePeriodType.RateFactor, scap.StartDate.Value.Date, scap.EndDate.Value.Date).ToList();
// public decimal? ApplyIsCalculationWithFactor(SupportConceptCostBearerRelDC relDC, SupportConceptApprovalPeriodDC scap, decimal? valueToApply)
// {
// if (valueToApply.HasValue && relDC .CostBearer != null && relDC.CostBearer.IsCalculatingWithFactor)
// {
// if (relDC.CostBearer.CostRatePeriods != null)
// {
// var rateFactorsInSpan = relDC.CostBearer.CostRatePeriods.GetSpans(CostRatePeriodType.RateFactor, scap.StartDate.Value.Date, scap.EndDate.Value.Date).ToList();
if (rateFactorsInSpan.Count > 1)
{
decimal totalhours = 0;
// if (rateFactorsInSpan.Count > 1)
// {
// decimal totalhours = 0;
var totalDays = (scap.EndDate.Value - scap.StartDate.Value).Days + 1;
foreach (var keyValuePair in rateFactorsInSpan)
{
var span = keyValuePair.Value;
var rf = keyValuePair.Key;
// var totalDays = (scap.EndDate.Value - scap.StartDate.Value).Days + 1;
// foreach (var keyValuePair in rateFactorsInSpan)
// {
// var span = keyValuePair.Value;
// var rf = keyValuePair.Key;
if (rf.CostRateValue.HasValue && rf.CostRateValue.Value > 0)
{
var spanDays = (span.EndDate - span.StartDate).Days + 1;
// if (rf.CostRateValue.HasValue && rf.CostRateValue.Value > 0)
// {
// var spanDays = (span.EndDate - span.StartDate).Days + 1;
decimal prozent = (spanDays/(decimal)totalDays);
decimal hours = valueToApply.Value * prozent;
// decimal prozent = (spanDays/(decimal)totalDays);
// decimal hours = valueToApply.Value * prozent;
hours = (hours * 100) / (rf.CostRateValue.Value + 100);
// hours = (hours * 100) / (rf.CostRateValue.Value + 100);
totalhours += hours;
}
// totalhours += hours;
// }
}
// }
return totalhours;
}
else
{
decimal? rateFactor =
relDC.CostBearer.CostRatePeriods.GetValidRateValueForDate(CostRatePeriodType.RateFactor, scap.StartDate.Value);
if (rateFactor.HasValue && rateFactor.Value > 0)
valueToApply = (valueToApply.Value*100)/(rateFactor.Value + 100);
}
}
// return totalhours;
// }
// else
// {
// decimal? rateFactor =
// relDC.CostBearer.CostRatePeriods.GetValidRateValueForDate(CostRatePeriodType.RateFactor, scap.StartDate.Value);
// if (rateFactor.HasValue && rateFactor.Value > 0)
// valueToApply = (valueToApply.Value*100)/(rateFactor.Value + 100);
// }
// }
}
return valueToApply;
}
// }
// return valueToApply;
// }
public override decimal? GetApprovedHoursForPeriod(SupportConceptApprovalPeriodDC scap,
List<CostRatePeriodDC> costRatePeriods,
DateTime? pStart,
DateTime? pEnd)
{
if (!pStart.HasValue || !pEnd.HasValue)
{
return null;
}
if (scap.ApprovedBEInterval.HasValue && scap.ApprovedBEPerInterval.HasValue)
{
if (scap.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Monthly)
{
var months = GetTotalMonths(pStart.Value, pEnd.Value);
return months * scap.ApprovedBEPerInterval.Value;
}
else if (scap.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Quarterly)
{
var qs = GetTotalQuarters(pStart.Value, pEnd.Value);
return qs * scap.ApprovedBEPerInterval.Value;
}
}
// public override decimal? GetApprovedHoursForPeriod(SupportConceptApprovalPeriodDC scap,
// List<CostRatePeriodDC> costRatePeriods,
// DateTime? pStart,
// DateTime? pEnd)
// {
// if (!pStart.HasValue || !pEnd.HasValue)
// {
// return null;
// }
// if (scap.ApprovedBEInterval.HasValue && scap.ApprovedBEPerInterval.HasValue)
// {
// if (scap.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Monthly)
// {
// var months = GetTotalMonths(pStart.Value, pEnd.Value);
// return months * scap.ApprovedBEPerInterval.Value;
// }
// else if (scap.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Quarterly)
// {
// var qs = GetTotalQuarters(pStart.Value, pEnd.Value);
// return qs * scap.ApprovedBEPerInterval.Value;
// }
// }
var periodInDays = (pEnd.Value.Date - pStart.Value.Date).Days + 1;
// var periodInDays = (pEnd.Value.Date - pStart.Value.Date).Days + 1;
return this.GetApprovedHoursPerDay(scap, costRatePeriods) * periodInDays;
}
// return this.GetApprovedHoursPerDay(scap, costRatePeriods) * periodInDays;
// }
public override decimal? GetApprovedHoursPerDay(SupportConceptApprovalPeriodDC scap,
List<CostRatePeriodDC> costRatePeriods)
{
if (scap.EndDate.HasValue && scap.StartDate.HasValue && scap.ApprovedBEPerInterval.HasValue && !scap.ApprovedBETotal.HasValue
&& scap.ApprovedBEInterval.HasValue && scap.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Weekly)
{
var scapDurationInDays = (scap.EndDate.Value - scap.StartDate.Value).Days + 1;
// public override decimal? GetApprovedHoursPerDay(SupportConceptApprovalPeriodDC scap,
// List<CostRatePeriodDC> costRatePeriods)
// {
// if (scap.EndDate.HasValue && scap.StartDate.HasValue && scap.ApprovedBEPerInterval.HasValue && !scap.ApprovedBETotal.HasValue
// && scap.ApprovedBEInterval.HasValue && scap.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Weekly)
// {
// var scapDurationInDays = (scap.EndDate.Value - scap.StartDate.Value).Days + 1;
decimal weeks = Math.Round(scapDurationInDays * 0.1427m, 2, MidpointRounding.AwayFromZero);
decimal total = weeks * scap.ApprovedBEPerInterval.Value;
// decimal weeks = Math.Round(scapDurationInDays * 0.1427m, 2, MidpointRounding.AwayFromZero);
// decimal total = weeks * scap.ApprovedBEPerInterval.Value;
decimal ah = 0;
if (scapDurationInDays != 0)
ah = total / scapDurationInDays;
return ah;
// decimal ah = 0;
// if (scapDurationInDays != 0)
// ah = total / scapDurationInDays;
// return ah;
}
return base.GetApprovedHoursPerDay(scap, costRatePeriods);
// }
// return base.GetApprovedHoursPerDay(scap, costRatePeriods);
}
// }
}
//}
}

View File

@@ -27,6 +27,11 @@ namespace BeWo.Service.Invoicing
String id = c2s.CostBearer.ID;
var calc = PluginLoader.FindClass<Calculations>(id);
if (calc == null)
{
calc = Calculations.GetInstance(id);
}
var relDc = c2s.MapToNewDC();
var apListFehlkontakt = new List<ApprovalPeriod>();