Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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();
 }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
 public SantanderPaymentLayoutManager()
 {
     overdraftManager = new OverdraftManager();
 }
Ejemplo n.º 9
0
        //[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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 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);
        }