Этот коммит содержится в:
2023-03-11 17:30:20 +00:00
Коммит b6c4e025bc
5124 изменённых файлов: 1153349 добавлений и 0 удалений
+278
Просмотреть файл
@@ -0,0 +1,278 @@
var Bizgaze;
(function (Bizgaze) {
let Apps;
(function (Apps) {
let Hrms;
(function (Hrms) {
let Payroll;
(function (Payroll) {
let Controls;
(function (Controls) {
let PayRun;
(function (PayRun) {
class TerminateEmployee extends Unibase.Platform.Core.BaseComponent {
constructor() {
super(...arguments);
this.strtxt = "0";
this.strDeductionstxt = "0";
this.t_VisibleContainerId = "";
this.delete_Array = [];
}
init(formpropertyid, prop, callback) {
var container = "control-container-" + formpropertyid;
var instance = this;
instance.fileCacheHelper.loadJsFiles(['platform/core/helpers/numberhelper/numberhelper.js'], function () {
let listCount = +$('#addNewEarningBtn').attr('data-count');
instance.calculatenetpay();
});
}
loadControl(containerid, prop) {
var instance = this;
instance.transactionId = prop.FormPropertyId;
instance.t_VisibleContainerId = Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds[Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds.length - 1];
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().delete_Array = [];
var html = `<div class="ul_terminateemployeedetails">
<div class="terminateemployeeearningdetails">
<div class='row text-dark font-weight-600'>
<div class='col-md-6'>Additional Earnings</div>
<div class='col-md-6'>AMOUNT</div>
</div>
<ul id="earningTypesList"></ul>
<ul id="transactionList"></ul>
<a href="javascript:;" id="addNewEarningBtn" class="btn btn-primary btn-sm mt-10" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().addearnings();" data-count="0"> + Add Earning</a>
<input type="hidden" id="hdn_termenateemployeeearningcontrol" class="value-control"
value="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().employeeearningobject();"/></div>`;
html += ` <div class="terminateemployeedeductiondetails">
<div class='row text-dark font-weight-600'>
<div class='col-md-6'>Deductions</div>
<div class='col-md-6'>AMOUNT</div>
</div>
<ul id="DeductionList"></ul>
<ul id="DeductiontransactionList"></ul>
<a href="javascript:;" id="addNewDeductionBtn" class="btn btn-primary btn-sm mt-10" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().addDeduction();" data-count="0">+ Add Deduction</a><input type="hidden" id="hdn_terminateemployeedeductioncontrol" class="value-control"
value="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().employeedeductionobject();"/></div></div></div>`;
$("#" + containerid).html(html);
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().getPayRunEmployeedetails();
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().getpayrunemployeesalarycomponents();
}
loadControlSettings(controlsettingjson, formpropertyid) { }
loadPropertySettings(propertysettings, formpropertyid, DocPropertyName) { }
bindEditFormDetails(formpropertyid, propval, DocPropertyName) { }
calculatenetpay() {
$(".txt_lopdays").keyup(function () {
var lopdays = Number($(".txt_lopdays").val());
var payabledays = Number($(".txt_payabledays").val());
var actualdays = Number($(".txt_actualpayabledays").val());
var actual_days = actualdays - lopdays;
$(".txt_actualpayabledays").val(actual_days);
var netpay = Number($(".number_netpay").val());
var totalnetpay = Math.round(netpay / payabledays);
$(".number_netpay").val(Math.round(totalnetpay * actual_days));
});
}
getPayRunEmployeedetails() {
var instance = this;
var payrunemployeeid = +$(".active-employee-item").find("#hf_widgetitem_Id").val();
Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFile("apps/hrms/payroll/managers/payrollmanager.js", function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().getemployee(payrunemployeeid).then(function (responce) {
var employeeid = responce.result.EmployeeId;
$("._employee").val(employeeid);
var empname = responce.result.FirstName;
var employee = new Option(empname, employeeid);
$(".txtAutoComplete_employeeid").append(employee);
$(".txtAutoComplete_employeeid").prop("disabled", true);
$(".number_netpay").val(responce.result.NetPay);
$(".txt_payabledays").val(responce.result.PayableDays);
$(".txt_actualpayabledays").val(responce.result.ActualPayabledays);
$(".txt_lopdays").val(responce.result.LOPDays);
});
});
}
getpayrunemployeesalarycomponents() {
var instance = this;
let listCount = +$('#addNewEarningBtn').attr('data-count');
var payrunemployeeid = +$(".active-employee-item").find("#hf_widgetitem_Id").val();
Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFile("apps/hrms/payroll/managers/payrollmanager.js", function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().getemployeeterminatesalarycomponents(payrunemployeeid).then(function (response) {
for (var i = 0; i < response.result.length; i++) {
var data = response.result[i];
var earningTypeId = data.SalaryComponentId;
var html = `<li class="row my-10 liupdatepayrunearningdetails li_terminateemployeeearningdetails" id="earningTypeItem_${earningTypeId}">
<input type="hidden" class='hf_earningtypeid' value='${earningTypeId}'/>
<input type="hidden" class='hf_isactive' value='true'/>
<input type="hidden" id="hfAutoCompleteId_SalaryComponents_${earningTypeId}" data-earningid=${earningTypeId} class="hf_earningtypeid" value="${earningTypeId}"/>
<div class='col-md-5'><input type="text" class="form-control txt_earningname_${data.SalaryComponentId}" value='${response.result[i].PaySlipName}' /></div>
<div class='col-md-5'><input type="text" id="txt_earningamount_${data.SalaryComponentId}" class="form-control txt_amount" value='${response.result[i].Amount}'></div>
<div class='col-md-2 text-right'><a href="javascript:;" class="btn btn-sm btn-outline-danger btn-icon btn-with-icon" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().${data.ComponentTypeId == 1 ? "deleteEarningType" : "deleteDeductionType"}(${data.SalaryComponentId})"><span class="btn-icon-wrap"><i class="las la-trash font-22"></i></span></a><input type="hidden" id="hdn_termenateemployeeearningcontrol" class="value-control"
value="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().employeeearningobject();"/></div>
</li>`;
var componenttypeid = data.ComponentTypeId;
instance.strtxt = instance.strtxt.split('|');
instance.strtxt.push(data.SalaryComponentId);
instance.strtxt = instance.strtxt.join('|');
$('#addNewDeductionBtn').attr('data-count', listCount + 1);
if (componenttypeid == 1) {
$("#transactionList").append(html);
}
else {
$("#DeductionList").append(html);
}
}
});
});
}
addearnings() {
const instance = this;
let listCount = +$('#addNewEarningBtn').attr('data-count');
var html = `<li class='row my-10 literminateemployeeearningdetails li_terminateemployeeearningdetails' id="earningTypeItem_${listCount}" >
<div class='col-md-5'>
<select class="form-control hf_salarycomponentid" class="txtAutoComplete_Salary" id ="txtAutoComplete_Salary_${listCount}" data-placeholder="Select"></select><input type="hidden" id="hfAutoCompleteId_SalaryComponents_${listCount}" class="hf_earningtypeid" /><input type="hidden" class='hf_isactive' value='true'/></div>
<div class='col-md-5'><input type="text" id="txt_earningamount_${listCount}" class="form-control txt_amount" onpaste = "return Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().isNumberKey(event)" oninput = "return Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().isNumberKey(event)"/></div>
<div class='col-md-2 text-right'><a href="javascript:;" class="btn btn-sm btn-outline-danger btn-icon btn-with-icon" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().deleteEarningType(${listCount})"><span class="btn-icon-wrap"><i class="las la-trash font-22"></i></span></a></div>
</li>`;
$("#transactionList").append(html);
instance.autocompleteEarningType(listCount);
$('#addNewEarningBtn').attr('data-count', listCount + 1);
}
autocompleteEarningType(id) {
const instance = this;
var url = _appsettings.server_url() + '/apis/v4/bizgaze/hrms/payroll/getearningforterminationautocomplete/componenttypeid/' + 1 + '/salarycomponentids/' + instance.strtxt + '/earningtypeid/' + 0;
AutoCompleteHelper.getHelper().Create(`#txtAutoComplete_Salary_${id}`, $(`#hfAutoCompleteId_SalaryComponents_${id}`), url, function () {
$(`#txtAutoComplete_Salary_${id}`).off('select2:select').on('select2:select', function () {
const earningTypeId = $(this).val();
if (!$.isArray(instance.strtxt)) {
instance.strtxt = instance.strtxt.split('|');
instance.strtxt.push(earningTypeId);
instance.strtxt = instance.strtxt.join('|');
}
});
$(`#txtAutoComplete_Salary_${id}`).off('select2:clear').on('select2:clear', function () {
instance.updateEarningsType(id);
});
});
}
deleteEarningType(SalaryComponentId) {
const instance = this;
let earamount = Number($('#txt_earningamount_' + SalaryComponentId).val());
if (earamount == 0) {
$(`#earningTypeItem_${SalaryComponentId}`).remove();
}
var item = {
amount: earamount,
SalaryComponentId: SalaryComponentId
};
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().delete_Array.push(item);
instance.updateEarningsType(SalaryComponentId);
$(`#earningTypeItem_${SalaryComponentId}`).remove();
}
updateEarningsType(id) {
const instance = this;
const earningTypeId = $(`#hfAutoCompleteId_SalaryComponents_${id}`).val();
instance.strtxt = instance.strtxt.split('|');
instance.strtxt = instance.strtxt.filter(v => v != earningTypeId).join('|');
}
employeeearningobject() {
var earningobject = new Array();
var installedAppId = Unibase.Themes.Providers.DetailHelper.installedAppId;
var payRunId = Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_payrunid").Value;
$(".ul_terminateemployeedetails").find(".li_terminateemployeeearningdetails").each(function () {
var earningType = Number($(this).find('.hf_earningtypeid').val());
earningobject.push({
EarningName: $(this).find(".txtAutoComplete_Salary").text(),
Amount: Number($(this).find(".txt_amount").val()),
EarningType: earningType != null ? earningType : 0,
PayRunId: payRunId,
PayRunEmployeeId: +$(".active-employee-item").find("#hf_widgetitem_Id").val(),
IsActive: $(this).find('.hf_isactive').val(),
SalaryComponentId: Number($(this).find('.hf_earningtypeid').val()),
deletedata: Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().delete_Array,
});
});
return earningobject;
}
isNumberKey(evt) {
let instance = this;
if (evt.type == "paste") {
let pastedData = evt.clipboardData.getData('text');
let regExp = /[a-zA-Z]/g;
if (regExp.test(pastedData)) {
evt.preventDefault();
return false;
}
}
else if (evt.type == "input") {
const inputVal = $("#" + instance.t_VisibleContainerId).find(evt.currentTarget).val();
$("#" + instance.t_VisibleContainerId).find(evt.currentTarget).val(inputVal.replace(/\D/g, ''));
}
else {
if (evt.which != 8 && evt.which != 0 && (evt.which < 48 || evt.which > 57)) {
return false;
}
}
return true;
}
addDeduction() {
const instance = this;
let listCount = +$('#addNewDeductionBtn').attr('data-count');
var html = `<li class='row my-10 literminateemployeedeductiondetails li_terminateemployeeearningdetails' id="earningTypeItem_${listCount}">
<input type="hidden" class='hf_isactive' value='true'/>
<div class='col-md-5'>
<select class="form-control hf_salarycomponentid" class="txtAutoComplete_deductionSalary" id ="txtAutoComplete_deductionSalary_${listCount}" data-placeholder="Select"></select><input type="hidden" id="hfAutoCompleteId_deductionSalaryComponents_${listCount}" class="hf_earningtypeid" /></div>
<div class='col-md-5'><input type="text" id="txt_earningamount_${listCount}" class="form-control txt_deductionamount_${listCount} txt_amount" onpaste = "return Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().isNumberKey(event)" oninput = "return Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().isNumberKey(event)"/></div>
<div class='col-md-2 text-right'><a href="javascript:;" class="btn btn-sm btn-outline-danger btn-icon btn-with-icon" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().deleteDeductionType(${listCount})"><span class="btn-icon-wrap"><i class="las la-trash font-22"></i></span></a></div>
</li>`;
$("#DeductiontransactionList").append(html);
instance.autocompleteDeductionType(listCount);
$('#addNewDeductionBtn').attr('data-count', listCount + 1);
}
autocompleteDeductionType(id) {
const instance = this;
var url = _appsettings.server_url() + '/apis/v4/bizgaze/hrms/payroll/getearningforterminationautocomplete/componenttypeid/' + 3 + '/salarycomponentids/' + instance.strDeductionstxt + '/earningtypeid/' + 0;
AutoCompleteHelper.getHelper().Create(`#txtAutoComplete_deductionSalary_${id}`, $(`#hfAutoCompleteId_deductionSalaryComponents_${id}`), url, function () {
$(`#txtAutoComplete_deductionSalary_${id}`).off('select2:select').on('select2:select', function () {
const deductionTypeId = $(this).val();
if (!$.isArray(instance.strDeductionstxt)) {
instance.strDeductionstxt = instance.strDeductionstxt.split('|');
instance.strDeductionstxt.push(deductionTypeId);
instance.strDeductionstxt = instance.strDeductionstxt.join('|');
}
});
$(`#txtAutoComplete_deductionSalary_${id}`).off('select2:clear').on('select2:clear', function () {
instance.updateDeductionsType(id);
});
});
}
deleteDeductionType(SalaryComponentId) {
const instance = this;
let earamount = Number($('#txt_earningamount_' + SalaryComponentId).val());
if (earamount == 0) {
$(`#earningTypeItem_${SalaryComponentId}`).remove();
}
var item = {
amount: earamount,
SalaryComponentId: SalaryComponentId
};
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.TerminateEmployee.Instance().delete_Array.push(item);
instance.updateDeductionsType(SalaryComponentId);
$(`#earningTypeItem_${SalaryComponentId}`).remove();
}
updateDeductionsType(id) {
const instance = this;
const deductionTypeId = $(`#hfAutoCompleteId_deductionSalaryComponents_${id}`).val();
instance.strDeductionstxt = instance.strDeductionstxt.split('|');
instance.strDeductionstxt = instance.strDeductionstxt.filter(v => v != deductionTypeId).join('|');
}
static Instance() {
if (this.instance === undefined) {
this.instance = new TerminateEmployee();
}
return this.instance;
}
}
PayRun.TerminateEmployee = TerminateEmployee;
})(PayRun = Controls.PayRun || (Controls.PayRun = {}));
})(Controls = Payroll.Controls || (Payroll.Controls = {}));
})(Payroll = Hrms.Payroll || (Hrms.Payroll = {}));
})(Hrms = Apps.Hrms || (Apps.Hrms = {}));
})(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
})(Bizgaze || (Bizgaze = {}));
+33
Просмотреть файл
@@ -0,0 +1,33 @@
var Bizgaze;
(function (Bizgaze) {
let Apps;
(function (Apps) {
let Hrms;
(function (Hrms) {
let Payroll;
(function (Payroll) {
let Controls;
(function (Controls) {
let PayRun;
(function (PayRun) {
class TerminateEmployee_Settings extends Unibase.Platform.Core.BaseComponent {
loadSettingHtml(container) { }
bindControlData(controldatajson) { }
SaveControlData(controldatajson) { }
loadControlPropertiesHtml(controlpropList, container) { }
bindPropertySettings(prop) { }
savePropertySettings(prop) { }
static Instance() {
if (this.instance === undefined) {
this.instance = new TerminateEmployee_Settings();
}
return this.instance;
}
}
PayRun.TerminateEmployee_Settings = TerminateEmployee_Settings;
})(PayRun = Controls.PayRun || (Controls.PayRun = {}));
})(Controls = Payroll.Controls || (Payroll.Controls = {}));
})(Payroll = Hrms.Payroll || (Hrms.Payroll = {}));
})(Hrms = Apps.Hrms || (Apps.Hrms = {}));
})(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
})(Bizgaze || (Bizgaze = {}));
+536
Просмотреть файл
@@ -0,0 +1,536 @@
var Bizgaze;
(function (Bizgaze) {
let Apps;
(function (Apps) {
let Hrms;
(function (Hrms) {
let Payroll;
(function (Payroll) {
let Controls;
(function (Controls) {
let PayRun;
(function (PayRun) {
class UpdatePayRunDetails extends Unibase.Platform.Core.BaseComponent {
constructor() {
super(...arguments);
this.strtxt = "";
this.employeeid = "";
}
init(formpropertyid, prop, callback) { }
loadControl(containerid, prop) {
var instance = this;
instance.transactionId = prop.FormPropertyId;
instance.fileCacheHelper.loadJsFiles(['apps/hrms/enums/earningtypes.js', 'apps/hrms/enums/componenttypes.js', 'apps/hrms/enums//statutorytypes.js'], null);
var html = `<div class="ul_updatepayrundetails">
<div class="updatepayrunearningdetails">
<div class='row text-dark font-weight-600'>
<div class='col-md-6'>(+) EARNINGS</div>
<div class='col-md-6'>AMOUNT</div>
</div>
<ul id="earningTypesList"></ul>
<ul id="transactionList"></ul>
<a href="javascript:;" id="addNewEarningBtn" class="btn btn-primary btn-sm mt-10" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().addTransaction();" data-count="0"> + Add New</a>
<input type="hidden" id="hdn_updatepayrundetailscontrol" class="value-control" value="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().UpdatePayRunEarningsObject();"/>
</div>`;
html += `<div class="updatepayrundeductiondetails">
<div class='row text-dark font-weight-600'>
<div class='col-md-6'>(-) DEDUCTIONS</div>
<div class='col-md-6'>AMOUNT</div>
</div>
<div class='row font-weight-600'>
<div class='col-md-6'>Pre-Tax Deductions</div>
<div class='col-md-6'></div>
</div>
<ul id="PreTaxDeductionList"></ul>
<div class='row font-weight-600'>
<div class='col-md-6'>Taxes</div>
<div class='col-md-6'></div>
</div>
<ul id="DeductionTaxesList"></ul>
<div class='row font-weight-600'>
<div class='col-md-6'>Post-Tax Deductions</div>
<div class='col-md-6'></div>
</div>
<ul id="DeductionList"></ul>
<ul id="DeductiontransactionList"></ul>
<a href="javascript:;" id="addNewDeductionBtn" class="btn btn-primary btn-sm mt-10" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().addDeduction();" data-count="0"> + Add New</a>
<input type="hidden" id="hdn_updatepayrundetailscontrol" class="value-control" value="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().UpdatePayRunDeductionsObject();"/>
</div>`;
$("#" + containerid).html(html);
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().getPayRunEmployee();
}
loadControlSettings(controlsettingjson, formpropertyid) { }
loadPropertySettings(propertysettings, formpropertyid, DocPropertyName) { }
bindEditFormDetails(formpropertyid, propval, DocPropertyName) { }
getPayRunEmployee() {
var instance = this;
var payrunemployeeid = +$(".active-employee-item").find("#hf_widgetitem_Id").val();
Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFile("apps/hrms/payroll/managers/payrollmanager.js", function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().getemployee(payrunemployeeid).then(function (responce) {
instance.employeeid = responce.result.EmployeeId;
$("._employee").val(instance.employeeid);
var empname = responce.result.FirstName;
var employee = new Option(empname, instance.employeeid);
$(".txtAutoComplete_employeeid").append(employee);
$(".number_netpay").val(responce.result.NetPay);
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().GetPayRunEarningDetails(payrunemployeeid);
});
});
}
GetPayRunEarningDetails(payrunemployeeid) {
var instance = this;
instance.strtxt = '';
instance.fileCacheHelper.loadJsFile("apps/hrms/payroll/managers/payrollmanager.js", function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().getpayrunemployeesalarycomponents(payrunemployeeid).then(function (response) {
Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().bindHtml(response.result);
});
});
}
bindHtml(data) {
$("#earningTypesList").empty();
$("#PreTaxDeductionList").empty();
$("#DeductionTaxesList").empty();
$("#DeductionList").empty();
var instance = this;
var html = '';
for (var i = 0; i < data.length; i++) {
var componenttypeid = data[i].ComponentTypeId;
var salaryComponentId = data[i].SalaryComponentId;
html = Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().getHtml(data[i]);
if (componenttypeid == Bizgaze.Apps.Hrms.Enums.ComponentTypes.Earnings || componenttypeid == Bizgaze.Apps.Hrms.Enums.ComponentTypes.Reimbursements) {
$("#earningTypesList").after(html);
}
if (componenttypeid == Bizgaze.Apps.Hrms.Enums.ComponentTypes.PreTaxDeductions && data[i].StatutoryTypeId != Bizgaze.Apps.Hrms.Enums.StatutoryTypes.ProfessionalTax) {
$("#PreTaxDeductionList").after(html);
}
if (componenttypeid == Bizgaze.Apps.Hrms.Enums.ComponentTypes.Taxes || data[i].StatutoryTypeId == Bizgaze.Apps.Hrms.Enums.StatutoryTypes.ProfessionalTax) {
$("#DeductionTaxesList").after(html);
}
if (componenttypeid == Bizgaze.Apps.Hrms.Enums.ComponentTypes.PostTaxDeductions) {
$("#DeductionList").after(html);
}
instance.strtxt += "|" + salaryComponentId;
}
instance.strtxt = instance.strtxt.slice(1);
}
getHtml(data) {
var html = '';
html = `<li class='row my-10 listitems_component_${data.SalaryComponentId} liupdatepayrunearningdetails li_updatepayrundetails'>
<input type="hidden" class='hf_earningtypeid' value='${data.ComponentTypeId}'/>
<input type="hidden" class='hf_salarycomponentid' value='${data.SalaryComponentId}'/>
<input type="hidden" class='hf_isactive' value='${data.IsAdded}'/>`;
if (!data.IsAdded)
html += `<div class='col-md-5'><input type="text" class="form-control txt_earningname" value='${data.PaySlipName}' disabled /></div>
<div class='col-md-5'><input type="text" class="form-control txt_amount" disabled value='${data.Amount}'></div>
<div class='col-md-2'></div>
</li>`;
else
html += `<div class='col-md-5'><input type="text" class="form-control txt_earningname" value='${data.PaySlipName}' disabled /></div>
<div class='col-md-5'><input type="text" class="form-control txt_amount" value='${data.Amount}'></div>
<div class='col-md-2'><a href="javascript:;" class="btn btn-sm btn-outline-danger btn-icon btn-with-icon" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().deleteEarningType(${data.SalaryComponentId})"><span class="btn-icon-wrap"><i class="las la-trash font-22"></i></span></a></div>
</li>`;
return html;
}
taxComment() {
var oldTaxAmount = Number($(".hf_pre_taxamount").val());
var newTaxAmount = Number($(".txt_new_taxamount").val());
if (oldTaxAmount != newTaxAmount) {
$(".div_taxreason").removeClass("hidden");
}
else {
$(".div_taxreason").addClass("hidden");
$(".txt_taxreason").val('');
}
}
deleteEarningType(id) {
const instance = this;
instance.updateEarningsTypeArr(id);
$(`.listitems_component_${id}`).remove();
$(`#earningTypeItem_${id}`).remove();
}
updateEarningsTypeArr(id) {
const instance = this;
const expenseTypeId = $(`#hfAutoCompleteId_SalaryComponents_${id}`).val();
instance.strtxt = instance.strtxt.split('|');
instance.strtxt = instance.strtxt.filter(v => v != expenseTypeId).join('|');
}
UpdatePayRunEarningsObject() {
var data = new Array();
var installedAppId = Unibase.Themes.Providers.DetailHelper.installedAppId;
var payRunId = Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_payrunid").Value;
$(".ul_updatepayrundetails").find(".li_updatepayrundetails").each(function () {
var earningType = Number($(this).find('.hf_earningtypeid').val());
data.push({
EarningName: $(this).find('.txt_earningname').val(),
Amount: Number($(this).find('.txt_amount').val()),
EarningType: earningType != null ? earningType : 0,
PayRunId: payRunId,
PayRunEmployeeId: +$(".active-employee-item").find("#hf_widgetitem_Id").val(),
IsAdded: $(this).find('.hf_isactive').val(),
SalaryComponentId: Number($(this).find('.hf_salarycomponentid').val()),
});
});
return data;
}
addTransaction() {
const instance = this;
let listCount = +$('#addNewEarningBtn').attr('data-count');
var html = `<li class='row my-10 liupdatepayrunearningdetails li_updatepayrundetails ' id="earningTypeItem_${listCount}" >
<div class='col-md-5'>
<select class="form-control hf_salarycomponentid" id ="txtAutoComplete_Salary_${listCount}" data-placeholder="Select"></select><input type="hidden" id="hfAutoCompleteId_SalaryComponents_${listCount}" class="hf_earningtypeid" /><input type="hidden" class='hf_isactive' value='true'/></div>
<div class='col-md-5'><input type="text" class="form-control txt_amount"/></div>
<div class='col-md-2 text-right'><a href="javascript:;" class="btn btn-sm btn-outline-danger btn-icon btn-with-icon" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().deleteEarningType(${listCount})"><span class="btn-icon-wrap"><i class="las la-trash font-22"></i></span></a></div>
</li>`;
$("#transactionList").append(html);
instance.autocompleteComponent(listCount, Bizgaze.Apps.Hrms.Enums.ComponentTypes.Earnings);
$('#addNewEarningBtn').attr('data-count', listCount + 1);
}
addDeduction() {
const instance = this;
let listCount = +$('#addNewDeductionBtn').attr('data-count');
var html = `<li class='row my-10 liupdatepayrundeductiondetails li_updatepayrundetails' id="deductionTypeItem_${listCount}" >
<input type="hidden" class='hf_isactive' value='true'/>
<div class='col-md-5'>
<select class="form-control hf_salarycomponentid" id ="txtAutoComplete_deductionSalary_${listCount}" data-placeholder="Select"></select><input type="hidden" class='hf_earningtypeid' value='0'/><input type="hidden" id="hfAutoCompleteId_deductionSalaryComponents_${listCount}" class="hf_deductiontypeid" /></div>
<div class='col-md-5'><input type="text" class="form-control txt_amount"/></div>
<div class='col-md-2 text-right'><a href="javascript:;" class="btn btn-sm btn-outline-danger btn-icon btn-with-icon" onclick="Bizgaze.Apps.Hrms.Payroll.Controls.PayRun.UpdatePayRunDetails.Instance().deleteDeductionType(${listCount})"><span class="btn-icon-wrap"><i class="las la-trash font-22"></i></span></a></div>
</li>`;
$("#DeductiontransactionList").append(html);
instance.autocompleteComponent(listCount, Bizgaze.Apps.Hrms.Enums.ComponentTypes.PostTaxDeductions);
$('#addNewDeductionBtn').attr('data-count', listCount + 1);
}
autocompleteComponent(rowindexid, componenttypeid) {
const instance = this;
let componentname = $(`#hfAutoCompleteId_SalaryComponents_${rowindexid}`);
let componentname1 = `#txtAutoComplete_Salary_${rowindexid}`;
if (componenttypeid == Bizgaze.Apps.Hrms.Enums.ComponentTypes.PostTaxDeductions) {
componentname = $(`#hfAutoCompleteId_deductionSalaryComponents_${rowindexid}`);
componentname1 = `#txtAutoComplete_deductionSalary_${rowindexid}`;
}
var url = _appsettings.server_url() + '/apis/v4/bizgaze/hrms/payroll/getsalarycomponentautocomplete/componenttypeid/' + componenttypeid + '/salarycomponentids/' + instance.strtxt + '/earningtypeid/' + 0;
AutoCompleteHelper.getHelper().Create(componentname1, componentname, url, function (response) {
$(`#txtAutoComplete_Salary_${rowindexid}`).off('select2:select').on('select2:select', function () {
const expenseTypeId = $(this).val();
if (!$.isArray(instance.strtxt)) {
instance.strtxt = instance.strtxt.split('|');
instance.strtxt.push(expenseTypeId);
instance.strtxt = instance.strtxt.join('|');
}
});
$(componentname1).off('select2:clear').on('select2:clear', function () {
instance.updateEarningsTypeArr(rowindexid);
});
});
}
deleteDeductionType(id) {
const instance = this;
instance.updateDeductionsTypeArr(id);
$(`#deductionTypeItem_${id}`).remove();
$(`.listitems_component_${id}`).remove();
}
updateDeductionsTypeArr(id) {
const instance = this;
const expenseTypeId = $(`#hfAutoCompleteId_deductionSalaryComponents_${id}`).val();
instance.strtxt = instance.strtxt.split('|');
instance.strtxt = instance.strtxt.filter(v => v != expenseTypeId).join('|');
}
printPayslip(payrunEmployeeId) {
var instance = this;
var payrunEmployeeIda = $("#hf_widgetitem_Id").val();
Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(["apps/hrms/payroll/managers/payrollmanager.js", "platform/core/helpers/printhelper/printhelper.js"], function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().payslipPrint(payrunEmployeeId).then(function (response) {
Unibase.Platform.Helpers.PrintHelper.Instance().printPopup(response.result.PrintHTML);
});
});
}
printPopup(data) {
var mywindow = window.open('', 'my Print', 'height=400,width=850');
var content = '<html><head><title>Print</title><link rel="stylesheet" href="lib/bizgaze/print.css" /><link rel="stylesheet" href="lib/bootstrap/bootstrap-theme.min.css" /></head><body>';
content += data;
content += "<script>print();</script>";
content += '</body></html>';
mywindow.document.write(content);
return true;
}
getEmployeeCount() {
var installedAppId = Unibase.Themes.Providers.DetailHelper.installedAppId;
var payrunId = Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_payrunid").Value;
Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(["apps/hrms/payroll/managers/payrollmanager.js", "platform/core/helpers/printhelper/printhelper.js"], function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().getEmployeeCount(payrunId).then(function (response) {
if (response.result.length != 0) {
var employeeCount = response.result[0];
$(".number_empcount").val(employeeCount);
}
else {
$(".number_empcount").val(0);
}
});
});
}
ConfirmPayrun() {
var InstalledAppId = Unibase.Themes.Providers.DetailHelper.installedAppId;
let detailContainer = "#" + Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds[Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds.length - 1];
var stage = String(Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + InstalledAppId + "_shortcode").Value);
if ((stage == "APD") || (stage == "INP")) {
$(detailContainer).find('.DetailSetting_' + '' + InstalledAppId + '' + '_Confirm').parent('li').removeClass('hidden');
}
else {
$(detailContainer).find('.DetailSetting_' + '' + InstalledAppId + '' + '_Confirm').parent('li').addClass('hidden');
}
}
stageChange() {
var instance = this;
var installedAppId = Unibase.Themes.Providers.DetailHelper.installedAppId;
var versionGuid = Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_versionguid").Value;
var stageId = Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_stageid").Value;
let detailContainer = "#" + Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds[Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds.length - 1];
var stage = String(Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_shortcode").Value);
if (stage == "DFT") {
$(detailContainer).find('.DetailSetting_' + '' + installedAppId + '' + '_SubmitForApproval').parent('li').removeClass('hidden');
}
else {
$(detailContainer).find('.DetailSetting_' + '' + installedAppId + '' + '_SubmitForApproval').parent('li').addClass('hidden');
}
$(".DetailSetting_" + installedAppId + "_SubmitForApproval").click(function () {
instance.fileCacheHelper.loadJsFile('apps/hrms/payroll/managers/payrollmanager.js', function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().stageChange(installedAppId, versionGuid, stageId).then(function (response) {
MessageHelper.Instance().showSuccess(response.message, "div_message");
let obj = Unibase.Themes.Compact.Components.Details.Instance();
obj._recordId = Unibase.Themes.Compact.Components.Details.Instance()._recordId;
obj._installedAppId = Unibase.Themes.Compact.Components.Details.Instance()._installedAppId;
Unibase.Themes.Compact.Components.Details.Instance().loadPortlets(obj);
});
});
});
}
GetPayRunDetails(employeeid) {
var instance = this;
var installedAppId = Unibase.Themes.Providers.DetailHelper.installedAppId;
var toDate = Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_todate").Value;
var fromDate = Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key == "hf_" + installedAppId + "_fromdate").Value;
var Fdate = moment(fromDate, "DD/MM/YYYY").format("DD-MM-YYYY");
var Tdate = moment(toDate, "DD/MM/YYYY").format("DD-MM-YYYY");
instance.fileCacheHelper.loadJsFile('apps/hrms/payroll/managers/payrollmanager.js', function () {
Bizgaze.Apps.Hrms.Payroll.Managers.PayRollManager.Instance().getPayRunDetails(employeeid, Fdate, Tdate).then(function (response) {
});
});
}
esiNumberValidation(e, id) {
let inputVal = e.target.value;
let isLastElemet = e.originalEvent.data;
if (isLastElemet === null) {
return;
}
let lastElemG = inputVal[inputVal.length - 1];
let hasSpecialChar = true;
const charCodeSpec = inputVal.charCodeAt(inputVal.length - 1);
if ((charCodeSpec >= 33 && charCodeSpec <= 47) || (charCodeSpec >= 58 && charCodeSpec <= 64) || (charCodeSpec >= 91 && charCodeSpec <= 96) || (charCodeSpec >= 123 && charCodeSpec <= 126)) {
hasSpecialChar = false;
}
let isAlphaSlash = true;
const charCode = inputVal.charCodeAt(inputVal.length - 1);
if (!(charCode >= 65 && charCode <= 90 || charCode >= 97 && charCode <= 122 || charCode === 47)) {
isAlphaSlash = false;
}
if (!hasSpecialChar || lastElemG === " " || isAlphaSlash) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
if (inputVal.length > 21) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
let textLen = inputVal.length;
if (textLen === 3 || textLen == 6 || textLen == 13 || textLen == 17) {
const lasChar = inputVal.charCodeAt(inputVal.length - 1);
if (lasChar != '-') {
let lastTemp = inputVal[inputVal.length - 1];
inputVal = inputVal.slice(0, inputVal.length - 1) + "-" + lastTemp;
}
}
let temp = inputVal;
if (textLen == 2 || textLen == 5 || textLen == 12 || textLen == 16) {
temp += "-";
}
$(`#${id}`).val(temp);
}
epfNumberValidation(e, id) {
console.log(id);
let inputVal = e.target.value;
let isLastElemet = e.originalEvent.data;
if (isLastElemet === null) {
return;
}
let lastElemG = inputVal[inputVal.length - 1];
let hasSpecialChar = true;
const charCode = inputVal.charCodeAt(inputVal.length - 1);
if ((charCode >= 33 && charCode <= 47) || (charCode >= 58 && charCode <= 64) || (charCode >= 91 && charCode <= 96) || (charCode >= 123 && charCode <= 126)) {
hasSpecialChar = false;
}
if (!hasSpecialChar || lastElemG === " ") {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
if (inputVal.length > 27) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
let modText = "";
if (inputVal.length <= 6) {
let lastElem = inputVal[inputVal.length - 1];
let isNumberSlash = true;
const charCode = inputVal.charCodeAt(inputVal.length - 1);
if (!(charCode >= 48 && charCode <= 57 || charCode === 47)) {
isNumberSlash = false;
}
if (isNumberSlash) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
;
if (inputVal.length == 3 || inputVal.length == 7) {
if (inputVal[inputVal.length - 1] != "/") {
let lastTemp = inputVal[inputVal.length - 1];
inputVal = inputVal.slice(0, inputVal.length - 1) + "/" + lastTemp;
}
}
let temp = inputVal.toUpperCase();
if (inputVal.length == 2 || inputVal.length == 6) {
temp += "/";
}
$(`#${id}`).val(temp);
}
else {
if (inputVal.length === 7) {
if (inputVal[inputVal.length - 1] != "/") {
let lastTemp = inputVal[inputVal.length - 1];
inputVal = inputVal.slice(0, inputVal.length - 1) + "/" + lastTemp;
}
}
let lastElem = inputVal[inputVal.length - 1];
let isAlphaSlash = true;
const charCode = inputVal.charCodeAt(inputVal.length - 1);
if (!(charCode >= 65 && charCode <= 90 || charCode >= 97 && charCode <= 122 || charCode === 47)) {
isAlphaSlash = false;
}
if (isAlphaSlash) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
if (inputVal.length == 15 || inputVal.length == 19) {
if (inputVal[inputVal.length - 1] != "/") {
let lastTemp = inputVal[inputVal.length - 1];
inputVal = inputVal.slice(0, inputVal.length - 1) + "/" + lastTemp;
}
}
let temp = inputVal;
if (inputVal.length == 14 || inputVal.length == 18) {
temp += "/";
}
$(`#${id}`).val(temp);
}
}
payrunEpfNumberValidation(e, id) {
console.log(id);
let inputVal = e.target.value;
let isLastElemet = e.originalEvent.data;
if (isLastElemet === null) {
return;
}
let lastElemG = inputVal[inputVal.length - 1];
let hasSpecialChar = true;
const charCode = inputVal.charCodeAt(inputVal.length - 1);
if ((charCode >= 33 && charCode <= 47) || (charCode >= 58 && charCode <= 64) || (charCode >= 91 && charCode <= 96) || (charCode >= 123 && charCode <= 126)) {
hasSpecialChar = false;
}
if (!hasSpecialChar || lastElemG === " ") {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
if (inputVal.length > 18) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
let modText = "";
if (inputVal.length <= 6) {
let lastElem = inputVal[inputVal.length - 1];
let isNumberSlash = true;
const charCode = inputVal.charCodeAt(inputVal.length - 1);
if (!(charCode >= 48 && charCode <= 57 || charCode === 47)) {
isNumberSlash = false;
}
if (isNumberSlash) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
;
if (inputVal.length == 3 || inputVal.length == 7) {
if (inputVal[inputVal.length - 1] != "/") {
let lastTemp = inputVal[inputVal.length - 1];
inputVal = inputVal.slice(0, inputVal.length - 1) + "/" + lastTemp;
}
}
let temp = inputVal.toUpperCase();
if (inputVal.length == 2 || inputVal.length == 6) {
temp += "/";
}
$(`#${id}`).val(temp);
}
else {
if (inputVal.length === 7) {
if (inputVal[inputVal.length - 1] != "/") {
let lastTemp = inputVal[inputVal.length - 1];
inputVal = inputVal.slice(0, inputVal.length - 1) + "/" + lastTemp;
}
}
let lastElem = inputVal[inputVal.length - 1];
let isAlphaSlash = true;
const charCode = inputVal.charCodeAt(inputVal.length - 1);
if (!(charCode >= 65 && charCode <= 90 || charCode >= 97 && charCode <= 122 || charCode === 47)) {
isAlphaSlash = false;
}
if (isAlphaSlash) {
const slipt = inputVal.slice(0, inputVal.length - 1);
$(`#${id}`).val(slipt);
return;
}
if (inputVal.length == 15) {
if (inputVal[inputVal.length - 1] != "/") {
let lastTemp = inputVal[inputVal.length - 1];
inputVal = inputVal.slice(0, inputVal.length - 1) + "/" + lastTemp;
}
}
let temp = inputVal;
if (inputVal.length == 14) {
temp += "/";
}
$(`#${id}`).val(temp);
}
}
static Instance() {
if (this.instance === undefined) {
this.instance = new UpdatePayRunDetails();
}
return this.instance;
}
}
PayRun.UpdatePayRunDetails = UpdatePayRunDetails;
})(PayRun = Controls.PayRun || (Controls.PayRun = {}));
})(Controls = Payroll.Controls || (Payroll.Controls = {}));
})(Payroll = Hrms.Payroll || (Hrms.Payroll = {}));
})(Hrms = Apps.Hrms || (Apps.Hrms = {}));
})(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
})(Bizgaze || (Bizgaze = {}));
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
+33
Просмотреть файл
@@ -0,0 +1,33 @@
var Bizgaze;
(function (Bizgaze) {
let Apps;
(function (Apps) {
let Hrms;
(function (Hrms) {
let Payroll;
(function (Payroll) {
let Controls;
(function (Controls) {
let PayRun;
(function (PayRun) {
class UpdatePayRunDetails_Settings extends Unibase.Platform.Core.BaseComponent {
loadSettingHtml(container) { }
bindControlData(controldatajson) { }
SaveControlData(controldatajson) { }
loadControlPropertiesHtml(controlpropList, container) { }
bindPropertySettings(prop) { }
savePropertySettings(prop) { }
static Instance() {
if (this.instance === undefined) {
this.instance = new UpdatePayRunDetails_Settings();
}
return this.instance;
}
}
PayRun.UpdatePayRunDetails_Settings = UpdatePayRunDetails_Settings;
})(PayRun = Controls.PayRun || (Controls.PayRun = {}));
})(Controls = Payroll.Controls || (Payroll.Controls = {}));
})(Payroll = Hrms.Payroll || (Hrms.Payroll = {}));
})(Hrms = Apps.Hrms || (Apps.Hrms = {}));
})(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
})(Bizgaze || (Bizgaze = {}));
+1
Просмотреть файл
@@ -0,0 +1 @@
{"version":3,"file":"updatepayrundetails.settings.js","sourceRoot":"","sources":["updatepayrundetails.settings.ts"],"names":[],"mappings":"AAAA,IAAU,OAAO,CA4BhB;AA5BD,WAAU,OAAO;IACb,IAAiB,IAAI,CA0BpB;IA1BD,WAAiB,IAAI;QACjB,IAAiB,IAAI,CAwBpB;QAxBD,WAAiB,IAAI;YACjB,IAAiB,OAAO,CAsBvB;YAtBD,WAAiB,OAAO;gBACpB,IAAiB,QAAQ,CAoBxB;gBApBD,WAAiB,QAAQ;oBACrB,IAAiB,MAAM,CAkBtB;oBAlBD,WAAiB,MAAM;wBACnB,MAAa,4BAA6B,SAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa;4BAEjF,eAAe,CAAC,SAAS,IAAI,CAAC;4BAC9B,eAAe,CAAC,eAAe,IAAI,CAAC;4BACpC,eAAe,CAAC,eAAe,IAAI,CAAC;4BACpC,yBAAyB,CAAC,eAAsC,EAAE,SAAS,IAAI,CAAC;4BAChF,oBAAoB,CAAC,IAAgB,IAAI,CAAC;4BAC1C,oBAAoB,CAAC,IAAgB,IAAI,CAAC;4BAG1C,MAAM,CAAC,QAAQ;gCACX,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;oCAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,4BAA4B,EAAE,CAAC;iCACtD;gCACD,OAAO,IAAI,CAAC,QAAQ,CAAC;4BACzB,CAAC;yBACJ;wBAhBY,mCAA4B,+BAgBxC,CAAA;oBACL,CAAC,EAlBgB,MAAM,GAAN,eAAM,KAAN,eAAM,QAkBtB;gBACL,CAAC,EApBgB,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAoBxB;YACL,CAAC,EAtBgB,OAAO,GAAP,YAAO,KAAP,YAAO,QAsBvB;QACL,CAAC,EAxBgB,IAAI,GAAJ,SAAI,KAAJ,SAAI,QAwBpB;IACL,CAAC,EA1BgB,IAAI,GAAJ,YAAI,KAAJ,YAAI,QA0BpB;AACL,CAAC,EA5BS,OAAO,KAAP,OAAO,QA4BhB"}