using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using Ease.CoreV35.Model;
using Ease.CoreV35.Utility;
using System.Xml.XPath;
using System.Net;
using Org.BouncyCastle.Bcpg.OpenPgp;
using Org.BouncyCastle.Bcpg;
using Org.BouncyCastle.Utilities.IO;
namespace Payroll.BO
{
///
///Process Flow
/// 1. Read the XML file from the target location using intigration_setup object
/// 2. Read New joining employee and update object. Increase the success List.
/// 3. Read properties changes
/// 3.1 if basic object are exist in the payroll database, increase Error List
/// 3.2 Find the appropiate Life_cycle_Event and increase the Emp_Life_cycle collection. Increase success List
/// 3.3 Use const-center Department lookup
/// 4. If error list contains any item, save the items and exit process
/// 5. If there is no item in error list, save the targets (objects) items
/// 5.1 if error occured in saving an item, exit the process and save the reason in Error list
/// 6. Save the Success List
/// 7. Cut the source file XML and store it into backup folder.
/// 8. Mail the success & Error list
///
[Serializable]
public class SAPInterface
{
//private ObjectsTemplate _processerrorList=new ObjectsTemplate();
// private string XML_FILE_NAME =string.Empty;
#region declarations
SAPDataProcess _SAPDProcess = new SAPDataProcess();
//SAPDataProcess _SucccessList = new SAPDataProcess();
//SAPDataProcess _ErrorList = new SAPDataProcess();
private ObjectsTemplate _EmpLifeCycles;
//private ObjectsTemplate _newEmployeeList;
//private ObjectsTemplate _newEmpLifeCycle;
//private ObjectsTemplate _newEmpBankAccount;
//private ObjectsTemplate _EmpLifeCycles;
private IntigrationSetup _IntigrationSetup = null;
private ObjectsTemplate _Employees = null;
private ObjectsTemplate _Religions = null;
private ObjectsTemplate _Grades = null;
private ObjectsTemplate _Designations = null;
private ObjectsTemplate _Costcenters = null;
private ObjectsTemplate _Banks = null;
private ObjectsTemplate _EmployeeBankAccounts = null;
private ObjectsTemplate _Branchs = null;
private ObjectsTemplate _CRGDepartmentLookup = null;
private ObjectsTemplate _Locations = null;
private ObjectsTemplate _EmployeeStatuss = null;
private ObjectsTemplate _ErrorList = new ObjectsTemplate();
private ObjectsTemplate _SucccessList = new ObjectsTemplate();
EnumSendMail SendMailNotification = EnumSendMail.None;
MailSender MS = null;
private int _newEmpID;
private string _sEmpNo = string.Empty;
Employee _Employee = null;
SAPDataDump _SAPDataDump = null;
#endregion
#region Constructor
public SAPInterface()
{
_newEmpID = 100001;
_IntigrationSetup = IntigrationSetup.Get();
}
#endregion
#region Public Functions
//public SAPDataProcess Process_Old()
//{
// try
// {
// _Employees = Employee.GetAllEmps();
// _EmpLifeCycles = new ObjectsTemplate();
// _EmpLifeCycles = EmpLifeCycle.Get(EnumStatus.Regardless);
// _Religions = Religion.Get(EnumStatus.Active);
// _Grades = Grade.Get(EnumStatus.Active);
// _Designations = Designation.GetWithSapCode(EnumStatus.Active);
// _Costcenters = Costcenter.Get();
// _Banks = Bank.Get();
// _Branchs = Branch.Get(EnumStatus.Active);
// _EmployeeBankAccounts = new ObjectsTemplate();
// _CRGDepartmentLookup = CRGDepartmentLookup.Get();
// _Locations = Location.Get();
// _IntigrationSetup = IntigrationSetup.Get();
// _EmployeeStatuss = EmployeeStatus.Get();
// _newEmployeeList = new ObjectsTemplate();
// _newEmpLifeCycle = new ObjectsTemplate();
// _newEmpBankAccount = new ObjectsTemplate();
// DownloadXMLFilesFromFTP();
// RaedXMLFiles();
// //foreach (Employee emp in _newEmployeeList)
// //{
// // if (!_Employees.Where(obj => obj.EmployeeNo == emp.EmployeeNo).Any())
// // {
// // emp.LocationID = ID.FromInteger(4);
// // }
// //}
// foreach (EmpLifeCycle empLife in _newEmpLifeCycle)
// {
// if (empLife.EmployeeID.Integer > 100000) // New employee must have Grade & basic Salary
// {
// if (empLife.LocationID == null)
// {
// // Set Default or create Error
// Employee emp = _newEmployeeList.Where(obj => obj.ID.Integer == empLife.EmployeeID.Integer).SingleOrDefault();
// if (emp != null) emp.LocationID = ID.FromInteger(4);
// empLife.LocationID = ID.FromInteger(4);
// }
// if (empLife.GradeID == null || empLife.BasicSalary == null)
// {
// _sEmpNo = string.Empty;
// Employee oEmployee = _newEmployeeList.Where(e => e.ID == empLife.EmployeeID).SingleOrDefault();
// AddProcessStatus(EnumSAPProcessStatus.Error, oEmployee, "New Joining Employee without Grade Or Basic Salary");
// }
// }
// else
// {
// if (empLife.GradeID == null || empLife.BasicSalary == null)
// {
// Employee oEmployee = _Employees.Where(e => e.ID == empLife.EmployeeID).SingleOrDefault();
// if (oEmployee.GradeID == null || oEmployee.BasicSalary == 0)
// {
// AddProcessStatus(EnumSAPProcessStatus.Error, oEmployee, "Employee without Grade Or Basic Salary");
// }
// }
// }
// }
// return _SAPDProcess;
// }
// catch (Exception ex)
// {
// throw new ServiceException(ex.Message);
// }
//}
public SAPDataProcess Process(FileInfo oFile)
{
try
{
_Employees = Employee.GetAllEmps();
_EmpLifeCycles = new ObjectsTemplate();
_EmpLifeCycles = EmpLifeCycle.Get(EnumStatus.Regardless);
_Religions = Religion.Get(EnumStatus.Active);
_Grades = Grade.GetAllPayrollTypes(EnumStatus.Active);
_Designations = Designation.GetWithSapCode(EnumStatus.Active);
_Costcenters = Costcenter.Get();
_Banks = Bank.Get();
_Branchs = Branch.Get(EnumStatus.Active);
_EmployeeBankAccounts = new ObjectsTemplate();
_CRGDepartmentLookup = CRGDepartmentLookup.Get();
_Locations = Location.Get();
_EmployeeStatuss = EmployeeStatus.Get();
//_newEmployeeList = new ObjectsTemplate();
//_newEmpLifeCycle = new ObjectsTemplate();
//_newEmpBankAccount = new ObjectsTemplate();
_SAPDProcess = new SAPDataProcess();
// 'false' for testing only.
if (SAPDataProcess.IsFileSuccessfullyRead(oFile.Name))
{
_sEmpNo = string.Empty;
AddProcessStatus(EnumSAPProcessStatus.Error, null, "File : " + oFile.Name + " was successfully read previously.Please check why it was given again");
}
else
{
ReadXMLFile(oFile.FullName);
_SAPDProcess.SAPDataDumps.ForEach(m => m.FileName = oFile.Name);
foreach (EmpLifeCycle empLife in _SAPDProcess.SAPEmpLifeCycles)
{
if (empLife.EmployeeID.Integer > 100000) // New employee must have Grade & basic Salary
{
if (empLife.LocationID == null)
{
// Set Default or create Error
Employee emp = _SAPDProcess.SAPEmployees.Where(obj => obj.ID.Integer == empLife.EmployeeID.Integer).SingleOrDefault();
if (emp != null) emp.LocationID = ID.FromInteger(4);
empLife.LocationID = ID.FromInteger(4);
}
if (!(empLife.GradeID == null && empLife.BasicSalary == null) && (empLife.GradeID == null || empLife.BasicSalary == null))
{
_sEmpNo = string.Empty;
Employee oEmployee = _SAPDProcess.SAPEmployees
.Where(e => e.ID == empLife.EmployeeID)
.SingleOrDefault();
if (empLife.GradeID != null)
{
empLife.BasicSalary = 1.0;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Basic Salary Set to Default Value 1.0 for ");
}
else
{
Grade defaultGrade = _Grades
.Where(g => g.Code.Trim().ToUpper() == "N/A".Trim().ToUpper())
.SingleOrDefault();
if (defaultGrade == null)
{
AddProcessStatus(EnumSAPProcessStatus.Error, oEmployee, "Could not find Default Grade \'N/A\' for ");
}
else
{
empLife.GradeID = defaultGrade.ID;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Employee Grade Set to Default Grade \'{0}\' for ", defaultGrade.Code));
}
}
//AddProcessStatus(EnumSAPProcessStatus.Error, oEmployee, "New Joining Employee without Grade Or Basic Salary");
}
}
else
{
if (!(empLife.GradeID == null && empLife.BasicSalary == null) && (empLife.GradeID == null || empLife.BasicSalary == null))
{
Employee oEmployee = _Employees
.Where(e => e.ID == empLife.EmployeeID)
.SingleOrDefault();
if (empLife.GradeID != null)
{
if (oEmployee.BasicSalary == 0)
{
empLife.BasicSalary = 1.0;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Basic Salary Set to Default Value 1.0 for ");
}
else
{
empLife.BasicSalary = oEmployee.BasicSalary;
}
}
else
{
if (oEmployee.GradeID == null || oEmployee.GradeID.IsUnassigned)
{
Grade defaultGrade = _Grades
.Where(g => g.Code.Trim().ToUpper() == "N/A".Trim().ToUpper())
.SingleOrDefault();
if (defaultGrade == null)
{
AddProcessStatus(EnumSAPProcessStatus.Error, oEmployee, "Could not find Default Grade \'N/A\' for ");
}
else
{
empLife.GradeID = defaultGrade.ID;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Employee Grade Set to Default Grade \'{0}\' for ", defaultGrade.Code));
}
}
else
{
empLife.GradeID = oEmployee.GradeID;
}
}
}
}
}
}
return _SAPDProcess;
}
catch (Exception ex)
{
throw new ServiceException(ex.Message);
}
}
public List GetDownloadedFileInfos()
{
//DeleteXMLFilesFromLocal();
DownloadXMLFilesFromFTP();
List oFiles = new DirectoryInfo(_IntigrationSetup.ReadFilePath)
.GetFiles("*.xml", SearchOption.TopDirectoryOnly)
.OrderBy(f => f.Name)
.ToList();
return oFiles;
}
public void DeleteXMLFilesFromFTP()
{
List filesToDelete = GetAllFileListFromAnFTPPath();
foreach (var item in filesToDelete)
{
DeleteFromFTP(item);
}
}
public void DeleteXMLFilesFromLocal()
{
string[] files = Directory.GetFiles(_IntigrationSetup.ReadFilePath, "*.xml", SearchOption.TopDirectoryOnly);
foreach (string xmlFile in files)
{
File.Delete(xmlFile);
}
}
public string GetXMLFileNamesFromLocal()
{
string commaSeparatedFileNames;
string[] files = Directory.GetFiles(_IntigrationSetup.ReadFilePath, "*.xml", SearchOption.TopDirectoryOnly);
for (int i = 0; i < files.Length; i++)
{
string[] str = files[i].Split('\\');
files[i] = str[str.Length - 1];
}
commaSeparatedFileNames = string.Join(",", files);
return commaSeparatedFileNames;
}
public void MoveXMLFilesToBackup()
{
string[] files = Directory.GetFiles(_IntigrationSetup.ReadFilePath, "*.xml", SearchOption.TopDirectoryOnly);
foreach (string xmlName in files)
{
SaveFileToBackUp(xmlName);
}
}
public EnumSendMail SendMail(SAPDataProcess oSApDProcess)
{
try
{
EnumSendMail oSendMailNotification = EnumSendMail.None;
MS = new MailSender();
MS.AddCC(_IntigrationSetup.NotifyEmail.Trim());
if (oSApDProcess != null)
{
if (oSApDProcess.ErrorList.Count > 0)
{
MS.Body = @"Dear All,
Uploading SAP Employee information failed and generated Errors.
The error list is given below:
";
MS.Body += oSApDProcess.ErrorList.Aggregate(new StringBuilder(),
(sb, el) => sb.Append(el.Description + "
"),
sb => sb.ToString());
MS.Subject = "SAP Process data upload Failed.";
}
else
{
MS.Body = @"Dear All,
Uploading SAP Employee information successfully completed.
The success list is given below:
";
MS.Body += oSApDProcess.SuccessList.Aggregate(new StringBuilder(),
(sb, el) => sb.Append(el.Description + "
"),
sb => sb.ToString());
MS.Subject = "SAP Process data upload Succeded.";
}
//oSendMailNotification = MS.SendMailNovartisSAP();
}
return oSendMailNotification;
}
catch (Exception Ex)
{
throw new Exception(Ex.Message);
}
}
#endregion
#region Private Functions
private void RefreshNewJoiner(XElement oXElement)
{
#region Employee Name,Birthdate,Gender,Maritial_Status and Religion Code Update
//var oEmployees = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0002")
// .Where(elmnt => ((string)elmnt.Element("ENDDA")) == "99991231");
var oEmployees = oXElement.Descendants("E1P0002")
.Where(elmnt => ((string)elmnt.Element("ENDDA")) == "99991231");
var oJoiningDates = oXElement.Descendants("E1P0000")
.Where(elmnt => (((string)elmnt.Element("MASSN") == "ZR")
|| ((string)elmnt.Element("MASSN") == "Z1")
|| ((string)elmnt.Element("MASSN") == "Z0")
)
&& ((string)elmnt.Element("ENDDA") == "99991231")
);
var oPayrollTypeOutSources = oXElement.Descendants("E1P0001")
.Where(elmnt => ((string)elmnt.Element("MASSN") == "Z9") && ((string)elmnt.Element("ENDDA") == "99991231"));
//var oPayrollTypeExternals = oXElement.Descendants("E1P0001")
// .Where(elmnt => (((string)elmnt.Element("MASSN") == "Z6") || ((string)elmnt.Element("MASSN") == "Z7")) && ((string)elmnt.Element("ENDDA") == "99991231"));
var oPayrollTypeFixeds = oXElement.Descendants("E1P0001")
.Where(elmnt => ((string)elmnt.Element("PERSG") == "6") && ((string)elmnt.Element("ENDDA") == "99991231"));
foreach (XElement xEle in oEmployees)
{
string sEmpNo = (string)xEle.Element("PERNR");
string sLastName = (string)xEle.Element("NACHN");
string sFirstName = (string)xEle.Element("VORNA");
string sBirthdate = (string)xEle.Element("GBDAT");
string sReligionCode = (string)xEle.Element("KONFE");
string sGender = (string)xEle.Element("GESCH");
string sMaritialStatus = (string)xEle.Element("FAMST");
string sHiringDate = null;
// if (sEmpNo.StartsWith("869")) continue;
XElement joinElmnt = oJoiningDates
.Where(elmnt => ((string)elmnt.Element("PERNR")) == sEmpNo)
.OrderByDescending(elmnt => elmnt.Element("MASSN"))
.FirstOrDefault();
sHiringDate = joinElmnt == null ? null : (string)joinElmnt.Element("BEGDA");
Employee oEmployee = _Employees
.Where(oEmp => oEmp.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee == null)
{
#region Refresh Employee New Joinner
_Employee = _SAPDProcess.SAPEmployees
.Where(e => e.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (_Employee == null)
{
_Employee = new Employee();
_SAPDataDump = new SAPDataDump();
_Employee.SetObjectID(_newEmpID);
_SAPDataDump.EmployeeID = ID.FromInteger(_newEmpID);
_newEmpID = _newEmpID + 1;
_Employee.EmployeeNo = sEmpNo;
#region Needs Change
if (sEmpNo.StartsWith("869"))
{
_Employee.PayrollTypeID = ID.FromInteger(2);
if (oPayrollTypeOutSources.Any(xE => xE.Element("PERNR").ToString() == sEmpNo))
{
_Employee.CategoryID = ID.FromInteger(4);
}
else
{
_Employee.CategoryID = ID.FromInteger(2);
}
}
else
{
_Employee.PayrollTypeID = ID.FromInteger(1);
if (oPayrollTypeFixeds.Any(xE => xE.Element("PERNR").ToString() == sEmpNo))
{
_Employee.CategoryID = ID.FromInteger(3);
}
else
{
_Employee.CategoryID = ID.FromInteger(1);
}
}
#endregion
_SAPDataDump.FirstName = sFirstName == null ? _SAPDataDump.FirstName : sFirstName;
_SAPDataDump.LastName = sLastName == null ? _SAPDataDump.LastName : sLastName;
if ((sFirstName != null && sFirstName != string.Empty) || (sLastName != null && sLastName != string.Empty))
{
_Employee.Name = (sFirstName + " " + sLastName).Trim();
}
if (sBirthdate != null && sBirthdate != string.Empty)
{
_Employee.BirthDate = Convert.ToDateTime(sBirthdate.Substring(0, 4) + "-" +
sBirthdate.Substring(4, 2) + "-" +
sBirthdate.Substring(6, 2));
_SAPDataDump.BirthDate = _Employee.BirthDate;
}
if (sHiringDate != null && sHiringDate != string.Empty)
{
_Employee.JoiningDate = Convert.ToDateTime(sHiringDate.Substring(0, 4) + "-" +
sHiringDate.Substring(4, 2) + "-" +
sHiringDate.Substring(6, 2));
_SAPDataDump.JoiningDate = _Employee.JoiningDate;
if (_Employee.JoiningDate > SystemInformation.CurrentSysInfo.NextPayProcessDate)
{
_Employee.Status = EnumEmployeeStatus.Waitingforjoin;
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, _Employee, "Employee Joining Date not given for ");
}
if (sReligionCode != null && sReligionCode != string.Empty)
{
Religion oReligion = _Religions
.Where(oItem => oItem.Code.Trim().ToUpper() == sReligionCode.Trim().ToUpper())
.SingleOrDefault();
if (oReligion != null)
{
_Employee.ReligionID = oReligion.ID;
_SAPDataDump.ReligionCode = oReligion.Code;
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, _Employee, "Religion Code: " + sReligionCode.Trim() + " not found in basic information for ");
}
}
else
{
Religion oReligion = _Religions
.Where(oItem => oItem.Name.ToUpper() == "N/A")
.SingleOrDefault();
if (oReligion != null)
{
_Employee.ReligionID = oReligion.ID;
_SAPDataDump.ReligionCode = oReligion.Code;
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, _Employee, "Religion Code \'N/A\' not defined. Employee no. ");
}
//AddProcessStatus(EnumSAPProcessStatus.Error, _Employee, "Religion Code not found in basic information for ");
}
if (sGender != null && sGender != string.Empty)
{
switch ((EnumGender)Convert.ToInt16(sGender))
{
case EnumGender.None:
_Employee.Gender = EnumGender.None;
_SAPDataDump.Gender = EnumGender.None;
break;
case EnumGender.Male:
_Employee.Gender = EnumGender.Male;
_SAPDataDump.Gender = EnumGender.Male;
break;
case EnumGender.Female:
_Employee.Gender = EnumGender.Female;
_SAPDataDump.Gender = EnumGender.Female;
break;
case EnumGender.Other:
_Employee.Gender = EnumGender.Other;
_SAPDataDump.Gender = EnumGender.Other;
break;
default:
break;
}
}
if (sMaritialStatus != null && sMaritialStatus != string.Empty)
{
switch (Convert.ToInt16(sMaritialStatus))
{
case 0:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
case 1:
_Employee.MaritalStatus = EnumMaritalStatus.Married;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Married;
break;
case 2:
_Employee.MaritalStatus = EnumMaritalStatus.Widow;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Widow;
break;
case 3:
_Employee.MaritalStatus = EnumMaritalStatus.Divorced;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Divorced;
break;
default:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
}
}
if (_SAPDProcess.ErrorList.Count == 0)
{
//_newEmployeeList.Add(_Employee);
_SAPDProcess.SAPEmployees.Add(_Employee);
_SAPDProcess.SAPDataDumps.Add(_SAPDataDump);
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Employee added successfully for ");
}
}
else
{
_SAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == _Employee.ID)
.SingleOrDefault();
_SAPDataDump.FirstName = sFirstName == null ? _SAPDataDump.FirstName : sFirstName;
_SAPDataDump.LastName = sLastName == null ? _SAPDataDump.LastName : sLastName;
if ((sFirstName != null && sFirstName != string.Empty) || (sLastName != null && sLastName != string.Empty))
{
_Employee.Name = (sFirstName + " " + sLastName).Trim();
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Employee Name Changed for ");
}
if (sBirthdate != null && sBirthdate != string.Empty)
{
_Employee.BirthDate = Convert.ToDateTime(sBirthdate.Substring(0, 4) + "-" +
sBirthdate.Substring(4, 2) + "-" +
sBirthdate.Substring(6, 2));
_SAPDataDump.BirthDate = _Employee.BirthDate;
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Birth Date Changed for ");
}
if (sHiringDate != null && sHiringDate != string.Empty)
{
Convert.ToDateTime(sHiringDate.Substring(0, 4) + "-" +
sHiringDate.Substring(4, 2) + "-" +
sHiringDate.Substring(6, 2));
_SAPDataDump.JoiningDate = _Employee.JoiningDate;
if (_Employee.JoiningDate > SystemInformation.CurrentSysInfo.NextPayProcessDate)
{
_Employee.Status = EnumEmployeeStatus.Waitingforjoin;
}
}
if (sReligionCode != null && sReligionCode != string.Empty)
{
Religion oReligion = _Religions
.Where(oItem => oItem.Code.Trim().ToUpper() == sReligionCode.Trim().ToUpper())
.SingleOrDefault();
if (oReligion != null)
{
_Employee.ReligionID = oReligion.ID;
_SAPDataDump.ReligionCode = oReligion.Code;
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, _Employee, "Religion Code: " + sReligionCode.Trim() + " not found in basic information for ");
}
}
if (sGender != null && sGender != string.Empty)
{
switch ((EnumGender)Convert.ToInt16(sGender))
{
case EnumGender.None:
_Employee.Gender = EnumGender.None;
_SAPDataDump.Gender = EnumGender.None;
break;
case EnumGender.Male:
_Employee.Gender = EnumGender.Male;
_SAPDataDump.Gender = EnumGender.Male;
break;
case EnumGender.Female:
_Employee.Gender = EnumGender.Female;
_SAPDataDump.Gender = EnumGender.Female;
break;
case EnumGender.Other:
_Employee.Gender = EnumGender.Other;
_SAPDataDump.Gender = EnumGender.Other;
break;
default:
break;
}
}
if (sMaritialStatus != null && sMaritialStatus != string.Empty)
{
switch (Convert.ToInt16(sMaritialStatus))
{
case 0:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
case 1:
_Employee.MaritalStatus = EnumMaritalStatus.Married;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Married;
break;
case 2:
_Employee.MaritalStatus = EnumMaritalStatus.Widow;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Widow;
break;
case 3:
_Employee.MaritalStatus = EnumMaritalStatus.Divorced;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Divorced;
break;
default:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
}
}
if (_SAPDProcess.ErrorList.Count == 0)
{
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Empolyee updated successfully for ");
}
}
#endregion
}
else
{
#region Refresh Old Employee
if (!_SAPDProcess.SAPEmployees
.Where(e => e.EmployeeNo == sEmpNo)
.Any()) // Employee Found In DataBase but Not in new Employee List
{
_Employee = oEmployee;
_Employee.EmployeeNo = sEmpNo;
_SAPDataDump = new SAPDataDump();
_SAPDataDump.EmployeeID = _Employee.ID;
_SAPDataDump.FirstName = sFirstName == null ? _SAPDataDump.FirstName : sFirstName;
_SAPDataDump.LastName = sLastName == null ? _SAPDataDump.LastName : sLastName;
if ((sFirstName != null && sFirstName != string.Empty) || (sLastName != null && sLastName != string.Empty))
{
_Employee.Name = (sFirstName + " " + sLastName).Trim();
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Employee name changed for ");
}
if (sBirthdate != null && sBirthdate != string.Empty)
{
_Employee.BirthDate = Convert.ToDateTime(sBirthdate.Substring(0, 4) + "-" +
sBirthdate.Substring(4, 2) + "-" +
sBirthdate.Substring(6, 2));
_SAPDataDump.BirthDate = _Employee.BirthDate;
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Birth Date Changed for ");
}
if (sHiringDate != null && sHiringDate != string.Empty)
{
_Employee.JoiningDate = Convert.ToDateTime(sHiringDate.Substring(0, 4) + "-" +
sHiringDate.Substring(4, 2) + "-" +
sHiringDate.Substring(6, 2));
_SAPDataDump.JoiningDate = _Employee.JoiningDate;
if (_Employee.JoiningDate > SystemInformation.CurrentSysInfo.NextPayProcessDate)
{
_Employee.Status = EnumEmployeeStatus.Waitingforjoin;
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Joining date changed for ");
}
if (sReligionCode != null && sReligionCode != string.Empty)
{
Religion oReligion = _Religions
.Where(oItem => oItem.Code.Trim().ToUpper() == sReligionCode.Trim().ToUpper())
.SingleOrDefault();
if (oReligion != null)
{
_Employee.ReligionID = oReligion.ID;
_SAPDataDump.ReligionCode = oReligion.Code;
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Religion changed for ");
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, _Employee, "Religion Code: " + sReligionCode.Trim() + " not found in basic information for ");
}
}
if (sGender != null && sGender != string.Empty)
{
switch ((EnumGender)Convert.ToInt16(sGender))
{
case EnumGender.None:
_Employee.Gender = EnumGender.None;
_SAPDataDump.Gender = EnumGender.None;
break;
case EnumGender.Male:
_Employee.Gender = EnumGender.Male;
_SAPDataDump.Gender = EnumGender.Male;
break;
case EnumGender.Female:
_Employee.Gender = EnumGender.Female;
_SAPDataDump.Gender = EnumGender.Female;
break;
case EnumGender.Other:
_Employee.Gender = EnumGender.Other;
_SAPDataDump.Gender = EnumGender.Other;
break;
default:
break;
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Gender changed for ");
}
if (sMaritialStatus != null && sMaritialStatus != string.Empty)
{
switch (Convert.ToInt16(sMaritialStatus))
{
case 0:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
case 1:
_Employee.MaritalStatus = EnumMaritalStatus.Married;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Married;
break;
case 2:
_Employee.MaritalStatus = EnumMaritalStatus.Widow;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Widow;
break;
case 3:
_Employee.MaritalStatus = EnumMaritalStatus.Divorced;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Divorced;
break;
default:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Maritial status changed for ");
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Employee data Successfully updated for ");
//_newEmployeeList.Add(_Employee);
_SAPDProcess.SAPEmployees.Add(_Employee);
_SAPDProcess.SAPDataDumps.Add(_SAPDataDump);
}
else // Employee Found In DataBase and Also in new Employee List
{
_Employee = _SAPDProcess.SAPEmployees
.Where(e => e.EmployeeNo == sEmpNo)
.Single();
_Employee.EmployeeNo = sEmpNo;
_SAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == _Employee.ID)
.SingleOrDefault();
_SAPDataDump.FirstName = sFirstName == null ? _SAPDataDump.FirstName : sFirstName;
_SAPDataDump.LastName = sLastName == null ? _SAPDataDump.LastName : sLastName;
if ((sFirstName != null && sFirstName != string.Empty) || (sLastName != null && sLastName != string.Empty))
{
_Employee.Name = (sFirstName + " " + sLastName).Trim();
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Employee name changed for ");
}
if (sBirthdate != null && sBirthdate != string.Empty)
{
//DateTime sBD = Convert.ToDateTime(sBirthdate,"dd MMM yyyy");
_Employee.BirthDate = Convert.ToDateTime(sBirthdate.Substring(0, 4) + "-" +
sBirthdate.Substring(4, 2) + "-" +
sBirthdate.Substring(6, 2));
_SAPDataDump.BirthDate = _Employee.BirthDate;
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Birthday changed for ");
}
if (sHiringDate != null && sHiringDate != string.Empty)
{
_Employee.JoiningDate = Convert.ToDateTime(sHiringDate.Substring(0, 4) + "-" +
sHiringDate.Substring(4, 2) + "-" +
sHiringDate.Substring(6, 2));
_SAPDataDump.JoiningDate = _Employee.JoiningDate;
if (_Employee.JoiningDate > SystemInformation.CurrentSysInfo.NextPayProcessDate)
{
_Employee.Status = EnumEmployeeStatus.Waitingforjoin;
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Joining date changed for ");
}
if (sReligionCode != null && sReligionCode != string.Empty)
{
Religion oReligion = _Religions
.Where(oItem => oItem.Code.Trim().ToUpper() == sReligionCode.Trim().ToUpper())
.SingleOrDefault();
if (oReligion != null)
{
_Employee.ReligionID = oReligion.ID;
_SAPDataDump.ReligionCode = oReligion.Code;
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Religion changed for ");
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, _Employee, "Religion Code: " + sReligionCode.Trim() + " not found in basic information for ");
}
}
if (sGender != null && sGender != string.Empty)
{
switch ((EnumGender)Convert.ToInt16(sGender))
{
case EnumGender.None:
_Employee.Gender = EnumGender.None;
_SAPDataDump.Gender = EnumGender.None;
break;
case EnumGender.Male:
_Employee.Gender = EnumGender.Male;
_SAPDataDump.Gender = EnumGender.Male;
break;
case EnumGender.Female:
_Employee.Gender = EnumGender.Female;
_SAPDataDump.Gender = EnumGender.Female;
break;
case EnumGender.Other:
_Employee.Gender = EnumGender.Other;
_SAPDataDump.Gender = EnumGender.Other;
break;
default:
break;
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Gender changed for ");
}
if (sMaritialStatus != null && sMaritialStatus != string.Empty)
{
switch (Convert.ToInt16(sMaritialStatus))
{
case 0:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
case 1:
_Employee.MaritalStatus = EnumMaritalStatus.Married;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Married;
break;
case 2:
_Employee.MaritalStatus = EnumMaritalStatus.Widow;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Widow;
break;
case 3:
_Employee.MaritalStatus = EnumMaritalStatus.Divorced;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.Divorced;
break;
default:
_Employee.MaritalStatus = EnumMaritalStatus.UnMarried;
_SAPDataDump.MaritalStatus = EnumMaritalStatus.UnMarried;
break;
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Maritial status changed for ");
}
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Employee data Successfully updated for ");
}
#endregion
}
}
#endregion
#region GlobalID Update
//var oGDDBIDs = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0105")
// .Where(elmnt => ((string)elmnt.Element("SUBTY")) == "0001");
var oGDDBIDs = oXElement.Descendants("E1P0105")
.Where(elmnt => ((string)elmnt.Element("SUBTY")) == "0001");
foreach (XElement xEle in oGDDBIDs)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sGlobalID = (string)xEle.Element("USRID");
//if (sEmpNo.StartsWith("869")) continue;
_Employee = _SAPDProcess.SAPEmployees.Where(e => e.EmployeeNo == sEmpNo).SingleOrDefault();
if (_Employee != null)
{
_SAPDataDump = _SAPDProcess.SAPDataDumps
.Where(oItem => oItem.EmployeeID == _Employee.ID)
.SingleOrDefault();
if (sGlobalID != null && sGlobalID != string.Empty)
{
_Employee.GlobalID = sGlobalID;
_SAPDataDump.GDDBID = sGlobalID;
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Global ID changed for ");
}
}
else
{
_Employee = _Employees.Where(oEmp => oEmp.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (_Employee != null)
{
_SAPDataDump = new SAPDataDump();
_SAPDataDump.EmployeeID = _Employee.ID;
if (sGlobalID != null && sGlobalID != string.Empty)
{
_Employee.GlobalID = sGlobalID;
_SAPDataDump.GDDBID = sGlobalID;
//_newEmployeeList.Add(_Employee);
_SAPDProcess.SAPEmployees.Add(_Employee);
_SAPDProcess.SAPDataDumps.Add(_SAPDataDump);
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Global ID changed for ");
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating GlobalID for ");
}
}
}
#endregion
#region Email Update
//var oEmails = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0105")
// .Where(elmnt => ((string)elmnt.Element("SUBTY") == "0010") && ((string)elmnt.Element("ENDDA") == "99991231"));
var oEmails = oXElement.Descendants("E1P0105")
.Where(elmnt => ((string)elmnt.Element("SUBTY") == "0010") && ((string)elmnt.Element("ENDDA") == "99991231"));
foreach (XElement xEle in oEmails)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmailAddress = (string)xEle.Element("USRID_LONG");
//if (sEmpNo.StartsWith("869")) continue;
_Employee = _SAPDProcess.SAPEmployees.Where(e => e.EmployeeNo == sEmpNo).SingleOrDefault();
if (_Employee != null)
{
_SAPDataDump = _SAPDProcess.SAPDataDumps
.Where(oItem => oItem.EmployeeID == _Employee.ID)
.SingleOrDefault();
if (sEmailAddress != null && sEmailAddress != string.Empty)
{
_Employee.EmailAddress = sEmailAddress;
_SAPDataDump.EmailAddress = sEmailAddress;
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Email address changed for ");
}
}
else
{
_Employee = _Employees.Where(oEmp => oEmp.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (_Employee != null)
{
_SAPDataDump = new SAPDataDump();
_SAPDataDump.EmployeeID = _Employee.ID;
if (sEmailAddress != null && sEmailAddress != string.Empty)
{
_Employee.EmailAddress = sEmailAddress;
_SAPDataDump.EmailAddress = sEmailAddress;
//_newEmployeeList.Add(_Employee);
_SAPDProcess.SAPEmployees.Add(_Employee);
_SAPDProcess.SAPDataDumps.Add(_SAPDataDump);
AddProcessStatus(EnumSAPProcessStatus.Success, _Employee, "Email address changed for ");
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Email Address for ");
}
}
}
#endregion
}
private void RefreshEmpLifeCycle(XElement oXElement)
{
DateTime dEffectDate = DateTime.MinValue;
#region Employee Confirmation Data Update
//var oEmpConfirm = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0019")
// .Where(elmnt => ((string)elmnt.Element("SUBTY")) == "01");
var oEmpConfirm = oXElement.Descendants("E1P0019")
.Where(elmnt => ((string)elmnt.Element("SUBTY")) == "01");
foreach (XElement xEle in oEmpConfirm)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmpConfrimDate = (string)xEle.Element("TERMN");
Employee oEmployee = null;
if (sEmpNo.StartsWith("869")) continue;
if (sEmpConfrimDate != null)
{
DateTime confirmDate = Convert.ToDateTime(sEmpConfrimDate.Substring(0, 4) + "-" +
sEmpConfrimDate.Substring(4, 2) + "-" +
sEmpConfrimDate.Substring(6, 2));
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.ConfirmationDate = confirmDate;
EmpLifeCycle
oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
oEmpLifeCycle.EffectDate = confirmDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Confirm date changed for ");
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
oEmpLifeCycleItem.EffectDate = confirmDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Confirm date changed for ");
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.ConfirmationDate = confirmDate;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.ConfirmationDate = confirmDate;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle
oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
oEmpLifeCycle.EffectDate = confirmDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Confirm date changed for ");
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
oEmpLifeCycleItem.EffectDate = confirmDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Confirm date changed for ");
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, oEmployee, "Employee not found while updates Confirm date ");
}
}
}
}
#endregion
#region Employee Discontinue Data and Discontinue Type Update
//var oEmpDiscontinue = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0000")
// .Where(elmnt => ((string)elmnt.Element("MASSN")) == "ZZ");
var oEmpDiscontinue = oXElement.Descendants("E1P0000")
.Where(elmnt => ((string)elmnt.Element("MASSN")) == "ZZ");
foreach (XElement xEle in oEmpDiscontinue)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmpDiscontinueDate = (string)xEle.Element("BEGDA");
string sDiscontinueType = (string)xEle.Element("STAT2");
//if (sEmpNo.StartsWith("869")) continue;
Employee oEmployee = null;
if (sEmpDiscontinueDate != null)
{
DateTime discontinueDate = Convert.ToDateTime(sEmpDiscontinueDate.Substring(0, 4) + "-" +
sEmpDiscontinueDate.Substring(4, 2) + "-" +
sEmpDiscontinueDate.Substring(6, 2));
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.DiscontinueEffectDate = discontinueDate;
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (sDiscontinueType != null)
{
switch (Convert.ToInt16(sDiscontinueType))
{
case 0:
oEmpLifeCycle.Status = EnumEmployeeStatus.Discontinued;
oEmpLifeCycle.IsDiscontinue = true;
oEmpLifeCycle.EffectDate = discontinueDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee status changed to Discontinued for ");
break;
case 1:
oEmpLifeCycle.Status = EnumEmployeeStatus.Withheld;
oEmpLifeCycle.IsDiscontinue = true;
oEmpLifeCycle.EffectDate = discontinueDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed to Withheld for ");
break;
// case 3:
// oEmpLifeCycle.Status = EnumEmployeeStatus.Live;
// oEmpLifeCycle.EffectDate = discontinueDate;
// AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed for ");
// break;
default:
break;
}
}
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
if (sDiscontinueType != null)
{
switch (Convert.ToInt16(sDiscontinueType))
{
case 0:
oEmpLifeCycleItem.Status = EnumEmployeeStatus.Discontinued;
oEmpLifeCycleItem.IsDiscontinue = true;
oEmpLifeCycleItem.EffectDate = discontinueDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee status changed to Discontinued for ");
break;
case 1:
oEmpLifeCycleItem.Status = EnumEmployeeStatus.Withheld;
oEmpLifeCycleItem.IsDiscontinue = true;
oEmpLifeCycleItem.EffectDate = discontinueDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed to Withheld for ");
break;
// case 3:
// oEmpLifeCycleItem.Status = EnumEmployeeStatus.Live;
// oEmpLifeCycleItem.EffectDate = discontinueDate;
// oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
// oEmpLifeCycleItem.IsSapProcess = true;
// AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Confirm date changed for ");
// _newEmpLifeCycle.Add(oEmpLifeCycleItem);
// _SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
// AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed for ");
// break;
default:
break;
}
}
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.DiscontinueEffectDate = discontinueDate;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.DiscontinueEffectDate = discontinueDate;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (sDiscontinueType != null)
{
switch (Convert.ToInt16(sDiscontinueType))
{
case 0:
oEmpLifeCycle.Status = EnumEmployeeStatus.Discontinued;
oEmpLifeCycle.IsDiscontinue = true;
oEmpLifeCycle.EffectDate = discontinueDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee status changed to Discontinued for ");
break;
case 1:
oEmpLifeCycle.Status = EnumEmployeeStatus.Withheld;
oEmpLifeCycle.IsDiscontinue = true;
oEmpLifeCycle.EffectDate = discontinueDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed to Withheld for ");
break;
// case 3:
// oEmpLifeCycle.Status = EnumEmployeeStatus.Live;
// oEmpLifeCycle.EffectDate = discontinueDate;
// AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed for ");
// break;
default:
break;
}
}
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
if (sDiscontinueType != null)
{
switch (Convert.ToInt16(sDiscontinueType))
{
case 0:
oEmpLifeCycleItem.Status = EnumEmployeeStatus.Discontinued;
oEmpLifeCycleItem.IsDiscontinue = true;
oEmpLifeCycleItem.EffectDate = discontinueDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee status changed to Discontinued for ");
break;
case 1:
oEmpLifeCycleItem.Status = EnumEmployeeStatus.Withheld;
oEmpLifeCycleItem.IsDiscontinue = true;
oEmpLifeCycleItem.EffectDate = discontinueDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed to Withheld for ");
break;
// case 3:
// oEmpLifeCycleItem.Status = EnumEmployeeStatus.Live;
// oEmpLifeCycleItem.EffectDate = discontinueDate;
// oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
// oEmpLifeCycleItem.IsSapProcess = true;
// AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Confirm date changed for ");
// _newEmpLifeCycle.Add(oEmpLifeCycleItem);
// _SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
// AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Employee Status changed for ");
// break;
default:
break;
}
}
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating status for ");
}
}
}
}
#endregion
#region Employee Rehire
//var oEmpRehire = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0000")
// .Where(elmnt => ((string)elmnt.Element("MASSN")) == "Z3");
var oEmpRehire = oXElement.Descendants("E1P0000")
.Where(elmnt => ((string)elmnt.Element("MASSN")) == "Z3");
foreach (XElement xEle in oEmpRehire)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmpRehireDate = (string)xEle.Element("BEGDA");
//if (sEmpNo.StartsWith("869")) continue;
//string sDiscontinueType = (string)xEle.Element("STAT2");
Employee oEmployee = null;
if (sEmpRehireDate != null)
{
DateTime rehireDate = Convert.ToDateTime(sEmpRehireDate.Substring(0, 4) + "-" +
sEmpRehireDate.Substring(4, 2) + "-" +
sEmpRehireDate.Substring(6, 2));
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.ReHiringDate = rehireDate;
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
//oEmpLifeCycle.IsReHire = true;
oEmpLifeCycle.EffectDate = rehireDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Rehired Employee on {0} with ID ", rehireDate.ToString("dd MMM yyyy")));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//oEmpLifeCycle.IsReHire = true;
oEmpLifeCycleItem.EffectDate = rehireDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Rehired Employee on {0} with ID ", rehireDate.ToString("dd MMM yyyy")));
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.DiscontinueEffectDate = rehireDate;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.DiscontinueEffectDate = rehireDate;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
//oEmpLifeCycle.IsReHire = true;
oEmpLifeCycle.EffectDate = rehireDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Rehired Employee on {0} with ID ", rehireDate.ToString("dd MMM yyyy")));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//oEmpLifeCycleItem.IsReHire = true;
oEmpLifeCycleItem.EffectDate = rehireDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Rehired Employee on {0} with ID ", rehireDate.ToString("dd MMM yyyy")));
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating status for ");
}
}
}
}
#endregion
#region Employee Designation ,CC Data Update
//var oEmpDesigCC = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0001")
// .Where(elmnt => ((string)elmnt.Element("ENDDA") == "99991231")
// && ((string)elmnt.Element("PLANS") != "99999999"));
var oEmpDesigCC = oXElement.Descendants("E1P0001")
.Where(elmnt => ((string)elmnt.Element("ENDDA") == "99991231")
&& ((string)elmnt.Element("PLANS") != "99999999"));
foreach (XElement xEle in oEmpDesigCC)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmpDesignation = (string)xEle.Element("PLANS");
string sEpCCCode = (string)xEle.Element("KOSTL");
string sEffectDate = (string)xEle.Element("BEGDA");
//if (sEmpNo.StartsWith("869")) continue;
dEffectDate = sEffectDate == null ?
DateTime.MinValue :
Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
#region CostCenter Update
Employee oEmployee = null;
if (sEpCCCode != null)
{
Costcenter oCC = _Costcenters
.Where(oCCItem => oCCItem.Code == sEpCCCode)
.SingleOrDefault();
if (oCC != null)
{
CRGDepartmentLookup oCRG = _CRGDepartmentLookup
.Where(oCCItem => oCCItem.CrgID == oCC.ID)
.SingleOrDefault();
if (oCRG != null)
{
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null) // if Employee found in new Employee List
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
oSAPDataDump.CostCenterCode = sEpCCCode;
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
oEmpLifeCycle.CostCenterID = oCRG.CrgID;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Cost Center changed to {0} for ", sEpCCCode));
oEmpLifeCycle.DepartmentID = oCRG.DepartmentID;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Department changed for ");
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.CostCenterID = oCRG.CrgID;
oEmpLifeCycleItem.DepartmentID = oCRG.DepartmentID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Cost Center changed to {0} for ", sEpCCCode));
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Department changed for ");
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null) // Employee Found in Database
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.CostCenterCode = sEpCCCode;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.CostCenterCode = sEpCCCode;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
oEmpLifeCycle.CostCenterID = oCRG.CrgID;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Cost Center changed to {0} for ", sEpCCCode));
oEmpLifeCycle.DepartmentID = oCRG.DepartmentID;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Department changed for ");
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.CostCenterID = oCRG.CrgID;
oEmpLifeCycleItem.DepartmentID = oCRG.DepartmentID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Cost Center changed to {0} for ", sEpCCCode));
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Costcenter and Designation for ID ");
}
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Department code not found in Cost Center and Department Lookup for Cost center code:" + sEpCCCode + " for EmployeeNo ");
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Cost center code:" + sEpCCCode + " not found for ");
}
}
#endregion
#region Designation Update
Designation oDesignation = null;
if (sEmpDesignation != null)
{
oDesignation = _Designations
.Where(e => e.SapDesCodes
.Exists(q => q.SAPCode == sEmpDesignation))
.SingleOrDefault();
if (oDesignation != null)
{
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null) // Employee Found in new Employee List
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.DesignationCode = sEmpDesignation;
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.DesignationID = oDesignation.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Designation changed to {0} for ", oDesignation.Code));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.DesignationID = oDesignation.ID;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Designation changed to {0} for ", oDesignation.Code));
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.DesignationCode = sEmpDesignation;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.DesignationCode = sEmpDesignation;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.DesignationID = oDesignation.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Designation changed to {0} for ", oDesignation.Code));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.DesignationID = oDesignation.ID;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Designation changed to {0} for ", oDesignation.Code));
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Designation for ");
}
}
}
else
{
if (sEmpNo.StartsWith("869"))
{
oDesignation = _Designations
.Where(e => e.Name.Trim().ToUpper() == "EXTERNAL")
.SingleOrDefault();
if (oDesignation != null)
{
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null) // Employee Found in new Employee List
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
if (oEmployee.ID.Integer > 100000) // If Employee is new
{
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.DesignationCode = sEmpDesignation;
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.DesignationID = oDesignation.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Designation changed to {0} for ", oDesignation.Code));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.DesignationID = oDesignation.ID;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Designation changed to {0} for ", oDesignation.Code));
}
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
// Because it is an old Employee so
// Designation should not be set to EXTERNAL
continue;
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Designation for ");
}
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Default Designation Code: \'EXTERNAL\' Not found in Payroll for ");
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee Designation Code: " + sEmpDesignation + " Not found in Payroll for ");
}
}
}
#endregion
}
#endregion
#region Employee Location
//var oEmpLocations = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("Y1PAXX_9008WA01");
var oEmpLocations = oXElement.Descendants("Y1PAXX_9008WA01");
foreach (XElement xEle in oEmpLocations)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmpLocation = (string)xEle.Element("YBFO");
string sEffectDate = (string)xEle.Element("AEDTM");
//if (sEmpNo.StartsWith("869")) continue;
dEffectDate = sEffectDate == null ?
DateTime.MinValue :
Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
Employee oEmployee = null;
Location oLocation = null;
if (sEmpLocation != null)
{
oLocation = _Locations
.Where(oLocItem => oLocItem.Name.Trim().ToUpper() == sEmpLocation.Trim().ToUpper())
.OrderByDescending(x => x.Tier)
.Take(1)
.SingleOrDefault();
if (oLocation != null)
{
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy) continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.LocationCode = sEmpLocation;
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.LocationID = oLocation.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Location changed to {0} for ", sEmpLocation.Trim()));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.LocationID = oLocation.ID;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Location changed to {0} for ", sEmpLocation.Trim()));
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.LocationCode = sEmpLocation;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.LocationCode = sEmpLocation;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.LocationID = oLocation.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Location changed to {0} for ", sEmpLocation.Trim()));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.LocationID = oLocation.ID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Location changed to {0} for ", sEmpLocation.Trim()));
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Location for ");
}
}
}
else
{
oLocation = _Locations
.Where(oLocItem => oLocItem.Name.Trim().ToUpper() == "Location_Error".Trim().ToUpper())
.OrderByDescending(x => x.Tier)
.Take(1)
.SingleOrDefault();
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.LocationCode = sEmpLocation;
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.LocationID = oLocation.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee
, String.Format("Location Not found: \'{0}\',Set to Default Location: \'{1}\' for ", sEmpLocation.Trim(), oLocation.Name.Trim()));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.LocationID = oLocation.ID;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee
, String.Format("Location Not found: \'{0}\',Set to Default Location: \'{1}\' for ", sEmpLocation.Trim(), oLocation.Name.Trim()));
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.LocationCode = sEmpLocation;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.LocationCode = sEmpLocation;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.LocationID = oLocation.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee
, String.Format("Location Not found: \'{0}\',Set to Default Location: \'{1}\' for ", sEmpLocation.Trim(), oLocation.Name.Trim()));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.LocationID = oLocation.ID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee
, String.Format("Location Not found: \'{0}\',Set to Default Location: \'{1}\' for ", sEmpLocation.Trim(), oLocation.Name.Trim()));
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
}
//Error Generate
//AddProcessStatus(EnumSAPProcessStatus.Error, oEmployee, "Life Cycle Employee not found.");
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Location for ");
}
}
}
}
}
#endregion
#region Bank data update
//var oEmpBank = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0009");
var oEmpBank = oXElement.Descendants("E1P0009");
foreach (XElement xEle in oEmpBank)
{
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmpBranchCode = (string)xEle.Element("BANKL");
string sEmpACNo = (string)xEle.Element("BANKN");
string sEffectDate = (string)xEle.Element("BEGDA");
//if (sEmpNo.StartsWith("869")) continue;
if (sEmpBranchCode != null)
{
Branch oBranch = _Branchs
.Where(oItem => oItem.Code == sEmpBranchCode)
.SingleOrDefault();
Employee oEmployee = null;
if (oBranch != null)
{
Bank oBank = _Banks
.Where(oItem => oItem.ID == oBranch.BankID)
.SingleOrDefault();
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.BankCode = sEmpBranchCode;
oSAPDataDump.BankAccountNo = sEmpACNo;
EmployeeBankAccount
oEmpBankAccount = _EmployeeBankAccounts
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpBankAccount != null)
{
oEmpBankAccount.BranchID = oBranch.ID;
if (sEmpACNo != null)
{
oEmpBankAccount.AccountNo = sEmpACNo;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Account Number changed to {0} for ", sEmpACNo));
}
if (sEffectDate != null)
{
oEmpBankAccount.EffectDate = Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Bank effect date changed to {0} for ", oEmpBankAccount.EffectDate.ToString("dd MMM yyyy")));
}
oEmpBankAccount.EmployeeID = oEmployee.ID;
//oEmpBankAccount.IsSapProcess = true;
//_newEmpBankAccount.Add(oEmpBankAccount);
_SAPDProcess.EmpBankAccounts.Add(oEmpBankAccount);
}
else
{
EmployeeBankAccount oBankAccount = new EmployeeBankAccount();
oBankAccount.BranchID = oBranch.ID;
if (sEmpACNo != null)
{
oBankAccount.AccountNo = sEmpACNo;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Account Number changed to {0} for ", sEmpACNo));
}
if (sEffectDate != null)
{
oBankAccount.EffectDate = Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Bank effect date changed to {0} for ", oBankAccount.EffectDate.ToString("dd MMM yyyy")));
}
//AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Successfully add bank account history. ");
oBankAccount.EmployeeID = oEmployee.ID;
//oBankAccount.IsSapProcess = true;
//_newEmpBankAccount.Add(oBankAccount);
_SAPDProcess.EmpBankAccounts.Add(oBankAccount);
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.BankCode = sEmpBranchCode;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.BankCode = sEmpBranchCode;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmployeeBankAccount
oEmpBankAccount = _EmployeeBankAccounts
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpBankAccount != null)
{
oEmpBankAccount.BranchID = oBranch.ID;
if (sEmpACNo != null)
{
oEmpBankAccount.AccountNo = sEmpACNo;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Account Number changed to {0} for ", sEmpACNo));
}
if (sEffectDate != null)
{
oEmpBankAccount.EffectDate = Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Bank effect date changed to {0} for ", oEmpBankAccount.EffectDate.ToString("dd MMM yyyy")));
}
oEmpBankAccount.EmployeeID = oEmployee.ID;
// oEmpBankAccount.IsSapProcess = true;
//_newEmpBankAccount.Add(oEmpBankAccount);
_SAPDProcess.EmpBankAccounts.Add(oEmpBankAccount);
}
else
{
EmployeeBankAccount oBankAccount = new EmployeeBankAccount();
oBankAccount.BranchID = oBranch.ID;
if (sEmpACNo != null)
{
oBankAccount.AccountNo = sEmpACNo;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Account Number changed to {0} for ", sEmpACNo));
}
if (sEffectDate != null)
{
oBankAccount.EffectDate = Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Bank effect date changed to {0} for ", oBankAccount.EffectDate.ToString("dd MMM yyyy")));
}
//AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Successfully add bank account history. ");
oBankAccount.EmployeeID = oEmployee.ID;
//oBankAccount.IsSapProcess = true;
//_newEmpBankAccount.Add(oBankAccount);
_SAPDProcess.EmpBankAccounts.Add(oBankAccount);
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Bank for ");
}
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Branch Code:" + sEmpBranchCode + " not found in Payroll for ");
}
}
}
#endregion
#region Employee Grades Data Update
//var oEmpGrades = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("Y1PAXX_9006IR01");
var oEmpGrades = oXElement.Descendants("Y1PAXX_9006IR01");
foreach (XElement xEle in oEmpGrades)
{
Grade oGrade = null;
Employee oEmployee = null;
string sEmpNo = (string)xEle.Element("PERNR");
_sEmpNo = sEmpNo;
string sEmpGrade = (string)xEle.Element("YLJOB_LEVEL");
string sEffectDate = (string)xEle.Element("BEGDA");
if (sEmpNo.StartsWith("869")) continue;
dEffectDate = sEffectDate == null ?
DateTime.MinValue :
Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
if (sEmpGrade != null)
{
oGrade = _Grades
.Where(oGradeItem => oGradeItem.Code.Trim().ToUpper() == sEmpGrade.Trim().ToUpper())
.SingleOrDefault();
if (oGrade != null)
{
oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.LocalJobGrade = sEmpGrade;
EmpLifeCycle
oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.GradeID = oGrade.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Grade changed to {0} for ", sEmpGrade.Trim()));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.GradeID = oGrade.ID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Grade changed to {0} for ", sEmpGrade.Trim()));
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.LocalJobGrade = sEmpGrade;
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.LocalJobGrade = sEmpGrade;
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle
oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
oEmpLifeCycle.GradeID = oGrade.ID;
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Grade changed to {0} for ", sEmpGrade.Trim()));
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
oEmpLifeCycleItem.GradeID = oGrade.ID;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, String.Format("Grade changed to {0} for ", sEmpGrade.Trim()));
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating Grade for ");
}
}
}
else
{
//Error Generate
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Grade code:" + sEmpGrade + " not found for ");
}
}
}
#endregion
#region Update Basic Salary
//var oEmpBasicSalary = oXElement.Elements("IDOC").Elements("E1PLOGI").Elements("E1PITYP")
// .Elements("E1P0014")
// .Where(elmnt => ((string)elmnt.Element("SUBTY")) == "8000");
var oEmpBasicSalary = oXElement.Descendants("E1P0014")
.Where(elmnt => ((string)elmnt.Element("SUBTY")) == "8000"
&& ((string)elmnt.Element("ENDDA")) == "99991231");
foreach (XElement xEle in oEmpBasicSalary)
{
string sEmpNo = (string)xEle.Element("PERNR");
string sBasicSalary = (string)xEle.Element("BETRG");
string sEffectDate = (string)xEle.Element("BEGDA");
_sEmpNo = sEmpNo;
if (sEmpNo.StartsWith("869")) continue;
dEffectDate = sEffectDate == null ?
DateTime.MinValue :
Convert.ToDateTime(sEffectDate.Substring(0, 4) + "-" +
sEffectDate.Substring(4, 2) + "-" +
sEffectDate.Substring(6, 2));
Employee oEmployee = _SAPDProcess.SAPEmployees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
//Employee tempEmp;
//if ((tempEmp = _Employees
// .Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
// .SingleOrDefault()) != null)
//{
// if (tempEmp.BasicSalary > Convert.ToDouble(sBasicSalary))
// {
// AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee BasicSalary was less than current basic salary for ");
// continue;
// }
//}
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(o => o.EmployeeID == oEmployee.ID)
.Single();
oSAPDataDump.BasicSalary = Convert.ToDouble(sBasicSalary);
EmpLifeCycle oEmpLifeCycleItem = _SAPDProcess.SAPEmpLifeCycles
.Where(oEmpItem => oEmpItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycleItem != null)
{
if (oEmpLifeCycleItem.Status == EnumEmployeeStatus.Discontinued) continue;
if (sBasicSalary != null)
{
oEmpLifeCycleItem.BasicSalary = Convert.ToDouble(sBasicSalary);
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Basic salary changed for ");
}
}
else
{
oEmpLifeCycleItem = new EmpLifeCycle();
if (sBasicSalary != null)
{
oEmpLifeCycleItem.BasicSalary = Convert.ToDouble(sBasicSalary);
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Basic salary changed for ");
}
}
}
else
{
oEmployee = _Employees
.Where(oEmpItem => oEmpItem.EmployeeNo == sEmpNo)
.SingleOrDefault();
if (oEmployee != null)
{
//if (oEmployee.BasicSalary > Convert.ToDouble(sBasicSalary))
//{
// AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee BasicSalary was less than current basic salary for ");
// continue;
//}
if (oEmployee.Status == EnumEmployeeStatus.Secondy)
continue;
SAPDataDump oSAPDataDump = _SAPDProcess
.SAPDataDumps
.Where(oItem => oItem.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oSAPDataDump != null)
{
oSAPDataDump.BasicSalary = Convert.ToDouble(sBasicSalary);
}
else
{
oSAPDataDump = new SAPDataDump();
oSAPDataDump.EmployeeID = oEmployee.ID;
oSAPDataDump.BasicSalary = Convert.ToDouble(sBasicSalary);
_SAPDProcess.SAPDataDumps.Add(oSAPDataDump);
}
EmpLifeCycle oEmpLifeCycle = _SAPDProcess.SAPEmpLifeCycles
.Where(obj => obj.EmployeeID == oEmployee.ID)
.SingleOrDefault();
if (oEmpLifeCycle != null)
{
if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued) continue;
if (sBasicSalary != null)
{
oEmpLifeCycle.BasicSalary = Convert.ToDouble(sBasicSalary);
oEmpLifeCycle.EffectDate = sEffectDate == null ? oEmpLifeCycle.EffectDate : dEffectDate;
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Basic salary changed for ");
}
}
else
{
EmpLifeCycle oEmpLifeCycleItem = new EmpLifeCycle();
if (sBasicSalary != null)
{
oEmpLifeCycleItem.BasicSalary = Convert.ToDouble(sBasicSalary);
oEmpLifeCycleItem.EmployeeID = oEmployee.ID;
//oEmpLifeCycleItem.IsSapProcess = true;
oEmpLifeCycleItem.EffectDate = sEffectDate == null ? oEmpLifeCycleItem.EffectDate : dEffectDate;
//_newEmpLifeCycle.Add(oEmpLifeCycleItem);
_SAPDProcess.SAPEmpLifeCycles.Add(oEmpLifeCycleItem);
AddProcessStatus(EnumSAPProcessStatus.Success, oEmployee, "Basic salary changed for ");
}
}
}
else
{
AddProcessStatus(EnumSAPProcessStatus.Error, null, "Employee not found while updating BasicSalary for ");
}
}
}
#endregion
}
private void AssignLifeCycleEvent()
{
if (_SAPDProcess != null)
{
foreach (EmpLifeCycle oEmpLifeCycle in _SAPDProcess.SAPEmpLifeCycles)
{
if (!_EmpLifeCycles
.Where(obj => obj.EmployeeID == oEmpLifeCycle.EmployeeID)
.Any())
{
#region Joining
EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(100); });
oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
oEmpLifeCycle.Description = "Joining by SAP";
#endregion
}
else
{
//EmpLifeCycle oPrvEmpLCycle = _EmpLifeCycles.Find(delegate(EmpLifeCycle oEmpItem) { return oEmpItem.EmployeeID == oEmpLifeCycle.EmployeeID; });
if (oEmpLifeCycle.IsDiscontinue != null && oEmpLifeCycle.IsDiscontinue == true)
{
EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(102); });
oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
oEmpLifeCycle.Description = "Discontinued By SAP";
}
//else if (oEmpLifeCycle.IsReHire != null && oEmpLifeCycle.IsReHire == true)
//{
// EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(103); });
// oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
// oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
// oEmpLifeCycle.Description = "Rehired By SAP";
//}
else
{
EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(101); });
oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
oEmpLifeCycle.Description = "Updated By SAP";
}
//#region Grade & Basic Salary Change
//if (oPrvEmpLCycle.BasicSalary != oEmpLifeCycle.BasicSalary && oPrvEmpLCycle.GradeID != oEmpLifeCycle.GradeID)
//{
// EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(2); });
// oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
// oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
// oEmpLifeCycle.Description = "Promotion";
//}
//#endregion
//#region Basic Salary Change
//else if (oPrvEmpLCycle.BasicSalary != oEmpLifeCycle.BasicSalary)
//{
// EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(4); });
// oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
// oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
// oEmpLifeCycle.Description = "Salary Revised";
// oEmpLifeCycle.Status = EnumEmployeeStatus.Live;
//}
//#endregion
//#region Grade,Location,CostCenter,Designation Change
//else if (oPrvEmpLCycle.GradeID != oEmpLifeCycle.GradeID || oPrvEmpLCycle.LocationID != oEmpLifeCycle.LocationID || oPrvEmpLCycle.CostCenterID != oEmpLifeCycle.CostCenterID || oPrvEmpLCycle.DesignationID != oEmpLifeCycle.DesignationID)
//{
// EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(14); });
// oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
// oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
// oEmpLifeCycle.Description = "Transfer";
//}
//#endregion
//#region Confirmation
////if (oPrvEmpLCycle.EffectDate != oEmpLifeCycle.EffectDate)
////{
//// EmployeeStatus oEmpStatus = _EmployeeStatuss.Find(delegate(EmployeeStatus oEmpItem) { return oEmpItem.ID == ID.FromInteger(27); });
//// oEmpLifeCycle.StatusDetailID = oEmpStatus.ID;
//// oEmpLifeCycle.Status = oEmpStatus.EmpStatus;
//// oEmpLifeCycle.Description = "Confirmation";
////}
//#endregion
//#region Discontinue Type
////if (oPrvEmpLCycle.Status != oEmpLifeCycle.Status)
////{
//// if(oEmpLifeCycle.Status==EnumEmployeeStatus.Withheld)
//// {
//// }
//// else if (oEmpLifeCycle.Status == EnumEmployeeStatus.Discontinued)
//// {
//// }
//// //oEmpLifeCycle.Status = oPrvEmpLCycle.Status;
////}
//#endregion
}
}
}
}
public void SaveFileToBackUp(string xmlFileName)
{
try
{
string sSourceFileName = string.Empty;
string sDestinationFileName = string.Empty;
string[] sFileName = null;
if (_IntigrationSetup != null)
{
sSourceFileName = xmlFileName;
sFileName = sSourceFileName.Split('\\');
sDestinationFileName = _IntigrationSetup.StoreFilePath + "\\" + sFileName[sFileName.Length - 1];
}
if (File.Exists(xmlFileName))
{
File.Copy(sSourceFileName, sDestinationFileName, true);
File.Delete(sSourceFileName);
}
else
{
throw new Exception("Please check the file location..");
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
private void ReadXMLFiles()
{
try
{
if (_IntigrationSetup != null)
{
string[] files = Directory.GetFiles(_IntigrationSetup.ReadFilePath, "*.xml", SearchOption.TopDirectoryOnly);
var oFiles = new DirectoryInfo(_IntigrationSetup.ReadFilePath)
.GetFiles("*.xml", SearchOption.TopDirectoryOnly)
.OrderBy(f => f.Name)
.ToList();
//Array.Sort(files);
if (oFiles != null && oFiles.Count() > 0)
{
foreach (FileInfo ofile in oFiles)
{
if (SAPDataProcess.IsFileSuccessfullyRead(ofile.Name))
{
_sEmpNo = string.Empty;
AddProcessStatus(EnumSAPProcessStatus.Error, null, "File : " + ofile.Name + " was successfully read previously.Please check why it was given again");
continue;
}
ReadXMLFile(ofile.FullName);
}
}
else
{
throw new Exception("There is no file in:" + _IntigrationSetup.ReadFilePath);
}
}
}
catch (Exception Ex)
{
throw new Exception(Ex.Message);
}
}
private void ReadXMLFile(string xmlFileName)
{
if (File.Exists(xmlFileName))
{
XElement xelement = null;
xelement = XElement.Load(xmlFileName);
RefreshNewJoiner(xelement);
RefreshEmpLifeCycle(xelement);
AssignLifeCycleEvent();
}
else
{
throw new Exception("Please check the file location..");
}
}
private SAPDataProcess SAPProcessStatus(DateTime dProcessDate, EnumSAPProcessStatus nProcessStatus, string sProcessTime, ID nProcessBy, EnumSendMail nMailStatus)
{
_SAPDProcess.ProcessDate = DateTime.Now;
_SAPDProcess.ProcessStatus = EnumSAPProcessStatus.Success;
_SAPDProcess.ProcessTime = _SAPDProcess.ProcessDate.ToString("hh:mm tt");
_SAPDProcess.ProcessBy = Payroll.BO.SystemInformation.CurrentSysInfo.ModifiedBy;
_SAPDProcess.MailCompleted = EnumSendMail.None;
return _SAPDProcess;
}
public void AddProcessStatus(EnumSAPProcessStatus nStatus, Employee oEmp, string remarks)
{
if (oEmp != null)
{
if (nStatus == EnumSAPProcessStatus.Error)
{
SAPDataProcessDetail oSAPProcessDetail = new SAPDataProcessDetail();
oSAPProcessDetail.EmployeeNo = oEmp.EmployeeNo;
oSAPProcessDetail.Name = oEmp.Name;
oSAPProcessDetail.DataType = "";
oSAPProcessDetail.Description = remarks + oEmp.EmployeeNo + "," + oEmp.Name;
_ErrorList.Add(oSAPProcessDetail);
_SAPDProcess.ErrorList.Add(oSAPProcessDetail);
}
else if (nStatus == EnumSAPProcessStatus.Success)
{
SAPDataProcessDetail oSAPProcessDetail = new SAPDataProcessDetail();
oSAPProcessDetail.EmployeeNo = oEmp.EmployeeNo;
oSAPProcessDetail.Name = oEmp.Name;
oSAPProcessDetail.DataType = "";
oSAPProcessDetail.Description = remarks + oEmp.EmployeeNo + "," + oEmp.Name;
_SucccessList.Add(oSAPProcessDetail);
_SAPDProcess.SuccessList.Add(oSAPProcessDetail);
}
}
else
{
if (nStatus == EnumSAPProcessStatus.Error)
{
SAPDataProcessDetail oSAPProcessDetail = new SAPDataProcessDetail();
oSAPProcessDetail.EmployeeNo = _sEmpNo;
oSAPProcessDetail.Name = "";
oSAPProcessDetail.DataType = "";
oSAPProcessDetail.Description = remarks + _sEmpNo;
_ErrorList.Add(oSAPProcessDetail);
_SAPDProcess.ErrorList.Add(oSAPProcessDetail);
}
else if (nStatus == EnumSAPProcessStatus.Success)
{
SAPDataProcessDetail oSAPProcessDetail = new SAPDataProcessDetail();
oSAPProcessDetail.EmployeeNo = _sEmpNo;
oSAPProcessDetail.Name = "";
oSAPProcessDetail.DataType = "";
oSAPProcessDetail.Description = remarks + _sEmpNo;
_SucccessList.Add(oSAPProcessDetail);
_SAPDProcess.SuccessList.Add(oSAPProcessDetail);
}
}
}
#region Downloading Files from an FTP Server
private void DownloadXMLFilesFromFTP()
{
List filesToDownload = GetAllFileListFromAnFTPPath();
string tempDestinationPath = string.Empty;
try
{
tempDestinationPath = System.IO.Path.Combine(_IntigrationSetup.ReadFilePath, "Out");
System.IO.Directory.CreateDirectory(tempDestinationPath);
}
catch (Exception)
{
throw new Exception("threw from Creationg Out directory");
}
try
{
DownloadListedFilesFromFTP(filesToDownload, tempDestinationPath);
}
catch (Exception)
{
throw new Exception("threw from Downloading files to out");
}
try
{
DecryptFiles(filesToDownload, tempDestinationPath);
}
catch (Exception)
{
throw new Exception("threw from Decrypting files");
}
try
{
System.IO.Directory.Delete(tempDestinationPath, true);
}
catch (Exception)
{
throw new Exception("threw from deleting temporary file Out");
}
}
private List GetAllFileListFromAnFTPPath()
{
List filesToDownload = new List();
WebResponse response;
FtpWebRequest ftp;
try
{
ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(_IntigrationSetup.FTPFilePath));
}
catch (Exception)
{
throw new Exception("Threw from Creating FtpRequest");
}
try
{
ftp.Credentials = new NetworkCredential(_IntigrationSetup.FTPUserName, _IntigrationSetup.FTPPassword);
}
catch (Exception)
{
throw new Exception("Threw from Getting Network Credentials");
}
try
{
ftp.Method = WebRequestMethods.Ftp.ListDirectory;
}
catch (Exception)
{
throw new Exception("Threw from Listing Directory");
}
try
{
response = ftp.GetResponse();
}
catch (Exception)
{
throw new Exception("Threw from Listing Directory");
}
try
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
filesToDownload.Add(line);
line = reader.ReadLine();
}
reader.Close();
response.Close();
}
catch (Exception)
{
throw new Exception("Threw from Reading List");
}
return filesToDownload;
}
private void DownloadListedFilesFromFTP(List filesToDownload, string tempDestFilePath)
{
foreach (string fileName in filesToDownload)
{
FtpWebRequest reqFTP;
FileStream outputStream = new FileStream(tempDestFilePath + "\\" + fileName, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(_IntigrationSetup.FTPFilePath + "/" + fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(_IntigrationSetup.FTPUserName, _IntigrationSetup.FTPPassword);
FtpWebResponse ftpresponse = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = ftpresponse.GetResponseStream();
long cl = ftpresponse.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
ftpresponse.Close();
}
}
#endregion
#region Decrypt DownLoaded File
private void DecryptFiles(List fileNamesToDecrypt, string tempDestFilePath)
{
foreach (string fileName in fileNamesToDecrypt)
{
DecryptFile(tempDestFilePath, _IntigrationSetup.ReadFilePath, _IntigrationSetup.PrivateKeyFilePath, fileName);
}
}
private void DecryptFile(string sourceFilePath, string destinationFilePath, string privateKeyFilePath, string fileName)
{
Stream filestream = new FileStream(sourceFilePath + "\\" + fileName, FileMode.Open, FileAccess.Read);
Decrypt(filestream, destinationFilePath + "\\" + fileName, privateKeyFilePath);
filestream.Close();
}
private void Decrypt(Stream input, string outputpath, String privateKeyPath)
{
input = PgpUtilities.GetDecoderStream(input);
try
{
PgpObjectFactory pgpObjF = new PgpObjectFactory(input);
PgpEncryptedDataList enc;
PgpObject obj = pgpObjF.NextPgpObject();
if (obj is PgpEncryptedDataList)
{
enc = (PgpEncryptedDataList)obj;
}
else
{
enc = (PgpEncryptedDataList)pgpObjF.NextPgpObject();
}
var akp = new Org.BouncyCastle.Crypto.AsymmetricKeyParameter(true);
PgpPrivateKey privKey = GetPrivateKey(privateKeyPath);
PgpPublicKeyEncryptedData pbe = enc.GetEncryptedDataObjects().Cast().First();
Stream clear;
clear = pbe.GetDataStream(privKey);
PgpObjectFactory plainFact = new PgpObjectFactory(clear);
PgpObject message = plainFact.NextPgpObject();
if (message is PgpCompressedData)
{
PgpCompressedData cData = (PgpCompressedData)message;
Stream compDataIn = cData.GetDataStream();
PgpObjectFactory o = new PgpObjectFactory(compDataIn);
message = o.NextPgpObject();
if (message is PgpOnePassSignatureList)
{
message = o.NextPgpObject();
PgpLiteralData Ld = null;
Ld = (PgpLiteralData)message;
Stream output = File.Create(outputpath + "\\" + Ld.FileName);
Stream unc = Ld.GetInputStream();
Streams.PipeAll(unc, output);
output.Close();
}
else
{
PgpLiteralData Ld = null;
Ld = (PgpLiteralData)message;
//Stream output = File.Create(outputpath + "\\" + Ld.FileName);
Stream output = File.Create(outputpath);
Stream unc = Ld.GetInputStream();
Streams.PipeAll(unc, output);
output.Close();
}
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
private PgpPrivateKey GetPrivateKey(string privateKeyPath)
{
using (Stream keyIn = File.OpenRead(privateKeyPath))
using (Stream inputStream = PgpUtilities.GetDecoderStream(keyIn))
{
PgpSecretKeyRingBundle secretKeyRingBundle = new PgpSecretKeyRingBundle(inputStream);
PgpSecretKey key = null;
foreach (PgpSecretKeyRing kRing in secretKeyRingBundle.GetKeyRings())
{
foreach (PgpSecretKey secretKey in kRing.GetSecretKeys())
{
PgpPrivateKey privKey = secretKey.ExtractPrivateKey("HRCoreBD2013".ToCharArray());
return privKey;
//if (privKey.Key.GetType() ==
// typeof(Org.BouncyCastle.Crypto.Parameters.ElGamalPrivateKeyParameters))
////Org.BouncyCastle.Crypto.Parameters.ElGamalPrivateKeyParameters
//{
// return privKey;
//}
}
}
}
return null;
}
#endregion
#region Delete Files From
public void DeleteFromFTP(string fileName)
{
try
{
//string uri = "ftp://" + ftpServerIP + "/" + fileName;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(_IntigrationSetup.FTPFilePath + "/" + fileName));
reqFTP.Credentials = new NetworkCredential(_IntigrationSetup.FTPUserName, _IntigrationSetup.FTPPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
string result = String.Empty;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
long size = response.ContentLength;
Stream datastream = response.GetResponseStream();
StreamReader sr = new StreamReader(datastream);
result = sr.ReadToEnd();
sr.Close();
datastream.Close();
response.Close();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#endregion
}
}