using System; using System.Data; using Ease.Core.Model; using Ease.Core.DataAccess; using Ease.Core; using System.Collections.Generic; using Ease.Core.Utility; using HRM.BO; using System.Linq; using System.Text; using Microsoft.AspNetCore.Http; using Microsoft.Data.SqlClient; namespace HRM.DA { public class ProdBonusProcessService : ServiceTemplate, IProdBonusProcessService { #region Object Mapping private void MapObject(ProdBonusProcess oProdBonusProcess, DataReader oReader) { base.SetObjectID(oProdBonusProcess, (oReader.GetInt32("ProdBonusProcessID").Value)); oProdBonusProcess.SalaryMonth = oReader.GetDateTime("SalaryMonth").Value; oProdBonusProcess.ProcessDate = oReader.GetDateTime("ProcessDate").Value; this.SetObjectState(oProdBonusProcess, ObjectState.Saved); } protected override T CreateObject(DataReader oReader) { ProdBonusProcess oProdBonusProcess = new ProdBonusProcess(); MapObject(oProdBonusProcess, oReader); return oProdBonusProcess as T; } private void MapProdBonusProcessEmpObject(ProdBonusProcessEmp oProdBonusProcessEmp, DataReader oReader) { SetObjectID(oProdBonusProcessEmp, (oReader.GetInt32("ProdBonusProcessEmpID").Value)); oProdBonusProcessEmp.EmployeeID = oReader.GetInt32("EmployeeID", 0); oProdBonusProcessEmp.Description = oReader.GetString("Description"); oProdBonusProcessEmp.ProdBonusProcessID = oReader.GetInt32("ProdBonusProcessID", 0); oProdBonusProcessEmp.Amount = oReader.GetDouble("Amount").Value == 0.0 ? 0.0 : oReader.GetDouble("Amount").Value; this.SetObjectState(oProdBonusProcessEmp, ObjectState.Saved); } private ProdBonusProcessEmp CreateProdBonusProcessEmpObject(DataReader oReader) { ProdBonusProcessEmp item = new ProdBonusProcessEmp(); MapProdBonusProcessEmpObject(item, oReader); return item; } protected List CreateProdBonusProcessEmpObjects(DataReader oReader) { List oItems = new List(); while (oReader.Read()) { ProdBonusProcessEmp item = CreateProdBonusProcessEmpObject(oReader); oItems.Add(item); } return oItems; } private void MapProdBonusProcessItemObject(ProdBonusProcessItem oProdBonusProcessItem, DataReader oReader) { SetObjectID(oProdBonusProcessItem, (oReader.GetInt32("ProdBonusProcessItemID").Value)); oProdBonusProcessItem.ProdBonusSetupID = oReader.GetInt32("ProdBonusSetupID", 0); oProdBonusProcessItem.ProdBonusProcessID = oReader.GetInt32("ProdBonusProcessID", 0); oProdBonusProcessItem.EmployeeID = oReader.GetInt32("EmployeeID", 0); oProdBonusProcessItem.ProdBonusLineID = oReader.GetInt32("ProdBonusLineID", 0); oProdBonusProcessItem.Amount = oReader.GetDouble("Amount").Value == 0.0 ? 0.0 : oReader.GetDouble("Amount").Value; oProdBonusProcessItem.OTHour = oReader.GetDouble("OTHour").Value == 0.0 ? 0.0 : oReader.GetDouble("OTHour").Value; oProdBonusProcessItem.AchievePercent = oReader.GetDouble("AchievePercent").Value == 0.0 ? 0.0 : oReader.GetDouble("AchievePercent").Value; oProdBonusProcessItem.WorkingHour = oReader.GetDouble("WorkingHour").Value == 0.0 ? 0.0 : oReader.GetDouble("WorkingHour").Value; this.SetObjectState(oProdBonusProcessItem, ObjectState.Saved); } private ProdBonusProcessItem CreateProdBonusProcessItemObject(DataReader oReader) { ProdBonusProcessItem item = new ProdBonusProcessItem(); MapProdBonusProcessItemObject(item, oReader); return item; } protected List CreateProdBonusProcessItemObjects(DataReader oReader) { List oItems = new List(); while (oReader.Read()) { ProdBonusProcessItem item = CreateProdBonusProcessItemObject(oReader); oItems.Add(item); } return oItems; } #endregion #region Service Implementation #region Get All public List Get() { List oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.Get(tc)); oProdBonusProcess = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } #endregion #region Get All public List Get(DateTime dtSalaryMonth) { List oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.Get(tc, dtSalaryMonth)); oProdBonusProcess = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } public DataSet GetDetailItems(DateTime dtSalaryMonth) { DataSet oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); oProdBonusProcess = ProdBonusProcessDA.GetDetailItems(tc, dtSalaryMonth); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } public List GetProdBonusProcessEmps(int nID) { List oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.GetProdBonusProcessEmp(tc, nID)); oProdBonusProcess = this.CreateProdBonusProcessEmpObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } public List GetAllProdBonusProcessEmps() { List oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.GetAllProdBonusProcessEmps(tc)); oProdBonusProcess = this.CreateProdBonusProcessEmpObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } public List GetProdBonusProcessItems(int nID) { List oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.GetProdBonusProcessItem(tc, nID)); oProdBonusProcess = this.CreateProdBonusProcessItemObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } public List GetAllProdBonusProcessItems() { List oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.GetAllProdBonusProcessItems(tc)); oProdBonusProcess = this.CreateProdBonusProcessItemObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } #endregion #region Get Single public ProdBonusProcess Get(int id) { ProdBonusProcess oProdBonusProcess = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.Get(tc, id)); oProdBonusProcess = this.CreateObject(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcess; } public ProdBonusProcessEmp GetProdBonusEmp(int Id, DateTime salaryMonth) { ProdBonusProcessEmp oProdBonusProcessEmp = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(ProdBonusProcessDA.GetProdBonusEmp(tc, Id, salaryMonth)); if (oreader.Read()) oProdBonusProcessEmp = this.CreateProdBonusProcessEmpObject(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonusProcessEmp; } #endregion #region Get DataSet For Report public DataSet GetMontlyProdBonus(DateTime dBonusMonth) { DataSet oProdBonus = new DataSet(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); oProdBonus = BonusProcessDA.GetMontlyProdBonus(tc, dBonusMonth); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonus; } public DataSet GetProdBonusDetail(int designID) { DataSet oProdBonus = new DataSet(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); oProdBonus = BonusProcessDA.GetProdBonusDetail(tc, designID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonus; } public DataSet EmpDesignWiseProdBonus(DateTime dBonusMonth) { DataSet oProdBonus = new DataSet(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); oProdBonus = BonusProcessDA.EmpDesignWiseProdBonus(tc, dBonusMonth); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oProdBonus; } #endregion #region Insert public void Save(List items) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); if (items.Count > 0) ProdBonusProcessDA.DeleteBySalaryMonth(tc, items[0].SalaryMonth); foreach (ProdBonusProcess item in items) { tc.End(); item.ProdBonusProcessEmps = new ProdBonusProcessService().GetProdBonusProcessEmps(item.ID); item.ProdBonusProcessItems = new ProdBonusProcessService().GetProdBonusProcessItems(item.ID); tc = TransactionContext.Begin(true); int id = tc.GenerateID("ProdBonusProcess", "ProdBonusProcessID"); base.SetObjectID(item, (id)); ProdBonusProcessDA.Save(tc, item); foreach (ProdBonusProcessEmp og in item.ProdBonusProcessEmps) { int id1 = tc.GenerateID("ProdBonusProcessEmp", "ProdBonusProcessEmpID"); base.SetObjectID(og, (id1)); og.ProdBonusProcessID = item.ID; ProdBonusProcessDA.SaveEmp(tc, og); } foreach (ProdBonusProcessItem og in item.ProdBonusProcessItems) { int id1 = tc.GenerateID("ProdBonusProcessItem", "ProdBonusProcessItemID"); base.SetObjectID(og, (id1)); og.ProdBonusProcessID = item.ID; ProdBonusProcessDA.SaveItem(tc, og); } } tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public void Save(ProdBonusProcess item) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); ProdBonusProcessDA.DeleteBySalaryMonth(tc, item.SalaryMonth); int id = tc.GenerateID("ProdBonusProcess", "ProdBonusProcessID"); base.SetObjectID(item, (id)); ProdBonusProcessDA.Save(tc, item); DataTable prodemp = new DataTable("ProdBonusProcessEmp"); prodemp.Columns.Add(new DataColumn("ProdBonusProcessEmpID", typeof(int))); prodemp.Columns.Add(new DataColumn("ProdBonusProcessID", typeof(int))); prodemp.Columns.Add(new DataColumn("EmployeeID", typeof(int))); // NULL prodemp.Columns.Add(new DataColumn("Amount", typeof(double))); // NULL prodemp.Columns.Add(new DataColumn("Description", typeof(string))); int id1 = tc.GenerateID("ProdBonusProcessEmp", "ProdBonusProcessEmpID"); foreach (ProdBonusProcessEmp og in item.ProdBonusProcessEmps) { id1 = id1 + 1; prodemp.Rows.Add( id1, item.ID, og.EmployeeID, og.Amount, og.Description ); } using (SqlBulkCopy bulkCopy = new SqlBulkCopy((SqlConnection)tc.Connection, SqlBulkCopyOptions.Default, (SqlTransaction)tc.Transaction)) { bulkCopy.BulkCopyTimeout = 6000; // in seconds bulkCopy.DestinationTableName = "ProdBonusProcessEmp"; bulkCopy.WriteToServer(prodemp); } //foreach (ProdBonusProcessItem og in item.ProdBonusProcessItems) //{ // int id1 = tc.GenerateID("ProdBonusProcessItem", "ProdBonusProcessItemID"); // base.SetObjectID(og, (id1)); // og.ProdBonusProcessID = item.ID; // ProdBonusProcessDA.SaveItem(tc, og); //} DataTable attnProcessEntryTable = new DataTable("ProdBonusProcessItem"); attnProcessEntryTable.Columns.Add(new DataColumn("ProdBonusProcessItemID", typeof(int))); attnProcessEntryTable.Columns.Add(new DataColumn("ProdBonusProcessID", typeof(int))); attnProcessEntryTable.Columns.Add(new DataColumn("ProdBonusSetupID", typeof(int))); attnProcessEntryTable.Columns.Add(new DataColumn("Amount", typeof(double))); // NULL attnProcessEntryTable.Columns.Add(new DataColumn("ProdBonusLineID", typeof(int))); // NULL attnProcessEntryTable.Columns.Add(new DataColumn("OTHour", typeof(double))); attnProcessEntryTable.Columns.Add(new DataColumn("AchievePercent", typeof(double))); attnProcessEntryTable.Columns.Add(new DataColumn("WorkingHour", typeof(double))); attnProcessEntryTable.Columns.Add(new DataColumn("EmployeeID", typeof(int))); // NULL id1 = tc.GenerateID("ProdBonusProcessItem", "ProdBonusProcessItemID"); foreach (ProdBonusProcessItem og in item.ProdBonusProcessItems) { id1 = id1 + 1; attnProcessEntryTable.Rows.Add( id1, item.ID, og.ProdBonusSetupID, og.Amount, og.ProdBonusLineID, og.OTHour, og.AchievePercent, og.WorkingHour, og.EmployeeID ); } using (SqlBulkCopy bulkCopy = new SqlBulkCopy((SqlConnection)tc.Connection, SqlBulkCopyOptions.Default, (SqlTransaction)tc.Transaction)) { bulkCopy.BulkCopyTimeout = 6000; // in seconds bulkCopy.DestinationTableName = "ProdBonusProcessItem"; bulkCopy.WriteToServer(attnProcessEntryTable); } new ADParameterEmployeeService().BulkSave(tc, item.ADParamEmps, item.SalaryMonth); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } #endregion #region Delete public void Delete(int id) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); ProdBonusProcessDA.Delete(tc, id); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } #endregion #region Process public ProdBonusProcess Process(List _oProductionBonusSetups, DateTime dtpSalaryMonth, int payrollTypeId) { ProdBonusProcess _oProdBonusProcess = new ProdBonusProcess(); try { _oProdBonusProcess.SalaryMonth = GlobalFunctions.LastDateOfMonth(dtpSalaryMonth); _oProdBonusProcess.ProcessDate = DateTime.Today; _oProdBonusProcess.ProdBonusProcessItems = new List(); _oProdBonusProcess.ProdBonusProcessEmps = new List(); List prodAttn = null; List oProcessEmps = new List(); //List oShifts = new ShiftService().GetAllShift(); Shift oShift = null; ProdBonusProcessEmp oProcessEmp = null; int setupID = 21; DateTime? bonusIntime = DateTime.MinValue; DateTime? bonusOuttime = DateTime.MinValue; ADParameter _ADParam = new ADParameterService().Get(setupID, payrollTypeId); List prodAttns = new ProdBonusAttnService().GetBySetupIDs(_oProductionBonusSetups.CommaSeparatedIDs()); List allProdBonusSupervisors = new ProdBonusSupervisorService().GetBySetupLineIDByInSQL(_oProductionBonusSetups.CommaSeparatedIDs() ); List alldailyAttm = new DailyAttnProcessService().GetshotListForProdBonus(_oProductionBonusSetups.CommaSeparatedIDs(), GlobalFunctions.FirstDateOfMonth(_oProdBonusProcess.SalaryMonth.AddMonths(-3)), _oProdBonusProcess.SalaryMonth); //DataTable empBasic = new EmployeeService().GetBasicSalary(); DataTable empBasic = new EmployeeService().GetBasicSalaryWithDiscontinue(_oProdBonusProcess.SalaryMonth); foreach (ProductionBonusSetup oProductionBonusSetup in _oProductionBonusSetups) { //if (oProductionBonusSetup.ID != 12583) //{ continue; } prodAttn = prodAttns.Where(x => x.ProdBonusSetupID == oProductionBonusSetup.ID).ToList();//ToObjectsTemplate(); ProdBonusProcessItem oProcessItem = null; foreach (ProdBonusLine oLine in oProductionBonusSetup.ProductionBonusLinesNew) { List lineAttns = prodAttns.Where(x => x.ProdBonusSetupID == oProductionBonusSetup.ID && x.ProdBonusLineID == oLine.ID).ToList(); var gropBonuAttn = from attn in lineAttns group attn by attn.EmployeeID into newGroup orderby newGroup.Key select newGroup; foreach (var item in gropBonuAttn) { double oth = 0; double hour = 0; double basicSal = 0; DataRow[] foundRows = empBasic.Select("EMPLOYEEID =" + item.Key.ToString()); if (foundRows != null) { foreach (DataRow dr in foundRows) { basicSal = Convert.ToDouble(dr["BASICSALARY"]); } } //if (item.Key == 2991) //{ } bool isSuperVisor = allProdBonusSupervisors.FindIndex(x => x.EmployeeID == item.Key && x.ProdBonusLineID == oLine.ID) == -1 ? false : true; List dailyAttm = alldailyAttm.FindAll(x => x.EmployeeID == item.Key); if (isSuperVisor == false) { #region Not Supervisor foreach (var tAtt in item) { DailyAttnProcess dailyAtt = dailyAttm.FirstOrDefault(o => o.AttnDate.Date == tAtt.InTime.Date); double wh = 0; if (dailyAtt != null) { bonusIntime = dailyAtt.InTime; bonusOuttime = dailyAtt.OutTime; if (dailyAtt.OutTime != null && dailyAtt.InTime != null && dailyAtt.OutTime != DateTime.MinValue && dailyAtt.InTime != DateTime.MinValue) { // oShift = oShifts.FirstOrDefault(x => x.ID == dailyAtt.ShiftID); if (oProductionBonusSetup.FromDate.Date == dailyAtt.AttnDate.Date) bonusIntime = oProductionBonusSetup.FromDate > dailyAtt.InTime ? oProductionBonusSetup.FromDate : dailyAtt.InTime; else if (dailyAtt.InTime.GetValueOrDefault().TimeOfDay < tAtt.InTime.TimeOfDay) bonusIntime = dailyAtt.InTime.GetValueOrDefault().Date.AddHours(tAtt.InTime.Hour).AddMinutes(tAtt.InTime.Minute); //if (oProductionBonusSetup.ToDate.Date == dailyAtt.AttnDate.Date) // bonusOuttime = oProductionBonusSetup.ToDate < dailyAtt.OutTime ? oProductionBonusSetup.ToDate : dailyAtt.OutTime; else if (dailyAtt.OutTime.GetValueOrDefault().TimeOfDay > tAtt.OutTime.TimeOfDay) bonusOuttime = dailyAtt.OutTime.GetValueOrDefault().Date.AddHours(tAtt.OutTime.Hour).AddMinutes(tAtt.OutTime.Minute); //else if (oShift != null && dailyAtt.InTime.GetValueOrDefault().TimeOfDay < oShift.InTime.TimeOfDay) // bonusIntime = dailyAtt.InTime.GetValueOrDefault().Date.AddHours(oShift.InTime.Hour).AddMinutes(oShift.InTime.Minute); TimeSpan ts = (TimeSpan)(bonusOuttime - bonusIntime); if (ts.Minutes < 16 && ts.Hours < 5) wh = ts.Hours; else if (ts.Minutes < 16) wh = ts.Hours - oProductionBonusSetup.BreakHour; else if (ts.TotalHours < 5) wh = ts.TotalHours; else wh = ts.TotalHours - oProductionBonusSetup.BreakHour; hour += wh < 0 ? 0 : wh; } } } oth = (double)hour * (double)oProductionBonusSetup.OTHour / (double)oLine.ScheduledHour; if (oth > 0 && !double.IsInfinity(oth)) { oProcessItem = new ProdBonusProcessItem(); oProcessItem.EmployeeID = item.Key; oProcessItem.OTHour = oth; oProcessItem.Amount = Math.Round(((double)basicSal / 208 * oth) * 2, 2); //if(oProcessItem.EmployeeID == 55388) //{ //} //oProcessItem.Amount = Math.Round( (new EmployeeService().Get(item.Key).BasicSalary / 208 * oth) * 2, 2); oProcessItem.AchievePercent = 0; oProcessItem.WorkingHour = hour; oProcessItem.ProdBonusSetupID = oProductionBonusSetup.ID; oProcessItem.ProdBonusLineID = oLine.ID; oProcessItem.Description = oProductionBonusSetup.ProgramName; _oProdBonusProcess.ProdBonusProcessItems.Add(oProcessItem); } #endregion Not Supervisor } else { foreach (ProdBonusAttn tAtt in item) { DailyAttnProcess dailyAtt = dailyAttm.FirstOrDefault(o => o.AttnDate.Date == tAtt.InTime.Date); double wh = 0; if (dailyAtt != null) { if (dailyAtt.OutTime != null && dailyAtt.InTime != null && dailyAtt.OutTime != DateTime.MinValue && dailyAtt.InTime != DateTime.MinValue) { bonusIntime = dailyAtt.InTime; bonusOuttime = dailyAtt.OutTime; //oShift = oShifts.FirstOrDefault(x => x.ID == dailyAtt.ShiftID); if (oProductionBonusSetup.FromDate.Date == dailyAtt.AttnDate.Date) bonusIntime = oProductionBonusSetup.FromDate > dailyAtt.InTime ? oProductionBonusSetup.FromDate : dailyAtt.InTime; else if (dailyAtt.InTime.GetValueOrDefault().TimeOfDay < tAtt.InTime.TimeOfDay) bonusIntime = dailyAtt.InTime.GetValueOrDefault().Date.AddHours(tAtt.InTime.Hour).AddMinutes(tAtt.InTime.Minute); //if (oProductionBonusSetup.ToDate.Date == dailyAtt.AttnDate.Date) // bonusOuttime = oProductionBonusSetup.ToDate < dailyAtt.OutTime ? oProductionBonusSetup.ToDate : dailyAtt.OutTime; else if (dailyAtt.OutTime.GetValueOrDefault().TimeOfDay > tAtt.OutTime.TimeOfDay) bonusOuttime = dailyAtt.OutTime.GetValueOrDefault().Date.AddHours(tAtt.OutTime.Hour).AddMinutes(tAtt.OutTime.Minute); //else if (oShift != null && dailyAtt.InTime.GetValueOrDefault().TimeOfDay < oShift.InTime.TimeOfDay) // bonusIntime = dailyAtt.InTime.GetValueOrDefault().Date.AddHours(oShift.InTime.Hour).AddMinutes(oShift.InTime.Minute); TimeSpan ts = (TimeSpan)(bonusOuttime - bonusIntime); if (ts.Minutes < 16 && ts.Hours < 5) wh = ts.Hours; else if (ts.Minutes < 16) wh = ts.Hours - oProductionBonusSetup.BreakHour; else if (ts.TotalHours < 5) wh = ts.TotalHours; else wh = ts.TotalHours - oProductionBonusSetup.BreakHour; // hour += ts.Hours < 0 ? 0 : ts.Hours; hour += wh < 0 ? 0 : wh; } } } oth = (double)hour * (double)oProductionBonusSetup.OTHour / (double)oLine.ScheduledHour; if (oth > 0 && !double.IsInfinity(oth)) { oProcessItem = new ProdBonusProcessItem(); oProcessItem.EmployeeID = item.Key; oProcessItem.OTHour = oth; if (oLine.ProdBonusSupervisors == null) oLine.ProdBonusSupervisors = allProdBonusSupervisors.FindAll(x => x.ProdBonusSetupID == oProductionBonusSetup.ID && x.ProdBonusLineID == oLine.ID); //Amount mismatch hude ammount //if (oProcessItem.EmployeeID == 27388 || oProcessItem.EmployeeID == 27620 || oProcessItem.EmployeeID == 31161 || oProcessItem.EmployeeID == 1822 // || oProcessItem.EmployeeID == 36901 || oProcessItem.EmployeeID == 37542 || oProcessItem.EmployeeID == 41160 || oProcessItem.EmployeeID == 44495 // || oProcessItem.EmployeeID == 44495 || oProcessItem.EmployeeID == 46607 || oProcessItem.EmployeeID == 49783 || oProcessItem.EmployeeID == 55041 // || oProcessItem.EmployeeID == 55155 || oProcessItem.EmployeeID == 55388) //{ //} //if(oProcessItem.EmployeeID == 27620) //{ // double x = ((double)oLine.ProdBonusSupervisors.First(o => o.EmployeeID == item.Key).BonusPercent / 100); //} oProcessItem.Amount = Math.Round(((double)basicSal / 208 * (double)oth * ((double)oLine.ProdBonusSupervisors.First(o => o.EmployeeID == item.Key).BonusPercent / 100)) * 2, 2); oProcessItem.AchievePercent = 0; oProcessItem.WorkingHour = hour; oProcessItem.ProdBonusSetupID = oProductionBonusSetup.ID; oProcessItem.ProdBonusLineID = oLine.ID; oProcessItem.Description = oProductionBonusSetup.ProgramName; _oProdBonusProcess.ProdBonusProcessItems.Add(oProcessItem); } } } } } var empGroup = _oProdBonusProcess.ProdBonusProcessItems .GroupBy(o => o.EmployeeID) .Select(x => new { EmployeeID = x.Key, Amount = x.Sum(y => y.Amount), Description = x.Aggregate(new StringBuilder(), (sb, z) => sb.Append(z.Description + ","), sb => sb.ToString().Trim(',')) }); foreach (var item in empGroup) { oProcessEmp = new ProdBonusProcessEmp(); oProcessEmp.EmployeeID = item.EmployeeID; //Amount mismatch hude ammount oProcessEmp.Amount = Math.Round((double)item.Amount, 2); oProcessEmp.Description = item.Description; _oProdBonusProcess.ProdBonusProcessEmps.Add(oProcessEmp); #region Effect os Salary ADParameterEmployee adEmp = new ADParameterEmployee(); adEmp.EmployeeID = item.EmployeeID; adEmp.ADParameterID = setupID; adEmp.AllowDeductID = _ADParam.AllowDeductID; adEmp.ADEmpType = EnumADEmpType.AppliedToIndividual; adEmp.Periodicity = EnumPeriodicity.OneOff; adEmp.FormDate = GlobalFunctions.FirstDateOfMonth(dtpSalaryMonth); adEmp.TillDate = GlobalFunctions.LastDateOfMonth(dtpSalaryMonth); adEmp.MonthlyAmount = Math.Round((double)item.Amount, 2); adEmp.ValueType = EnumValueType.Amount; adEmp.Arreartype = EnumArrearType.NotPresent; _ADParam.ADParameterEmployees.Add(adEmp); #endregion } _oProdBonusProcess.ADParamEmps = _ADParam.ADParameterEmployees; } catch (Exception e) { #region Handle Exception //if (tc != null) // tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return _oProdBonusProcess; } #endregion #region Undo public void UndoProcess(List oProdBonusProsses, ADParameter _ADParam, DateTime dtSalaryMonth) { TransactionContext tc = null; try { //tc = TransactionContext.Begin(true); List oProdBonusProcessEmps = new ProdBonusProcessService().GetAllProdBonusProcessEmps(); List oProdBonusProcessItems = new ProdBonusProcessService().GetAllProdBonusProcessItems(); //tc.End(); string empids = ""; foreach (ProdBonusProcess item in oProdBonusProsses) { //item.ProdBonusProcessEmps = new ProdBonusProcessService().GetProdBonusProcessEmps(item.ID); //item.ProdBonusProcessItems = new ProdBonusProcessService().GetProdBonusProcessItems(item.ID); item.ProdBonusProcessEmps = oProdBonusProcessEmps.Where(x=> x.ProdBonusProcessID == item.ID).ToList(); item.ProdBonusProcessItems = oProdBonusProcessItems.Where(x => x.ProdBonusProcessID == item.ID).ToList(); List employeeIdList = new List(); //tc = TransactionContext.Begin(true); foreach (ProdBonusProcessItem processItem in item.ProdBonusProcessItems) { //ADParameterEmployeeDA.DeleteByAllowDeductMonth(tc, processItem.EmployeeID, // _ADParam.AllowDeductID, dtSalaryMonth); employeeIdList.Add(processItem.EmployeeID); } empids = string.Join(", ", employeeIdList); } tc = TransactionContext.Begin(true); ADParameterEmployeeDA.DeleteByAllowDeductMonth(tc, empids, _ADParam.AllowDeductID, dtSalaryMonth); ProdBonusProcessDA.DeleteBySalaryMonth(tc, dtSalaryMonth); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } #endregion #endregion } }