public string GenerateLayout(List <Overdraft> overdrafts, IBankAdditionalInformation additionalInformation) { int countPayment = 1; StringBuilder paymentBankFormat = new StringBuilder(); OverdraftManager overdraftManager = new OverdraftManager(); foreach (Overdraft payment in overdrafts) { decimal amountPayment = overdraftManager.GetNetAmount(payment); paymentBankFormat.AppendFormat("{0}{1}{2}{3}{4}{5}{6}{7}" , countPayment.ToString().PadLeft(9, '0') , GetNoNullString(payment.Employee.RFC).PadRight(16, ' ') , BankAccountType , GetNoNullString(payment.Employee.BankAccount).PadRight(20, ' ') , amountPayment.ToString("#.00").Replace(".", string.Empty).PadLeft(15, '0') , FormatEmployeeName(payment.Employee.FullName) , BankDestination , BankDestination); paymentBankFormat.Append(Environment.NewLine); countPayment++; } return(paymentBankFormat.ToString()); }
public async Task <List <WorkPeriodResult> > GetWorkPeriodAsync( Guid companyID, Guid instanceID, Guid?periodDetailID = null, Guid?employeeID = null, Guid?overdraftID = null) { OverdraftManager overdraftManager = new OverdraftManager(); return(await overdraftManager.GetWorkPeriodAsync( companyID, instanceID, periodDetailID, employeeID, overdraftID)); }
public async Task AfterCreate(List <Employee> lstObjectsToValidate, IParams parameters) { var overdraftManager = new OverdraftManager(); overdraftManager.CreateByEmployeesAsync(lstObjectsToValidate).Wait(); LicenseParams licenseParams = parameters as LicenseParams; //Calculation async fire and forget IEnumerable <Guid> employeeIds = lstObjectsToValidate.Select(p => p.ID); var company = lstObjectsToValidate.FirstOrDefault().company; var instanceID = lstObjectsToValidate.FirstOrDefault().InstanceID; var userId = lstObjectsToValidate.FirstOrDefault().IdentityID; new OverdraftCalculationManager().CalculationFireAndForgetByEmployeesAsync(employeeIds, company, instanceID, userId); //Updatefeature var service = new LicensingService(LicensingServiceProviderFactory.GetProvider()); await service.ConsumeEmployeeLicense(licenseParams.LicenseID, licenseParams.LicenseServiceID); }
public string GenerateLayout(List <Overdraft> overdrafts, IBankAdditionalInformation additionalInformation) { StringBuilder paymentBankFormat = new StringBuilder(); OverdraftManager overdraftManager = new OverdraftManager(); foreach (Overdraft payment in overdrafts) { decimal amountPayment = overdraftManager.GetNetAmount(payment); paymentBankFormat.AppendFormat("{0}{1}{2}{3}" , GetNoNullString(payment.Employee.BankAccount).PadLeft(10, '0') , amountPayment.ToString("#.00").Replace(".", string.Empty).PadLeft(13, '0') , ReferencePayment.PadRight(30, ' ') , FormatEmployeeName(payment.Employee.Name, payment.Employee.FirstLastName, payment.Employee.SecondLastName) ); paymentBankFormat.Append(Environment.NewLine); } return(paymentBankFormat.ToString()); }
private string GenerateDetailPaymentEmployees(List <Overdraft> overdrafts, BanorteAdditionalInformation additionalInformation) { StringBuilder paymentBankFormat = new StringBuilder(); OverdraftManager overdraftManager = new OverdraftManager(); foreach (Overdraft payment in overdrafts) { decimal amountPayment = overdraftManager.GetNetAmount(payment); paymentBankFormat.AppendFormat("{0}{1}{2}{3}{4}" , FormatEmployeeName(payment.Employee.Name, payment.Employee.FirstLastName, payment.Employee.SecondLastName) , additionalInformation.SystemID.PadLeft(3, '0') , GetNoNullString(payment.Employee.BankAccount).PadLeft(9, '0') , amountPayment.ToString("#.00").Replace(".", string.Empty).PadLeft(14, '0') , payment.Employee.Code.PadLeft(10, '0') ); paymentBankFormat.Append(Environment.NewLine); } return(paymentBankFormat.ToString()); }
public ScotiabankPaymentLayoutManager() { overdraftManager = new OverdraftManager(); }
/// <summary> /// Generates the settlement letter indicates writer. /// </summary> /// <param name="activeOverdraft">The active overdraft.</param> /// <param name="identityWorkID">The identity work identifier.</param> /// <param name="instanceID">The instance identifier.</param> /// <param name="writer">The writer.</param> /// <returns></returns> public async Task <string> GenerateSettlementLetter(List <Overdraft> activeOverdrafts, Guid identityWorkID, Guid instanceID, string token, IMSSpreadsheetWriter writer) { var instanceMgr = new InstanceManager(); var instance = await instanceMgr.GetByIDAsync(token, instanceID); var payrrollCompanyConfigurationMgr = new MiddlewareManager <PayrollCompanyConfiguration>( new BaseRecordManager <PayrollCompanyConfiguration>(), new PayrollCompanyConfigurationValidator()); var address = (await payrrollCompanyConfigurationMgr.FindByExpressionAsync(x => x.InstanceID == instanceID, identityWorkID, new string[] { "Address" })).FirstOrDefault().Address; var fullAddress = string.Empty; if (address != null) { fullAddress = $" {address.Street}, {address.ZipCode}, {address.Municipality}, {address.FederalEntity}"; } var overdraftManager = new OverdraftManager(); OverdraftTotalsResult totals = new OverdraftTotalsResult(); activeOverdrafts.ForEach(activeOverdraft => { var totalSalaryPayments = activeOverdraft.OverdraftDetails.Where(p => p.ConceptPayment.ConceptType == ConceptType.SalaryPayment && p.ConceptPayment.Print && !p.ConceptPayment.Kind). Select(y => y.Amount).Sum(); var totalDeductionPayments = activeOverdraft.OverdraftDetails.Where(p => p.ConceptPayment.ConceptType == ConceptType.DeductionPayment && p.ConceptPayment.Print && !p.ConceptPayment.Kind). Select(y => y.Amount).Sum(); totals.TotalSalaryPayments += Math.Round(totalSalaryPayments, 2); totals.TotalDeductionPayments += Math.Round(totalDeductionPayments, 2); totals.Total += Math.Round(totals.TotalSalaryPayments - totals.TotalDeductionPayments, 2); }); string header = $"Recibí de la empresa {instance.Name} con domicilio en \n" + $"{fullAddress} " + $"la cantidad de: \n"; string header2 = " por concepto de mi finiquito con motivo de la terminación\n" + "de mi relación laboral con la empresa con fecha indicada en el documento, cantidad \n" + "que resulta de los siguientes conceptos:"; string footer = "Así mismo manifiesto que hasta el momento en que se da por terminada la relación laboral\n" + "no se me adeuda ninguna cantidad de dinero por concepto de salarios devengados,\n" + "diferencia de los mismos, participacion de utilidades, comisiones, horas extras, \n" + "vacaciones, septimos días, días festivos, prima dominical, vacacional y de antigüedad\n" + "y demás prestaciones que otorga la Ley Federal Del Trabajo, ya que las mismas siempre\n" + "me fueron íntegramente cubiertas en los términos de la ley. También hago constar para\n" + "todos los efectos legales conducentes, que durante la vigencia de mi relación\n" + "obrero-patronal no fui objeto de riesgo profesional alguno, motivo por el cual libero\n" + "a mi patron de toda responsabilidad laboral y de seguridad\n" + "social o de cualquier otro concpeto derivado del contrato de trabajo."; string date = DateTime.Now.ToString("MM/dd/yyyy"); var newHeader = ConcatenateHeader(header, header2, totals); var filename = "CartaFiniquito - " + activeOverdrafts.FirstOrDefault().Employee.FullName + ".xlsx"; IWorkbook wb = GenerateSettlementLetter(activeOverdrafts, newHeader, footer, date, activeOverdrafts.FirstOrDefault().Employee.FullName, totals); var url = await WriteSettlementLetterAsync(instanceID, filename, wb, writer); return(url); }
public SantanderPaymentLayoutManager() { overdraftManager = new OverdraftManager(); }
//[Security(ServiceID = PermissionContants.SuperMamalonPermission.ServiceID, // UseAuthorization = false, // UseSession = false, // Permissions = new[] { PermissionContants.SuperMamalonPermission.PermissionID }, // ResourceID = PermissionContants.SuperMamalonPermission.CotoRRA_Cloud_ID_String, // UserInstanceAsOwner = false)] public async Task <ActionResult <string> > GetByEmployeeId(Guid companyId, Guid instanceId, Guid employeeId) { List <OverdraftDTO> overdraftDTOs = new List <OverdraftDTO>(); JsonResult result = new JsonResult(overdraftDTOs); var _blobStorageUtil = new BlobStorageUtil(instanceId); await _blobStorageUtil.InitializeAsync(); try { var middlewareManager = new MiddlewareManager <Overdraft>(new BaseRecordManager <Overdraft>(), new OverdraftValidator()); //get historic overdraft last 3 months and stamped only var overdrafts = await middlewareManager.FindByExpressionAsync(p => p.company == companyId && p.InstanceID == instanceId && p.HistoricEmployee.EmployeeID == employeeId && p.Active && p.OverdraftStatus == OverdraftStatus.Stamped, companyId, new string[] { "HistoricEmployee", "PeriodDetail", "PeriodDetail.Period", "OverdraftDetails", "OverdraftDetails.ConceptPayment" }); if (overdrafts.Any()) { var overdraftManager = new OverdraftManager(); await overdrafts.ForEachAsync(async historicOverdraft => { var totals = overdraftManager.GetTotals(historicOverdraft, new Core.Utils.RoundUtil("MXN")); //Fill DTO var overdraftDTO = _mapper.Map <Overdraft, OverdraftDTO>(historicOverdraft); overdraftDTO.Total = totals.Total; overdraftDTO.TotalPerceptions = totals.TotalSalaryPayments; overdraftDTO.TotalDeductions = totals.TotalDeductionPayments; overdraftDTO.InitialDate = historicOverdraft.PeriodDetail.InitialDate; overdraftDTO.FinalDate = historicOverdraft.PeriodDetail.FinalDate; //Period Traduction overdraftDTO.PeriodTypeName = PaymentPeriodicityTraduction.GetTraduction(historicOverdraft.PeriodDetail.Period.PaymentPeriodicity); try { if (overdraftDTO.UUID != Guid.Empty) { overdraftDTO.XML = await _blobStorageUtil.DownloadDocumentAsync($"{overdraftDTO.UUID}.xml"); } } catch { //No se pudo obtener el xml asociado. overdraftDTO.XML = String.Empty; } //Perceptions and Deductions historicOverdraft.OverdraftDetails.OrderBy(p => p.ConceptPayment.Code).ToList().ForEach(detail => { if (detail.ConceptPayment.ConceptType == ConceptType.SalaryPayment) { overdraftDTO.Perceptions.Add(new PerceptionDTO() { Description = detail.ConceptPayment.Name, Amount = detail.Amount }); } else if (detail.ConceptPayment.ConceptType == ConceptType.DeductionPayment) { overdraftDTO.Deductions.Add(new DeductionDTO() { Description = detail.ConceptPayment.Name, Amount = detail.Amount }); } }); overdraftDTOs.Add(overdraftDTO); }, Environment.ProcessorCount); result = new JsonResult(overdraftDTOs); } } catch (Exception ex) { if (ex != null) { var exception = ex; while (exception.Message.Contains("Exception has been thrown by the target of an invocation")) { exception = exception.InnerException; } throw exception; } } return(result); }
public async Task <IReadOnlyList <Result <List <OverdraftDTO> > > > GetOverByEmployeeID(IReadOnlyList <IDEmployeeDataloaderParam> data) { var instanceID = data.FirstOrDefault().instanceID; var companyID = data.FirstOrDefault().companyID; var employeeIDs = data.Select(x => (Guid?)Guid.Parse(x.employeeID)).ToList(); var config = new MapperConfiguration(cfg => { cfg.CreateMap <Overdraft, OverdraftDTO>(); }); var _blobStorageUtil = new BlobStorageUtil(Guid.Parse(instanceID)); await _blobStorageUtil.InitializeAsync(); var _mapper = config.CreateMapper(); List <Result <List <OverdraftDTO> > > result = new List <Result <List <OverdraftDTO> > >(); var middlewareManager = new MiddlewareManager <Overdraft>(new BaseRecordManager <Overdraft>(), new OverdraftValidator()); var historicOverdrafts = await middlewareManager.FindByExpressionAsync(p => p.company == Guid.Parse(companyID) && p.InstanceID == Guid.Parse(instanceID) && employeeIDs.Contains( p.HistoricEmployee.EmployeeID ) && p.PeriodDetail.FinalDate >= DateTime.UtcNow.AddMonths(-3) && p.Active && p.OverdraftStatus == OverdraftStatus.Stamped, Guid.Parse(companyID), new string[] { "HistoricEmployee", "PeriodDetail", "OverdraftDetails", "OverdraftDetails.ConceptPayment" }); await employeeIDs.ForEachAsync(async empID => { var overs = historicOverdrafts.Where(x => x.EmployeeID == empID); List <OverdraftDTO> overdraftDTOs = new List <OverdraftDTO>(); if (overs.Any()) { var overdraftManager = new OverdraftManager(); await overs.ForEachAsync(async historicOverdraft => { var totals = overdraftManager.GetTotals(historicOverdraft, new Core.Utils.RoundUtil("MXN")); //Fill DTO var overdraftDTO = _mapper.Map <Overdraft, OverdraftDTO>(historicOverdraft); overdraftDTO.Total = totals.Total; overdraftDTO.TotalPerceptions = totals.TotalSalaryPayments; overdraftDTO.TotalDeductions = totals.TotalDeductionPayments; overdraftDTO.InitialDate = historicOverdraft.PeriodDetail.InitialDate; overdraftDTO.FinalDate = historicOverdraft.PeriodDetail.FinalDate; try { if (overdraftDTO.UUID != Guid.Empty) { overdraftDTO.XML = await _blobStorageUtil.DownloadDocumentAsync($"{overdraftDTO.UUID}.xml"); } } catch { //No se pudo obtener el xml asociado. overdraftDTO.XML = String.Empty; } overdraftDTOs.Add(overdraftDTO); }, Environment.ProcessorCount); result.Add(overdraftDTOs); } }, Environment.ProcessorCount); return(result); }
public BanamexPaymentLayoutManager() { overdraftManager = new OverdraftManager(); }
private async Task <List <PayrollStampingResultDetail> > doWorkAsync(Overdraft overdraftToStamp, RoundUtil roundUtil, ZipCodeManager zipCodeManager, PayrollStampingParams payrollStampingParams, BlobStorageUtil blobStorageUtil, ISendMailProvider sendMailProvider, List <Incident> incidents, List <Inhability> inhabilities, List <EmployerFiscalInformation> employerFiscalInformations, List <PayrollCompanyConfiguration> payrollConfigurations) { var payrollStampingResultDetail = new PayrollStampingResultDetail(); var payrollStampingResultDetails = new List <PayrollStampingResultDetail>(); //Obtiene los xmls de los comprobantes segun la version de CFDI especificada IFiscalStamping fiscalStamping = FiscalStampingFactory.CreateInstance(payrollStampingParams.FiscalStampingVersion); //1. Get totals var overdraftResults = new OverdraftManager().GetTotals(overdraftToStamp, roundUtil); //1.1 Datetime for zipCode (var zipcode, var datetimeFromZipCode) = await zipCodeManager.GetZipCode(overdraftToStamp, payrollConfigurations.FirstOrDefault()); //2. Get XML - Creates comprobante var payrolllStampingDetail = payrollStampingParams.Detail .FirstOrDefault(detail => detail.OverdraftID == overdraftToStamp.ID); ICFDINomProvider cfdi = null; try { cfdi = fiscalStamping.CreateComprobante(new CreateComprobanteParams() { PayrollStampingDetail = payrolllStampingDetail, PayrollStampingParams = payrollStampingParams, Overdraft = overdraftToStamp, OverdraftResults = overdraftResults, PayrollCompanyConfiguration = payrollConfigurations.FirstOrDefault(), CFDIDateTimeStamp = datetimeFromZipCode, ZipCode = zipcode, RoundUtil = roundUtil, Incidents = incidents, Inhabilities = inhabilities }); } catch (Exception ex) { //Errores en validaciónes de armado / fiscales payrollStampingResultDetail.Message = ex.Message; payrollStampingResultDetail.PayrollStampingResultStatus = PayrollStampingResultStatus.Fail; payrollStampingResultDetail.HistoricEmployeeID = overdraftToStamp.HistoricEmployeeID.Value; payrollStampingResultDetail.EmployeeID = overdraftToStamp.HistoricEmployee.EmployeeID; payrollStampingResultDetail.OverdraftID = overdraftToStamp.ID; payrollStampingResultDetail.Overdraft = overdraftToStamp; payrollStampingResultDetail.PeriodDetailID = overdraftToStamp.PeriodDetailID; payrollStampingResultDetail.PeriodDetail = overdraftToStamp.PeriodDetail; payrollStampingResultDetails.Add(payrollStampingResultDetail); return(payrollStampingResultDetails); } //3. Sign XML var certificateCER = employerFiscalInformations.FirstOrDefault().CertificateCER; var certificateKey = employerFiscalInformations.FirstOrDefault().CertificateKEY; var certPassword = employerFiscalInformations.FirstOrDefault().CertificatePwd; //Decrypt (var certificatebytesCER, var certificatebytesKEY, var certPasswordResult) = Crypto(payrollStampingParams, certificateCER, certificateKey, certPassword); var stampingResult = fiscalStamping.SignDocument(cfdi, certificatebytesCER, certificatebytesKEY, certPasswordResult); //Set the employer stampingResult.EmployerRFC = payrollConfigurations.FirstOrDefault().RFC; //4. Stamp XML stampingResult = await fiscalStamping.StampDocumetAsync(stampingResult); if (stampingResult.WithErrors) { //error en el timbrado var errrorMessage = $"\nPara el empleado <strong>'{overdraftToStamp.HistoricEmployee.FullName}'</strong> encontramos los siguientes errores de timbrado: '{stampingResult.Details}'"; payrollStampingResultDetail.Message = errrorMessage; payrollStampingResultDetail.PayrollStampingResultStatus = PayrollStampingResultStatus.Fail; } else { //5. Return the complete XML stampingResult.XML = fiscalStamping.CreateXml <ICFDINomProvider>(stampingResult.CFDI, true); //5.5 Fill the result data payrollStampingResultDetail.Message = String.Empty; payrollStampingResultDetail.UUID = stampingResult.UUID; payrollStampingResultDetail.XML = stampingResult.XML; payrollStampingResultDetail.PayrollStampingResultStatus = PayrollStampingResultStatus.Success; //6. Fill the result data overdraftToStamp.UUID = stampingResult.UUID; overdraftToStamp.OverdraftStatus = OverdraftStatus.Stamped; //Fire and forget convertion and sending email fireAndForgetAsync(payrollStampingParams, overdraftToStamp, payrollConfigurations, blobStorageUtil, sendMailProvider, payrollStampingResultDetail.UUID, payrollStampingResultDetail.XML); //Fill the result object payrollStampingResultDetail.HistoricEmployeeID = overdraftToStamp.HistoricEmployeeID.Value; payrollStampingResultDetail.EmployeeID = overdraftToStamp.HistoricEmployee.EmployeeID; payrollStampingResultDetail.OverdraftID = overdraftToStamp.ID; payrollStampingResultDetail.Overdraft = overdraftToStamp; payrollStampingResultDetail.PeriodDetailID = overdraftToStamp.PeriodDetailID; payrollStampingResultDetail.PeriodDetail = overdraftToStamp.PeriodDetail; } payrollStampingResultDetails.Add(payrollStampingResultDetail); return(payrollStampingResultDetails); }