Exemplo n.º 1
0
        // GET: api/State/WA
        public IEnumerable <ZipCodeEntity> Get(string id)
        {
            try
            {
                Trace.WriteLine("Getting zip codes for state " + id);
                long start = DateTime.Now.Ticks;

                var context  = new ZipCodeManager();
                var zipCodes = context.GetZipCodesForState(id);

                var ts = new TimeSpan(DateTime.Now.Ticks - start);
                Trace.WriteLine("Zip codes retrieved in " + ts.TotalMilliseconds + " ms");
                return(zipCodes.OrderBy(x => x.PostalCode));
            }
            finally
            {
                Trace.Flush();
            }
        }
        // GET: api/ZipCode/98052
        public ZipCodeEntity Get(string id)
        {
            try
            {
                long start = DateTime.Now.Ticks;

                var context = new ZipCodeManager();
                ZipCode.DAL.ZipCodeEntity code = context.GetZipCode(id);

                var ts = new TimeSpan(DateTime.Now.Ticks - start);
                Trace.WriteLine(string.Format(
                                    "Zip code {0} details received in {1} ms from database", id, ts.TotalMilliseconds));

                return(code);
            }
            finally
            {
                Trace.Flush();
            }
        }
        /// <summary>
        /// CancelDocumetAsync
        /// </summary>
        /// <returns></returns>
        public async Task <CancelPayrollStampingResult> CancelDocumetAsync(CancelDocumentParams cancelDocumentParams)
        {
            var cancelPayrollStampingResult = new CancelPayrollStampingResult();

            try
            {
                //Get datetime from ZipCode of Employer
                var zipCodeManager = new ZipCodeManager(cancelDocumentParams.ZipCodes);
                (var zipcode, var datetimeFromZipCode) = await zipCodeManager.GetZipCode(cancelDocumentParams.IssuerZipCode);

                //Fill the cancelation object
                Cancelacion cancelacion = new Cancelacion();
                cancelacion.RfcEmisor = cancelDocumentParams.IssuerRFC;
                cancelacion.Fecha     = DateTime.Parse(string.Format("{0:s}", datetimeFromZipCode), CultureInfo.InvariantCulture);
                var cancelacionFolios = new List <CancelacionFolios>();
                var uuids             = cancelDocumentParams.CancelDocumentParamsDetails.Select(p => p.UUID).ToList();
                uuids.ForEach(p => cancelacionFolios.Add(new CancelacionFolios()
                {
                    UUID = p.ToString().ToLower()
                }));
                cancelacion.Folios = cancelacionFolios.ToArray();

                //Creates the cancelationXML
                var xmlCancelation = createCancelationXML(cancelDocumentParams, cancelacion);

                //Call PAC for cancelation
                var stampResult = new CancelDocumentResult <ICFDINomProvider>();
                stampResult.CancelationXML = xmlCancelation;
                stampResult.InstanceID     = cancelDocumentParams.InstanceID;
                IPACProvider pACProvider          = FactoryPACProvider.CreateInstanceFromConfig();
                var          cancelationPACResult = await pACProvider.CancelStampingDocumentAsync(stampResult);

                if (cancelationPACResult.WithErrors)
                {
                    cancelPayrollStampingResult.WithErrors = true;
                    cancelPayrollStampingResult.Message    = cancelationPACResult.Details;
                }
                else
                {
                    cancelPayrollStampingResult.WithErrors                        = false;
                    cancelPayrollStampingResult.CancelacionXMLRequest             = cancelationPACResult.CancelationXML;
                    cancelPayrollStampingResult.CancelacionXMLAcknowledgeResponse = cancelationPACResult.CancelationAcknowledgmentReceipt;

                    //Fill each UUID with the proper status
                    var acuse = SerializerXml.DeserializeObject <Acuse>(cancelationPACResult.CancelationAcknowledgmentReceipt);
                    acuse.Folios.ForEach(p =>
                    {
                        var detail = new CancelPayrollStampingResultDetail();

                        /*
                         * 201 - El folio se ha cancelado con éxito.
                         * 202 - El CFDI ya había sido cancelado previamente.
                         * 203 - UUID no corresponde al emisor.
                         * 204 - El CFDI no aplica para cancelación.
                         * 205 - El UUID no existe o no ha sido procesado por el SAT.
                         * 402 - El Contribuyente no se encuentra el la LCO o la validez de obligaciones se reporta como negativa.
                         */
                        if (p.EstatusUUID == "201" || p.EstatusUUID == "202") //estatus good
                        {
                            statusCancelationCodes.TryGetValue(p.EstatusUUID, out string message);
                            detail.Message = $"{p.EstatusUUID} : {message}";
                            detail.UUID    = Guid.Parse(p.UUID);
                            detail.PayrollStampingResultStatus = PayrollStampingResultStatus.Success;
                        }
                        else
                        {
                            statusCancelationCodes.TryGetValue(p.EstatusUUID, out string message);
                            detail.Message = $"Error al cancelar {p.EstatusUUID} : {message}";
                            detail.UUID    = Guid.Parse(p.UUID);
                            detail.PayrollStampingResultStatus = PayrollStampingResultStatus.Fail;
                        }
                        cancelPayrollStampingResult.CancelPayrollStampingResultDetails.Add(detail);
                    });
                }
            }
            catch (Exception ex)
            {
                cancelPayrollStampingResult.WithErrors = true;
                cancelPayrollStampingResult.Message    = $"Ocurrió un error no controlado en la cancelación: {ex.Message}";
            }

            return(cancelPayrollStampingResult);
        }