Exemplo n.º 1
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="membershipProvider"></param>
 public HomeControllerService(IRepository repository, ISendMailProvider sendMail, IWebServiceProvider webService)
 {
     _repository    = repository;
     this._sendMail = sendMail;
     _httpContext   = HttpContext.Current;
     _webService    = webService;
 }
        private async Task fireAndForgetAsync(PayrollStampingParams payrollStampingParams,
                                              Overdraft overdraftToStamp,
                                              List <PayrollCompanyConfiguration> payrollConfigurations,
                                              BlobStorageUtil blobStorageUtil,
                                              ISendMailProvider sendMailProvider,
                                              Guid UUID, string XML)
        {
            try
            {
                //7. Save XML to BlobStorage
                await blobStorageUtil.UploadDocumentAsync($"{UUID}.xml", XML);

                ////8. Transforma el XML a HTML y PDF
                var resultTransformation = await xmlTransformationAsync(payrollStampingParams, overdraftToStamp,
                                                                        XML);

                ////Save PDF to BlobStorage
                await blobStorageUtil.UploadDocumentAsync($"{UUID}.pdf",
                                                          resultTransformation.PreviewTransformResultDetails.FirstOrDefault().TransformPDFResult);

                ////9. Send email with the payroll to Employee
                await sendMailAsync(overdraftToStamp, UUID, XML,
                                    resultTransformation.PreviewTransformResultDetails.FirstOrDefault().TransformPDFResult, sendMailProvider,
                                    payrollConfigurations);
            }
            catch (Exception ex)
            {
                Trace.TraceError($"No fue posible transformar / enviar el comprobante al colaborador. {ex.Message}");
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="membershipProvider"></param>
 public PasswordService(IRepository repository, ISendMailProvider sendMail, IAuthenticationContentProvider authenticationContentProvider, ITokenResolver tokenResolver)
 {
     _repository    = repository;
     this._sendMail = sendMail;
     _authenticationContentProvider = authenticationContentProvider;
     _tokenResolver = tokenResolver;
     _httpContext   = HttpContext.Current;
 }
Exemplo n.º 4
0
        public async Task SendEmail_XMLTM()
        {
            ISendMailProvider sendMailProvider = FactoryMailProvider.CreateInstance(FactoryMailProvider.GetProviderFromConfig());
            var sendMailParams = new Schema.SendMailParams()
            {
                HTMLContent      = "<strong>Este es un correo de prueba</strong>",
                PlainContentText = "Este es un correo de prueba",
                Subject          = "Cotorria entrega CFDI"
            };

            var bytesContent = File.ReadAllBytes(Path.Combine(EmployerRegistrationUT.AssemblyDirectory, "testingFiles\\example.xml"));

            sendMailParams.SendMailAddresses.Add(new Schema.SendMailAddress()
            {
                Email = "*****@*****.**", Name = "Omar"
            });
            sendMailParams.SendMailAttachments.Add(new Schema.SendMailAttachment()
            {
                Attachment = bytesContent, Filename = "cfdi.xml", TypeAttachment = TypeAttachment.XML
            });

            await sendMailProvider.SendMailAsync(sendMailParams);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public AppCodeDetailMaintenanceService(IRepository repository, ISendMailProvider sendMail)
     : base(repository, sendMail)
 {
 }
Exemplo n.º 6
0
 public EmailServiceBase(ISendMailProvider provider, IMessagingMessageService msgService, IUnitOfWork unitOfWork) : base(unitOfWork)
 {
     this.Sender = provider;
     this.MessagingMessageService = msgService;
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public AppMenuItemMaintenanceService(IRepository repository, ISendMailProvider sendMail)
     : base(repository, sendMail)
 {
 }
Exemplo n.º 8
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public AppVariableMaintenanceService(IRepository repository, ISendMailProvider sendMail)
     : base(repository, sendMail)
 {
 }
        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);
        }
Exemplo n.º 10
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public SecurityRoleMaintenanceService(IRepository repository, ISendMailProvider sendMail)
     : base(repository, sendMail)
 {
 }
Exemplo n.º 11
0
 public OrderController(IRepository <Order> repository, ISendMailProvider sendMailProvider)
     : base(repository)
 {
     this._sendMailProvider = sendMailProvider;
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public AppEmailTemplateMaintenanceService(IRepository repository, ISendMailProvider sendMail)
     : base(repository, sendMail)
 {
 }
Exemplo n.º 13
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public SecurityUserLoginHistoryReportService(IRepository repository, ISendMailProvider sendMail) : base(repository, sendMail)
 {
     _reportOutputBaseFileName = String.Format("LoginHistoryReport-{0:yyyy-MM-dd_hh-mm-ss}", DateTime.Now);
     _rdlcReportAssemblyName   = "CStore.Domain.dll";
     _rdlcReportAssemblyManifestResourceName = "CStore.Domain.Domains.Reports.RDLC.SecurityUserLoginHistoryReport.rdlc";
 }
        private async Task sendMailAsync(Overdraft overdraftToStamp, Guid UUID, string XML, byte[] PDF, ISendMailProvider sendMailProvider,
                                         List <PayrollCompanyConfiguration> payrollCompanyConfigurations)
        {
            if (!String.IsNullOrEmpty(overdraftToStamp.HistoricEmployee.Email))
            {
                var message = new StringBuilder();
                message.Append($"Estimado(a) {overdraftToStamp.HistoricEmployee.FullName},");
                message.AppendLine();
                message.AppendLine("Por parte de tu empresa en la que estas colaborando te mandamos los datos de tu recibo de nómina.");
                message.AppendLine($"Periodo: <strong>{overdraftToStamp.HistoricEmployee.PeriodTypeDescription} {overdraftToStamp.PeriodDetail.InitialDate.ToShortDateString()} al {overdraftToStamp.PeriodDetail.FinalDate.ToShortDateString()}.</strong>");
                message.AppendLine($"RFC Emisor: <strong>{payrollCompanyConfigurations.FirstOrDefault().RFC}</strong>");
                message.AppendLine($"Razón Social: <strong>{payrollCompanyConfigurations.FirstOrDefault().SocialReason}</strong>");
                message.AppendLine($"UUID: <strong>{UUID}</strong>");

                var sendindParams = new SendMailParams()
                {
                    HTMLContent       = message.ToString(),
                    SendMailAddresses = new List <SendMailAddress>()
                    {
                        new SendMailAddress()
                        {
                            Email = overdraftToStamp.HistoricEmployee.Email,
                            Name  = overdraftToStamp.HistoricEmployee.FullName
                        }
                    },
                    PlainContentText    = message.ToString(),
                    SendMailAttachments = new List <SendMailAttachment>()
                    {
                        new SendMailAttachment()
                        {
                            Attachment     = Encoding.UTF8.GetBytes(XML),
                            Filename       = $"{UUID}.xml",
                            TypeAttachment = TypeAttachment.XML
                        },
                    },
                    Subject = "Cotorria - Envío de recibo de nómina",
                };

                if (PDF != null)
                {
                    sendindParams.SendMailAttachments.Add(new SendMailAttachment()
                    {
                        Attachment     = PDF,
                        Filename       = $"{UUID}.pdf",
                        TypeAttachment = TypeAttachment.PDF
                    });
                }

                await sendMailProvider.SendMailAsync(sendindParams);
            }
        }
        private async Task <PayrollStampingResult> payrollStampingCoreAsync(PayrollStampingParams payrollStampingParams,
                                                                            List <Overdraft> historicOverdraftsToStamp,
                                                                            List <Incident> incidents,
                                                                            List <Inhability> inhabilities,
                                                                            List <EmployerFiscalInformation> employerFiscalInformations,
                                                                            List <PayrollCompanyConfiguration> payrollConfigurations)
        {
            var payrollStampingResult = new PayrollStampingResult();

            List <string> zipCodesToFind =
                historicOverdraftsToStamp.Select(p => p.HistoricEmployee.EmployerRegistrationZipCode).ToList();

            zipCodesToFind.AddRange(payrollConfigurations.Select(p => p.Address?.ZipCode));

            //Obtener los zipCodes
            var zipCodeMiddlewareManager = new MiddlewareManager <catCFDI_CodigoPostal>(
                new BaseRecordManager <catCFDI_CodigoPostal>(),
                new catCFDI_CodigoPostalValidator());
            var zipCodes = await zipCodeMiddlewareManager.FindByExpressionAsync(p =>
                                                                                zipCodesToFind.Contains(p.c_CodigoPostal)
                                                                                , payrollStampingParams.IdentityWorkID);

            //Round for currency
            var roundUtil = new RoundUtil(payrollStampingParams.Currency.ToString());

            //Zip Code manager
            var zipCodeManager = new ZipCodeManager(zipCodes);

            //Blob Storage Util
            var blobStorageUtil = new BlobStorageUtil(payrollStampingParams.InstanceID);
            await blobStorageUtil.InitializeAsync();

            ISendMailProvider sendMailProvider = FactoryMailProvider.CreateInstance(SendMailProvider.SendGrid);

            var tasks = new List <Task <List <PayrollStampingResultDetail> > >();

            foreach (var overdraftToStamp in historicOverdraftsToStamp)
            {
                tasks.Add(doWorkAsync(overdraftToStamp, roundUtil, zipCodeManager,
                                      payrollStampingParams, blobStorageUtil, sendMailProvider, incidents,
                                      inhabilities, employerFiscalInformations, payrollConfigurations));
            }

            ConcurrentBag <PayrollStampingResultDetail> payrollStampingDetails = new ConcurrentBag <PayrollStampingResultDetail>();

            foreach (var task in await Task.WhenAll(tasks))
            {
                foreach (var insideTask in task)
                {
                    payrollStampingDetails.Add(insideTask);
                }
            }
            payrollStampingResult.PayrollStampingResultDetails = payrollStampingDetails.ToList();

            //Update DB indicate that Overdraft was stamped correctly / PeriodDetail
            await saveOverdraftStampedAsync(payrollStampingParams, payrollStampingResult);

            //Errors preparation
            if (payrollStampingResult.PayrollStampingResultDetails.Any(p => p.PayrollStampingResultStatus == PayrollStampingResultStatus.Fail))
            {
                var errorMessages = payrollStampingResult.PayrollStampingResultDetails.Select(p => p.Message);
                throw new CotorraException(109, "109", string.Join("\n", errorMessages), null);
            }

            return(payrollStampingResult);
        }
Exemplo n.º 16
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public AppAnnouncementMaintenanceService(IRepository repository, ISendMailProvider sendMail)
     : base(repository, sendMail)
 {
 }
Exemplo n.º 17
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="membershipProvider"></param>
 public RegistrationService(IRepository repository, ISendMailProvider sendMail)
 {
     _repository    = repository;
     this._sendMail = sendMail;
     _httpContext   = HttpContext.Current;
 }
Exemplo n.º 18
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public DomainEntityService(IRepository repository, ISendMailProvider sendMail) : base(repository, sendMail)
 {
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public SecurityUserMaintenanceService(IRepository repository, ISendMailProvider sendMail, IPasswordService passwordService)
     : base(repository, sendMail)
 {
     _passwordService = passwordService;
 }
Exemplo n.º 20
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="repository"></param>
 /// <param name="sendMail"></param>
 public WebsiteDataEntityService(IRepository repository, ISendMailProvider sendMail)
     : base(repository, sendMail)
 {
 }
Exemplo n.º 21
0
 public WorkingEmailService(ISendMailProvider provider, IMessagingMessageService msgService, IUnitOfWork unitOfWork) : base(provider, msgService, unitOfWork)
 {
 }