/// <summary> /// Agrega un pago tanto el pago como el doc relacionado es en variables /// El metodo se usa cuando el pago corresponde a una sola factura (doc relacionado) /// </summary> /// <param name="fechaP"></param> /// <param name="formaPagoP"></param> /// <param name="importeP"></param> /// <param name="monedaP"></param> /// <param name="tipoCambioP"></param> /// <param name="uuidDR"></param> /// <param name="monedaDR"></param> /// <param name="metodoPagoDR"></param> public void AddPago( DateTime fechaP, string formaPagoP, decimal importeP, string monedaP, decimal tipoCambioP, string uuidDR, string monedaDR, string metodoPagoDR) { pago = new PagosPago(); pago.FechaPago = fechaP.ToString("yyyy-MM-ddTHH:mm:ss"); pago.FormaDePagoP = formaPagoP; pago.Monto = Math.Round(importeP, decimalesItem, MidpointRounding.AwayFromZero); pago.MonedaP = monedaP; pago.TipoCambioP = tipoCambioP; pago.TipoCambioPSpecified = pago.TipoCambioP != 1; doctoRelacionado = new PagosPagoDoctoRelacionado(); doctoRelacionado.IdDocumento = uuidDR; doctoRelacionado.MonedaDR = monedaDR; doctoRelacionado.MetodoDePagoDR = metodoPagoDR; pago.DoctoRelacionado = doctosRelacionados.ToArray(); pagos.Add(pago); }
/// <summary> /// Obtener información Nodo Pagos Pago /// </summary> /// <param name="idComprobante">ID Comprobante</param> /// <returns>Lista modelo PagosPago</returns> public async Task <List <PagosPago> > ObtenerNodoPagosPago(string idComprobante) { List <PagosPago> respuesta = new List <PagosPago>(); try { var resultado = await _baseDatos.SelectAsync <NodoPago>(_queryNodoPago + idComprobante); if ((resultado?.Any() ?? false)) { foreach (var dato in resultado) { var pago = new PagosPago(); pago.FechaPago = dato.fechaPago.ToString("yyyy-MM-ddTHH:mm:ss"); if (dato.formaDePagoP == "1" || dato.formaDePagoP == "2" || dato.formaDePagoP == "3" || dato.formaDePagoP == "4" || dato.formaDePagoP == "28") { pago.FormaDePagoP = String.Format("{0:00}", Int32.Parse(dato.formaDePagoP)); } else { pago.FormaDePagoP = String.Format("{0:00}", Int32.Parse("3")); } pago.MonedaP = dato.monedaP; if (dato.monedaP != "MXN") { pago.TipoCambioP = Convert.ToDecimal(dato.tipoCambioP); pago.TipoCambioPSpecified = dato.tipoCambioP > 0 ? true : false; } pago.Monto = TruncarDecimal(dato.monto, dato.decimales, true); pago.NumOperacion = !string.IsNullOrEmpty(dato.numOperacion) ? dato.numOperacion : null; pago.RfcEmisorCtaOrd = !string.IsNullOrEmpty(dato.rfcEmisorCtaOrd) ? dato.rfcEmisorCtaOrd : null; pago.NomBancoOrdExt = !string.IsNullOrEmpty(dato.nomBancoOrdExt) ? dato.nomBancoOrdExt : null; pago.CtaOrdenante = !string.IsNullOrEmpty(dato.ctaOrdenante) ? dato.ctaOrdenante : null; pago.RfcEmisorCtaBen = !string.IsNullOrEmpty(dato.rfcEmisorCtaBen) ? dato.rfcEmisorCtaBen : null; pago.CtaBeneficiario = !string.IsNullOrEmpty(dato.ctaBeneficiario) ? dato.ctaBeneficiario : null; var pagoRelacionado = await ObtenerNodoPagosPagoDocRelacionado(dato.id.ToString(), dato.monedaP); pago.DoctoRelacionado = pagoRelacionado != null?pagoRelacionado.ToArray() : null; respuesta.Add(pago); } } else { respuesta = null; } } catch { respuesta = null; } return(respuesta); }
/// <summary> /// Agrega un pago , recibe un objeto pago y una lista de docs relacionados /// </summary> /// <param name="pago"></param> /// <param name="doctoRelacionados"></param> public void AddPago(PagosPago pago, List <PagosPagoDoctoRelacionado> doctoRelacionados) { pago.DoctoRelacionado = doctosRelacionados.ToArray(); pago.Monto = Math.Round(pago.Monto, decimalesItem, MidpointRounding.AwayFromZero); pagos.Add(pago); }
public double generarComplementoPago(decimal monto, string ctaEmisor, string ctaReceptor, string folio, string serie, string uuid, string moneda, string mPago, string rfcReceptor, int numPago, decimal saldoAnt, DataGridView dg) { monto = 0; Pagos oPagos = new Pagos(); List <PagosPago> lstPagos = new List <PagosPago>(); PagosPago oPago = new PagosPago(); oPago.MonedaP = c_Moneda.MXN; oPago.FormaDePagoP = mPago; oPago.FechaPago = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); int i = 0; PagosPagoDoctoRelacionado[] relacionado = new PagosPagoDoctoRelacionado[dg.Rows.Count]; foreach (DataGridViewRow r in dg.Rows) { relacionado[i] = new PagosPagoDoctoRelacionado(); relacionado[i].IdDocumento = r.Cells[0].Value.ToString(); relacionado[i].Serie = r.Cells[3].Value.ToString(); relacionado[i].Folio = r.Cells[4].Value.ToString(); relacionado[i].MonedaDR = c_Moneda.MXN; relacionado[i].MetodoDePagoDR = c_MetodoPago.PPD; relacionado[i].NumParcialidad = "1"; monto += Convert.ToDecimal(String.Format("{0:#.00}", Convert.ToDouble(r.Cells[2].Value))); relacionado[i].ImpSaldoAnt = Convert.ToDecimal(String.Format("{0:#.00}", Convert.ToDouble(r.Cells[2].Value))); //Monto de Factura relacionado[i].ImpSaldoAntSpecified = true; relacionado[i].ImpPagado = Convert.ToDecimal(String.Format("{0:#.00}", Convert.ToDouble(r.Cells[2].Value))); //Monto de factura relacionado[i].ImpPagadoSpecified = true; relacionado[i].ImpSaldoInsoluto = Convert.ToDecimal(String.Format("{0:#.00}", Convert.ToDouble(0))); relacionado[i].ImpSaldoInsolutoSpecified = true; i++; oPago.DoctoRelacionado = relacionado; } oPago.Monto = Convert.ToDecimal(String.Format("{0:#.00}", monto)); lstPagos.Add(oPago); oPagos.Pago = lstPagos.ToArray(); Comprobante comprobante = new Comprobante(); comprobante.Complemento = new ComprobanteComplemento[1]; comprobante.Complemento[0] = new ComprobanteComplemento(); XmlDocument docPago = new XmlDocument(); XmlSerializerNamespaces xmlNameSpacePago = new XmlSerializerNamespaces(); xmlNameSpacePago.Add("pago10", "http://www.sat.gob.mx/Pagos"); using (XmlWriter writer = docPago.CreateNavigator().AppendChild()) { new XmlSerializer(oPagos.GetType()).Serialize(writer, oPagos, xmlNameSpacePago); } comprobante.Receptor = new ComprobanteReceptor(); comprobante.Receptor.UsoCFDI = "P01"; comprobante.Receptor.Rfc = rfcReceptor; comprobante.Conceptos = new ComprobanteConcepto[1]; comprobante.Conceptos[0] = new ComprobanteConcepto(); comprobante.Conceptos[0].Cantidad = 1; comprobante.Conceptos[0].ClaveProdServ = "84111506"; comprobante.Conceptos[0].ClaveUnidad = "ACT"; comprobante.Conceptos[0].Descripcion = "Pago"; comprobante.Conceptos[0].ValorUnitario = 0; comprobante.Conceptos[0].Importe = 0; comprobante.Sello = ""; comprobante.Fecha = Convert.ToDateTime(DateTime.Now.ToString("s")); comprobante.NoCertificado = ConfigurationManager.AppSettings["noCertificado"]; X509Certificate2 certEmisor = new X509Certificate2(); byte[] byteCertData = ReadFile(ConfigurationManager.AppSettings["rutaCer"]); certEmisor.Import(byteCertData); comprobante.Certificado = Convert.ToBase64String(certEmisor.GetRawCertData()); //comprobante.TimbreFiscalDigital = null; comprobante.Complemento = new ComprobanteComplemento[1]; comprobante.Complemento[0] = new ComprobanteComplemento(); comprobante.Complemento[0].Any = new XmlElement[2]; comprobante.Complemento[0].Any[0] = docPago.DocumentElement; //var dom = new XmlDocument(); //XmlNamespaceManager nsmgr = new XmlNamespaceManager(dom.NameTable); //nsmgr.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital"); //var contact = dom.CreateElement("tfd:TimbreFiscalDigital", "http://www.sat.gob.mx/TimbreFiscalDigital"); //dom.AppendChild(contact); //comprobante.Complemento[0].Any[1] = dom.DocumentElement; comprobante.Impuestos = null; comprobante.Total = 0; comprobante.SubTotal = 0; comprobante.Moneda = c_Moneda.XXX; comprobante.FormaPagoSpecified = false; comprobante.TipoDeComprobante = c_TipoDeComprobante.P; comprobante.LugarExpedicion = ConfigurationManager.AppSettings["LugarExpedicion"]; comprobante.Emisor = new ComprobanteEmisor(); comprobante.Emisor.Rfc = ConfigurationManager.AppSettings["rfcEmisor"]; comprobante.Emisor.RegimenFiscal = c_RegimenFiscal.Item612; double ultimoFolio = 0; if (CreateXML(comprobante, mPago, serie, folio)) { ultimoFolio = guardarPago(uuid, c_MetodoPago.PPD, 0m, Convert.ToDecimal(String.Format("{0:#.00}", saldoAnt)), Convert.ToDecimal(String.Format("{0:#.00}", saldoAnt - monto)), Convert.ToDecimal(String.Format("{0:#.00}", monto)), Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")), Convert.ToDecimal(String.Format("{0:#.00}", monto)), mPago, dg); } return(ultimoFolio); }