Beispiel #1
0
        private XsltArgumentList getXSLTArguments(PreviewTransformParams previewTransformParams,
                                                  List <Overdraft> overdrafts, List <PayrollCompanyConfiguration> payrollCompanyConfiguration,
                                                  PreviewTransformResultDetail previewTransformResultDetail,
                                                  string originalString, string stampingOriginalString)
        {
            var dateFormat        = new DateTimeUtil();
            var currencyConvert   = new CurrencyUtil();
            var catalogSatManager = new CatalogSATUtil(previewTransformParams.IdentityWorkID,
                                                       previewTransformParams.InstanceID, overdrafts, payrollCompanyConfiguration);

            //QRCode
            var qrData = base.GetQRCodeWithTemplate(new XMLGet(previewTransformResultDetail.XML));
            var qrCode = new QRutil().GetQRBase64(qrData, 20);

            XsltArgumentList xsltArgumentList = new XsltArgumentList();

            //default arguments - Logo
            xsltArgumentList.AddParam("logoCotorraTemplate", "", "data:image/png;base64," + GetLogoCotorra());

            xsltArgumentList.AddParam("overdraftID", "", previewTransformResultDetail.OverdraftID.ToString());

            //fiscal arguments
            xsltArgumentList.AddParam("cbbUriTemplate", "", !string.IsNullOrEmpty(qrCode) ? "data:image/png;base64," + qrCode : string.Empty);
            xsltArgumentList.AddParam("originalstring", "", !string.IsNullOrEmpty(originalString) ? originalString : string.Empty);
            xsltArgumentList.AddParam("stamporiginalstring", "", !string.IsNullOrEmpty(stampingOriginalString) ? stampingOriginalString : string.Empty);

            //object catalog argument
            xsltArgumentList.AddExtensionObject("urn:catalogSat", catalogSatManager);
            //object for convert total amount in words
            xsltArgumentList.AddExtensionObject("urn:convert", currencyConvert);
            xsltArgumentList.AddExtensionObject("urn:dateFormat", dateFormat);

            return(xsltArgumentList);
        }
Beispiel #2
0
        public async Task <GetPreviewUrlResult> GetPreviewUrlByUUIDAsync(Guid instanceId, Guid UUID)
        {
            GetPreviewUrlResult result = new GetPreviewUrlResult();

            result.UUID = UUID;

            BlobStorageUtil blobManagerUtil = new BlobStorageUtil(instanceId);
            await blobManagerUtil.InitializeAsync();

            //check if XML exists
            if (await blobManagerUtil.ExistsFile($"{UUID.ToString()}.xml"))
            {
                result.XMLUri = blobManagerUtil.GetBlobSasUri(instanceId, $"{UUID.ToString()}.xml");

                //check if PDF exists
                if (!await blobManagerUtil.ExistsFile($"{UUID.ToString()}.pdf"))
                {
                    ////Transform
                    var overdraftDetailManager = new MiddlewareManager <Overdraft>(new BaseRecordManager <Overdraft>(),
                                                                                   new OverdraftValidator());

                    var overdrafts = await overdraftDetailManager.FindByExpressionAsync(p =>
                                                                                        p.InstanceID == instanceId && p.UUID == UUID, Guid.Empty);

                    var identityWorkId = overdrafts.FirstOrDefault().company;

                    var previewTransformParams = new PreviewTransformParams()
                    {
                        FiscalStampingVersion         = FiscalStampingVersion.CFDI33_Nom12,
                        IdentityWorkID                = identityWorkId,
                        InstanceID                    = instanceId,
                        PreviewTransformParamsDetails = new List <PreviewTransformParamsDetail>()
                        {
                            new PreviewTransformParamsDetail()
                            {
                                Overdraft   = null,
                                OverdraftID = overdrafts.FirstOrDefault().ID
                            }
                        },
                    };
                    var trasformationResult = await TransformAsync(previewTransformParams);

                    var pdfResult = trasformationResult.PreviewTransformResultDetails.FirstOrDefault().TransformPDFResult;

                    //Upload
                    await blobManagerUtil.UploadDocumentAsync($"{UUID.ToString()}.pdf", pdfResult);
                }
            }
            else
            {
                throw new CotorraException(109, "109", "No fue posible recuperar el XML generado.", null);
            }

            result.PDFUri = blobManagerUtil.GetBlobSasUri(instanceId, $"{UUID.ToString()}.pdf");

            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// Transform overdraft to html - pdf
        /// </summary>
        /// <param name="previewTransformParams"></param>
        /// <returns></returns>
        public async Task <PreviewTransformResult> TransformAsync(PreviewTransformParams previewTransformParams)
        {
            //Get data to transform
            List <Overdraft> overdrafts = await getDataAsync(previewTransformParams);

            //Get payroll company configuration
            var payrollCompanyConfiguration = await getPayrollCompanyConfigurationAsync(previewTransformParams);

            //Download XML
            Dictionary <Guid, string> xmls = await getXMLAsync(previewTransformParams, overdrafts);

            var previewTransformResult = new PreviewTransformResult();
            var xsltUtil = new XsltUtil();
            var pdfUtil  = new PDFUtil();

            //Arrange
            var details = new ConcurrentBag <PreviewTransformResultDetail>();

            foreach (var previewTransformDetail in previewTransformParams.PreviewTransformParamsDetails)
            {
                var previewTransformResultDetail = new PreviewTransformResultDetail();

                //Get xml
                previewTransformDetail.Overdraft         = overdrafts.FirstOrDefault(p => p.ID == previewTransformDetail.OverdraftID);
                previewTransformResultDetail.OverdraftID = previewTransformDetail.OverdraftID;

                if (null == previewTransformDetail.Overdraft)
                {
                    throw new CotorraException(105, "105", "No se encontró el sobrerecibo proporcionado para generar su PDF.", null);
                }

                xmls.TryGetValue(previewTransformDetail.Overdraft.UUID, out string xml);
                previewTransformResultDetail.XML = xml;

                //Original strings
                (var originalString, var stampingOriginalString) = getOriginalStrings(xml);

                var xsltArgumentList = getXSLTArguments(previewTransformParams, overdrafts, payrollCompanyConfiguration,
                                                        previewTransformResultDetail, originalString, stampingOriginalString);

                //Transform HTML
                var htmlResult = xsltUtil.Transform(previewTransformResultDetail.XML, XsltPath, xsltArgumentList);

                //Transform PDF
                var pdfResult = pdfUtil.Convert(htmlResult);

                //Fill the result
                previewTransformResultDetail.TransformHTMLResult = htmlResult;
                previewTransformResultDetail.TransformPDFResult  = pdfResult;

                details.Add(previewTransformResultDetail);
            }
            //Fill the list
            previewTransformResult.PreviewTransformResultDetails.AddRange(details);

            return(previewTransformResult);
        }
        private async Task <PreviewTransformResult> xmlTransformationAsync(PayrollStampingParams payrollStampingParams, Overdraft overdraftToStamp, string XML)
        {
            var fiscalPreviewManager   = new FiscalPreviewerManager();
            var previewTransformParams = new PreviewTransformParams();

            previewTransformParams.FiscalStampingVersion = payrollStampingParams.FiscalStampingVersion;
            previewTransformParams.InstanceID            = payrollStampingParams.InstanceID;
            previewTransformParams.IdentityWorkID        = payrollStampingParams.IdentityWorkID;

            previewTransformParams.PreviewTransformParamsDetails.Add(new PreviewTransformParamsDetail()
            {
                OverdraftID = overdraftToStamp.ID,
                Overdraft   = overdraftToStamp,
                XML         = XML
            });

            var resultTransformation = await fiscalPreviewManager.TransformAsync(previewTransformParams);

            return(resultTransformation);
        }
        public async Task <GetPreviewResult> GetPreviewByOverdraft(GetPreviewParams getPreviewParams)
        {
            GetPreviewResult getPreviewResult = new GetPreviewResult();

            var fiscalPreviewManager   = new FiscalPreviewerManager();
            var previewTransformParams = new PreviewTransformParams();

            previewTransformParams.FiscalStampingVersion = getPreviewParams.FiscalStampingVersion;
            previewTransformParams.InstanceID            = getPreviewParams.InstanceID;
            previewTransformParams.IdentityWorkID        = getPreviewParams.IdentityWorkID;

            previewTransformParams.PreviewTransformParamsDetails.Add(new PreviewTransformParamsDetail()
            {
                OverdraftID = getPreviewParams.OverdraftID
            });

            //Transforma el XML a HTML y PDF
            getPreviewResult.PreviewTransformResult = await fiscalPreviewManager.TransformAsync(previewTransformParams);

            return(getPreviewResult);
        }
        public async Task <ActionResult <string> > GetPreviewByOverdraft(Guid companyId, Guid instanceId, Guid overdraftId)
        {
            var        employeeDTO = new EmployeeDTO();
            JsonResult result      = new JsonResult(employeeDTO);

            try
            {
                GetPreviewResult getPreviewResult = new GetPreviewResult();

                var fiscalPreviewManager   = new FiscalPreviewerManager();
                var previewTransformParams = new PreviewTransformParams();
                previewTransformParams.FiscalStampingVersion = FiscalStampingVersion.CFDI33_Nom12;
                previewTransformParams.InstanceID            = instanceId;
                previewTransformParams.IdentityWorkID        = companyId;
                previewTransformParams.PreviewTransformParamsDetails.Add(new PreviewTransformParamsDetail()
                {
                    OverdraftID = overdraftId
                });


                //Transforma el XML a HTML y PDF
                getPreviewResult.PreviewTransformResult = await fiscalPreviewManager.TransformAsync(previewTransformParams);

                return(new JsonResult(getPreviewResult.PreviewTransformResult));
            }
            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);
        }
Beispiel #7
0
        /// <summary>
        /// Obtiene las nóminas a transformar
        /// </summary>
        /// <param name="previewTransformParams"></param>
        /// <returns></returns>
        private async Task <List <Overdraft> > getDataAsync(PreviewTransformParams previewTransformParams)
        {
            List <Overdraft> overdrafts = null;

            var overdraftDetailManager = new MiddlewareManager <Overdraft>(new BaseRecordManager <Overdraft>(),
                                                                           new OverdraftValidator());

            if (null != previewTransformParams.PreviewTransformParamsDetails.FirstOrDefault().Overdraft)
            {
                overdrafts = new List <Overdraft>()
                {
                    previewTransformParams.PreviewTransformParamsDetails.FirstOrDefault().Overdraft
                };
            }
            else
            {
                var overdraftsIds = previewTransformParams.PreviewTransformParamsDetails.Select(p => p.OverdraftID);
                overdrafts = await overdraftDetailManager.FindByExpressionAsync(p =>
                                                                                p.company == previewTransformParams.IdentityWorkID &&
                                                                                p.InstanceID == previewTransformParams.InstanceID &&
                                                                                overdraftsIds.Contains(p.ID) &&
                                                                                p.Active,
                                                                                previewTransformParams.IdentityWorkID, new string[] {
                    "OverdraftDetails",
                    "OverdraftDetails.ConceptPayment",
                    "PeriodDetail",
                    "PeriodDetail.Period",
                    "HistoricEmployee",
                    "HistoricEmployee.Employee",
                    "HistoricEmployee.Employee.EmployerRegistration"
                });
            }
            if (!overdrafts.Any())
            {
                throw new CotorraException(106, "106", "No se encontraron sobrerecibos con los datos proporcionados.", null);
            }

            return(overdrafts);
        }
Beispiel #8
0
        private async Task <Dictionary <Guid, string> > getXMLAsync(PreviewTransformParams previewTransformParams, List <Overdraft> overdrafts)
        {
            var xmls = new Dictionary <Guid, string>();

            foreach (var overdraft in overdrafts)
            {
                var fileName          = $"{overdraft.UUID}.xml";
                var overdraftInParams = previewTransformParams.PreviewTransformParamsDetails.FirstOrDefault(p => p.OverdraftID == overdraft.ID);
                if (String.IsNullOrEmpty(overdraftInParams.XML))
                {
                    var blobUtil = new BlobStorageUtil(previewTransformParams.InstanceID);
                    await blobUtil.InitializeAsync();

                    var fileContent = await blobUtil.DownloadDocumentAsync(fileName);

                    xmls.TryAdd(overdraft.UUID, fileContent);
                }
                else
                {
                    xmls.TryAdd(overdraft.UUID, overdraftInParams.XML);
                }
            }
            return(xmls);
        }
Beispiel #9
0
        private async Task <List <PayrollCompanyConfiguration> > getPayrollCompanyConfigurationAsync(PreviewTransformParams previewTransformParams)
        {
            var middlewarePayrollCompanyConfigurationManager = new MiddlewareManager <PayrollCompanyConfiguration>(new BaseRecordManager <PayrollCompanyConfiguration>(),
                                                                                                                   new PayrollCompanyConfigurationValidator());
            var payrollCompanyConfiguration = await middlewarePayrollCompanyConfigurationManager.FindByExpressionAsync(p =>
                                                                                                                       p.InstanceID == previewTransformParams.InstanceID && p.Active,
                                                                                                                       previewTransformParams.IdentityWorkID);

            return(payrollCompanyConfiguration);
        }
        public async Task <PreviewTransformResult> TransformAsync(PreviewTransformParams previewTransformParams)
        {
            IFiscalPreview fiscalPreview = FiscalPreviewFactory.CreateInstance(previewTransformParams.FiscalStampingVersion);

            return(await fiscalPreview.TransformAsync(previewTransformParams));
        }