You should already have Payroll Position Master. And be carefull with date validation in most of HCM and Payroll tables related.
static void Import_Worker_InsertUpdate(Args _args)
{
RecId workerRecId,hcmEmploymentRecId;
HcmPersonnelNumberId personnumx;
date datehiringx,datebirthx;
str 20 namefirtsx,namemidx,namelastx,initialx,educationx,subeducationx;
str 20 bankx,bankaccx,npx,levelx,updatedatax;
str 1 genderx;
HcmPersonGender hcmgenderEnum;
Gender genderEnum;
Dialog dialog;
DialogField dialogField,dialogField2,dialogdate,dialogField3,dialogField4;
Filename filename,filenamex;
str 60 oldnumx,newnumx,cityx,namex,positionx;
str 100 addressx;
TextIO io;
Container con;
Container filterCriteria;
COMVariant cOMVariant;
int i,j,k;
SysOperationProgress simpleProgress;
Numberseq numberseq;
Filename filepathz;
Filename filenamez;
Filename fileTypez;
str fileNameString;
CommaTextIo file;
boolean ret = true;
CompanyInfo companyInfo;
HcmEmploymentRecId newEmploymentRecId;
ValidFromDateTime employmentStartDateTime;
ValidToDateTime employmentEndDateTime;
DirPerson _dirPerson;
DirPersonName _dirPersonName;
DirPartyTable _dirPartyTable;
DirPartyLocation _dirPartyLocation;
HcmEmploymentType hcmEmploymentType = HcmEmploymentType::Employee;
NumberSeq numberSeqPersonnelNum;
AxLogisticsPostalAddress axLogisticsPostalAddress = new AxLogisticsPostalAddress();
AxLogisticsLocation axLogisticsLocation;
LogisticsPostalAddress logisticsPostalAddress_Default,_logisticsPostalAddress;
HcmWorker newHcmWorker,_hcmWorker;
HcmPersonPrivateDetails _hcmPersonPrivateDetails0,_hcmPersonPrivateDetails;
HcmPersonEducation _hcmPersonEducation;
HcmWorkerBankAccount _hcmWorkerBankAccount;
HcmEmploymentEmployee _hcmEmploymentEmployee,_hcmEmploymentEmployee0;
HcmPositionDetail _hcmPositionDetail;
HcmEmployment _hcmEmployment,_hcmEmployment2;
HcmPositionWorkerAssignment _hcmPositionWorkerAssignment,_hcmPositionWorkerAssignment2;
HcmPersonLaborUnion _hcmPersonLaborUnion;
HcmPositionUnionAgreement _hcmPositionUnionAgreement;
#avifiles
;
Dialog = new Dialog("Import insert and update worker ("+curext()+")");
dialogField = dialog.addField(ExtendedTypeStr("FilenameOpen"));
filterCriteria = ['*.txt','*.txt'];// To filter only TXT files
filterCriteria = dialog.filenameLookupFilter(filterCriteria);
dialog.run();
if(dialog.run())
fileName = dialogField.value();
if(!fileName)
{
Error('File is not selected. Process cancelled!');
return;
}
filenamex = filename;
[filepathz, filenamez, fileTypez] = fileNameSplit(filenamex);
fileNameString= filenamez + fileTypez;
try //#1
{
if(dialog.run()) //#2
{
file = new CommaTextIo(dialogField.value(), 'r');
file.inFieldDelimiter(';');
j=0;
k=0;
while((file.status()==IO_Status::Ok)) //#3
{
con = file.read();
//info(int2str(conlen(con)));
if (conlen(con) == 19) //#4
{
//*** GetValue
personnumx = conPeek(con, 1);
datehiringx = str2Date(conPeek(con, 2),123);
namefirtsx = conPeek(con, 3);
namemidx = conPeek(con, 4);
namelastx = conPeek(con, 5);
datebirthx = str2Date(conPeek(con, 6),123);
genderx = conPeek(con, 7);
switch (genderx)
{
case 'F':
hcmgenderEnum = HcmPersonGender::Female;
genderEnum = Gender::Female;
break;
case 'M':
hcmgenderEnum = HcmPersonGender::Male;
genderEnum = Gender::Male;
break;
default:
hcmgenderEnum = HcmPersonGender::None;
genderEnum = Gender::Unknown;
}
initialx = conPeek(con, 8);
positionx = conPeek(con, 9);
addressx = conPeek(con, 10);
cityx = conPeek(con, 11);
companyInfo = CompanyInfo::findByCompany_IN(conPeek(con, 12));
educationx = conPeek(con, 13);
subeducationx = conPeek(con, 14);
bankx = conPeek(con, 15);
bankaccx = conPeek(con, 16);
npx = conPeek(con, 17);
levelx = conPeek(con, 18);
updatedatax = conPeek(con, 19);
employmentStartDateTime = DateTimeUtil::newDateTime(datehiringx,timeNow());
employmentEndDateTime = DateTimeUtil::maxValue();
if (!HcmWorker::findByPersonnelNumber(personnumx).RecId)
{
//{warning(strFmt('Employee exists! %1',personnumx)); }
/*** BEGIN INSERT DATA ***/
_dirPersonName.FirstName = namefirtsx;
_dirPersonName.MiddleName = namemidx;
_dirPersonName.LastName = namelastx;
namex = namefirtsx+' '+namemidx+' '+namelastx;
_dirPartyTable = DirPartyTable::createNew(DirPartyType::Person, namex);
_dirPerson = DirPerson::find(_dirPartyTable.RecId, true);
_dirPerson.Gender = genderEnum;
_dirPerson.Initials = initialx;
_dirPerson.ProfessionalTitle = positionx;
_dirPerson.LanguageId = 'en-us';
_dirPerson.NameSequence = DirNameSequence::find("FirstMiddleLast").RecId;
_dirPerson.write();
//HcmWorkerTransition::newCreateHcmWorker(_dirPersonName,personnumx,companyInfo.RecId,
// hcmEmploymentType,employmentStartDateTime,employmentEndDateTime);
_hcmWorker.PersonnelNumber = personnumx;
_hcmWorker.Person = _dirPerson.RecId;
_hcmWorker.insert();
newHcmWorker = HcmWorker::findByPersonnelNumber(personnumx);
//info(strFmt('0.personnumx %1',personnumx));
//info(strFmt('1.newHcmWorker.RecId %1',newHcmWorker.RecId));
if(newHcmWorker.RecId != 0)
{
select * from _hcmEmployment where _hcmEmployment.Worker == newHcmWorker.RecId;
// Replace any exisiting employment
//info(strFmt('2._hcmEmployment.Worker %1',_hcmEmployment.Worker));
if(!_hcmEmployment)
{
newEmploymentRecId = HcmWorkerTransition::newCreateHcmEmployment(newHcmWorker.RecId, companyInfo.RecId,
hcmEmploymentType, employmentStartDateTime, employmentEndDateTime);
}
else
{
delete_from _hcmEmployment2 where _hcmEmployment2.Worker == newHcmWorker.RecId;
newEmploymentRecId = HcmWorkerTransition::newCreateHcmEmployment(newHcmWorker.RecId, companyInfo.RecId,
hcmEmploymentType, employmentStartDateTime, employmentEndDateTime);
}
}
_hcmPersonPrivateDetails0 = HcmPersonPrivateDetails::findByPerson(newHcmWorker.Person);
//info(strFmt('4._hcmPersonPrivateDetails0.RecId %1',_hcmPersonPrivateDetails0.RecId));
if(!_hcmPersonPrivateDetails0)
{
//info('4._hcmPersonPrivateDetails0 - no exist');
_hcmPersonPrivateDetails.Person = newHcmWorker.Person;
_hcmPersonPrivateDetails.BirthDate = datebirthx;
_hcmPersonPrivateDetails.Education = educationx+' / '+levelx;
_hcmPersonPrivateDetails.Gender = hcmgenderEnum;
_hcmPersonPrivateDetails.insert();
}
else
{
//info('4._hcmPersonPrivateDetails0 - exist');
select forupdate _hcmPersonPrivateDetails0;
ttsBegin;
_hcmPersonPrivateDetails0.BirthDate = datebirthx;
_hcmPersonPrivateDetails0.Gender = hcmgenderEnum;
_hcmPersonPrivateDetails0.update();
ttsCommit;
}
//Create address
axLogisticsLocation = new AxLogisticsLocation();
axLogisticsLocation.validateInput(true);
axLogisticsLocation.parmIsPostalAddress(NoYes::Yes);
axLogisticsLocation.parmDescription(namefirtsx
+ (namemidx ? " " + namemidx : "")
+ (namelastx ? " " + namelastx : ""));
axLogisticsLocation.save();
axLogisticsPostalAddress = new AxLogisticsPostalAddress();
axLogisticsPostalAddress.parmLocation(axLogisticsLocation.parmRecId());
axLogisticsPostalAddress.validateInput(true);
logisticsPostalAddress_Default.initValue();
axLogisticsPostalAddress.parmCountryRegionId(logisticsPostalAddress_Default.CountryRegionId);
//axLogisticsPostalAddress.parmZipCode(conpeek(_c, #PostalCode));
//axLogisticsPostalAddress.parmZipCodeRecId(LogisticsAddressZipCode::find(conpeek(_c, #PostalCode)).RecId);
axLogisticsPostalAddress.parmStreet(addressx);
axLogisticsPostalAddress.parmCity(cityx);
axLogisticsPostalAddress.parmCityRecId(LogisticsAddresssCity::findCity(cityx,logisticsPostalAddress_Default.CountryRegionId).RecId);
axLogisticsPostalAddress.save();
DirParty::addLocation(newHcmWorker.Person, axLogisticsLocation.parmRecId(), true, true, true);
_hcmPersonEducation.Person = newHcmWorker.Person;
_hcmPersonEducation.EducationDiscipline = HcmEducationDiscipline::findByEducationDiscipline(educationx).recid;
_hcmPersonEducation.insert();
_hcmWorkerBankAccount.Worker = newHcmWorker.RecId;
_hcmWorkerBankAccount.AccountId = '001';
_hcmWorkerBankAccount.AccountNum = bankaccx;
_hcmWorkerBankAccount.Name = namefirtsx+' '+namemidx+' '+namelastx;
_hcmWorkerBankAccount.insert();
select * from _hcmPositionDetail where _hcmPositionDetail.Description == positionx;
if(!_hcmPositionDetail)
{ error(strFmt('Position name not found ! %1',positionx)); }
select * from _hcmPositionWorkerAssignment where _hcmPositionWorkerAssignment.Worker == newHcmWorker.RecId;
if(!_hcmPositionWorkerAssignment)
{
HcmPositionTransition::newCreateHcmPositionWorkerAssignment(_hcmPositionDetail.Position,newHcmWorker.RecId,
employmentStartDateTime,employmentEndDateTime);
}
else
{
delete_from _hcmPositionWorkerAssignment2 where _hcmPositionWorkerAssignment2.Worker == newHcmWorker.RecId;
HcmPositionTransition::newCreateHcmPositionWorkerAssignment(_hcmPositionDetail.Position,newHcmWorker.RecId,
employmentStartDateTime,employmentEndDateTime);
}
If(!HcmEmploymentEmployee::findByEmployment(newEmploymentRecId))
{
_hcmEmploymentEmployee.initValue();
_hcmEmploymentEmployee.Employment = newEmploymentRecId;
_hcmEmploymentEmployee.ValidFrom = employmentStartDateTime;
_hcmEmploymentEmployee.ValidTo = employmentEndDateTime;
_hcmEmploymentEmployee.IncomeTaxCode = HcmIncomeTaxCode::findByIncomeTaxCode(npx).RecId;
_hcmEmploymentEmployee.insert();
}
_hcmPersonLaborUnion.initValue();
_hcmPersonLaborUnion.Person = newHcmWorker.Person;
_hcmPersonLaborUnion.LaborUnion = HcmUnions::findByUnion('DEMOCO').RecId;
_hcmPersonLaborUnion.StartDate = datehiringx;
_hcmPersonLaborUnion.insert();
j++;
/*** END ***/
} // If NOT EXIST
else
{
if(updatedatax == 'UPDATE')
{
// If EXIST
newHcmWorker = HcmWorker::findByPersonnelNumber(personnumx);
delete_from _hcmEmployment2 where _hcmEmployment2.Worker == newHcmWorker.RecId;
newEmploymentRecId = HcmWorkerTransition::newCreateHcmEmployment(newHcmWorker.RecId, companyInfo.RecId,
hcmEmploymentType, employmentStartDateTime, employmentEndDateTime);
_hcmPersonPrivateDetails0 = HcmPersonPrivateDetails::findByPerson(newHcmWorker.Person);
if(!_hcmPersonPrivateDetails0)
{
//info('4._hcmPersonPrivateDetails0 - no exist');
_hcmPersonPrivateDetails.Person = newHcmWorker.Person;
_hcmPersonPrivateDetails.BirthDate = datebirthx;
_hcmPersonPrivateDetails.Education = educationx+' / '+levelx;
_hcmPersonPrivateDetails.Gender = hcmgenderEnum;
_hcmPersonPrivateDetails.insert();
}
else
{
//info('4._hcmPersonPrivateDetails0 - exist');
select forupdate _hcmPersonPrivateDetails0;
ttsBegin;
_hcmPersonPrivateDetails0.BirthDate = datebirthx;
_hcmPersonPrivateDetails0.Gender = hcmgenderEnum;
_hcmPersonPrivateDetails0.update();
ttsCommit;
}
select * from _dirPartyLocation where _dirPartyLocation.Party == newHcmWorker.Person;
select forUpdate _logisticsPostalAddress
where _logisticsPostalAddress.Location == _dirPartyLocation.Location;
if(_logisticsPostalAddress)
{
logisticsPostalAddress_Default.initValue();
ttsBegin;
_logisticsPostalAddress.Street = addressx;
_logisticsPostalAddress.City = cityx;
_logisticsPostalAddress.CityRecId = LogisticsAddresssCity::findCity(cityx,logisticsPostalAddress_Default.CountryRegionId).RecId;
_logisticsPostalAddress.Address = addressx+' '+cityx;
_logisticsPostalAddress.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);
_logisticsPostalAddress.update();
ttsCommit;
}
select forUpdate _hcmPersonEducation where _hcmPersonEducation.Person == newHcmWorker.Person;
if(_hcmPersonEducation)
{
ttsBegin;
_hcmPersonEducation.EducationDiscipline = HcmEducationDiscipline::findByEducationDiscipline(educationx).recid;
_hcmPersonEducation.update();
ttsCommit;
}
select forUpdate _hcmWorkerBankAccount where _hcmWorkerBankAccount.Worker == newHcmWorker.RecId;
if(_hcmWorkerBankAccount)
{
ttsBegin;
_hcmWorkerBankAccount.AccountId = '001';
_hcmWorkerBankAccount.AccountNum = bankaccx;
_hcmWorkerBankAccount.Name = namefirtsx+' '+namemidx+' '+namelastx;
_hcmWorkerBankAccount.update();
ttsCommit;
}
select * from _hcmPositionDetail where _hcmPositionDetail.Description == positionx;
select * from _hcmPositionWorkerAssignment where _hcmPositionWorkerAssignment.Worker == newHcmWorker.RecId;
if(!_hcmPositionWorkerAssignment)
{
HcmPositionTransition::newCreateHcmPositionWorkerAssignment(_hcmPositionDetail.Position,newHcmWorker.RecId,
employmentStartDateTime,employmentEndDateTime);
}
else
{
delete_from _hcmPositionWorkerAssignment2 where _hcmPositionWorkerAssignment2.Worker == newHcmWorker.RecId;
HcmPositionTransition::newCreateHcmPositionWorkerAssignment(_hcmPositionDetail.Position,newHcmWorker.RecId,
employmentStartDateTime,employmentEndDateTime);
}
If(!HcmEmploymentEmployee::findByEmployment(newEmploymentRecId))
{
_hcmEmploymentEmployee.initValue();
_hcmEmploymentEmployee.Employment = newEmploymentRecId;
_hcmEmploymentEmployee.ValidFrom = employmentStartDateTime;
_hcmEmploymentEmployee.ValidTo = employmentEndDateTime;
_hcmEmploymentEmployee.IncomeTaxCode = HcmIncomeTaxCode::findByIncomeTaxCode(npx).RecId;
_hcmEmploymentEmployee.insert();
}
else
{ select forUpdate _hcmEmploymentEmployee where _hcmEmploymentEmployee.Employment == newEmploymentRecId;
ttsBegin;
_hcmEmploymentEmployee.Employment = newEmploymentRecId;
_hcmEmploymentEmployee.ValidFrom = employmentStartDateTime;
_hcmEmploymentEmployee.ValidTo = employmentEndDateTime;
_hcmEmploymentEmployee.IncomeTaxCode = HcmIncomeTaxCode::findByIncomeTaxCode(npx).RecId;
_hcmEmploymentEmployee.update();
ttsCommit;
}
k++;
} //if(updatedatax == 'UPDATE')
} // If EXIST
} // #4 if (conlen(con)
}// #3 while((file.status()
}// #2 if(dialog.run())
info(strfmt('Proces insert %1, update %2',j,k));
}// #1 try
catch
{
error (strFmt('Process Cancelled'));
}
}
No comments:
Post a Comment