public void GuardarInformacion(RVCFDI33.GeneraCFDI objCfdi, Clientes Clientes, List <AdeudosInstalaciones> Adeudos, GetPAC_Result PAC, string Ruta, string NombreArchivo, int Folio, string Moneda, byte[] Logo, double Total, string FormaDePago, string MetodoPago, string CantidadPDF, string ConceptoPDF, string ValorUnitarioPDF, string ImportePDF, string UnidadPDF) { Usuarios usuario = db.Usuarios.Where(x => x.Usuario == User.Identity.Name).FirstOrDefault(); System.IO.File.WriteAllText(Ruta + "\\" + NombreArchivo + ".xml", objCfdi.XmlTimbrado); byte[] XML = System.IO.File.ReadAllBytes(Ruta + "\\" + NombreArchivo + ".xml"); foreach (var adeudo in Adeudos) { db.InsertCFDIPorOperacion(Guid.NewGuid(), null, adeudo.Id, Guid.Parse(objCfdi.UUID)); } db.InsertCFDI(Guid.Parse(objCfdi.UUID), "Factura", Folio, XML, "~/Facturas/" + PAC.RFC + "/Facturas/" + NombreArchivo, Clientes.IdCliente, null, PAC.Id, false, DateTime.Now, usuario.Id); int TimbresUsados = 1; TimbresUsados = usuario.TimbresUsados + 1; db.UpdateUsuarios(usuario.Id, usuario.Usuario, usuario.Contraseña, usuario.TipoUsuario, usuario.Roles, usuario.Activo, usuario.Timbres, TimbresUsados, usuario.TimbresCancelados, usuario.PrimeraVez); string Domicilio = Clientes.Calle + " " + Clientes.NoExterior + " " + Clientes.Colonia + " C.P " + Clientes.CodigoPostal + " " + Clientes.Ciudad + "," + Clientes.Estado + " " + Clientes.Pais; double TotalImpuestosRetenidos = Total - (Total / 1.16); Tools.PDF.CrearFactura(Ruta + "\\", NombreArchivo, Moneda, Logo, objCfdi, PAC.RFC, PAC.Nombre, PAC.RegimenFiscal, Clientes.RFC, "22210" , Domicilio, FormaDePago, MetodoPago, Total.ToString("f2"), TotalImpuestosRetenidos.ToString("f2"), float.Parse((Total / 1.16) + "").ToString("f2"), CantidadPDF, ConceptoPDF, ValorUnitarioPDF, ImportePDF, UnidadPDF); if (Adeudos.FirstOrDefault().RequiereEnvio == true && !string.IsNullOrEmpty(Clientes.Email)) { CFDI CFDI = db.GetCFDI(Guid.Parse(objCfdi.UUID), 1).First(); Helpers.Correo.EnviarFactura(Clientes.Email, NombreArchivo, "http://facturacion.avenzo.mx/Facturas/Descargar", Server.MapPath("~/Tools/plantilla_facturas.html"), CFDI); } }
public ActionResult Generar(Guid IdNominaHistorial) { NominaHistorial nominaHistorial = db.GetNominaHistorial(1, IdNominaHistorial).First(); Empleados Empleado = db.GetEmpleados(1, nominaHistorial.IdEmpleado).First(); GetPAC_Result PAC = db.GetPAC(nominaHistorial.IdProveedor, 1).First(); List <NominaDeduccion> NominaDeducciones = db.NominaDeduccion.Where(x => x.IdNominaHistorial == IdNominaHistorial).ToList(); List <NominaPercepciones> NominaPercepciones = db.NominaPercepciones.Where(x => x.IdNominaHistorial == IdNominaHistorial).ToList(); List <Model.CFDI> CFDIs = db.GetCFDI(null, 0).Where(x => x.IdProveedor == PAC.Id).ToList(); int FolioFactura = 1; if (CFDIs.Count > 0) { FolioFactura = CFDIs.Max(x => x.Folio).Value + 1; } GeneraCFDI obj = new GeneraCFDI(); string PATH = "~/Certificados/" + PAC.RFC; string CER = Server.MapPath(PATH + "/" + PAC.RFC + ".cer"); string KEY = Server.MapPath(PATH + "/" + PAC.RFC + ".key"); obj.agregarCertificado(CER); double SubTotal = NominaPercepciones.Sum(x => x.ImporteGravado + x.ImporteExcento).Value; double Descuento = NominaDeducciones.Sum(x => x.Importe); double OtrosPagos = 0; double TotalImpuestosRetenidos = NominaDeducciones.Where(x => x.Tipo.Contains("002")).Sum(x => x.Importe); double TotalOtrasDeducciones = NominaDeducciones.Where(x => !x.Tipo.Contains("002")).Sum(x => x.Importe); obj.agregarComprobante33("A", "" + FolioFactura, System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"), "99", "", SubTotal, Descuento, "MXN", "", SubTotal - Descuento, "N", "PUE", "22210", ""); obj.agregarEmisor(PAC.RFC, PAC.Nombre, PAC.RegimenFiscal); TimeSpan Time = (nominaHistorial.FechaFinalPago - Empleado.FechaInicioRelLaboral.Value); DateTime A = new DateTime(); A = A + Time; int Semanas = Time.Days / 7; string Antiguedad = "P" + Semanas + "W"; int DiasDeVacaciones = CalcularDiasDeVacaciones(A); string SalarioDiarioIntegrado = ((double)(((365 + 15 + (DiasDeVacaciones * 0.25)) / 365) * Empleado.SalarioDiario)).ToString("f2"); obj.agregarReceptor(Empleado.RFC, Empleado.Nombre + " " + Empleado.ApellidoPaterno + " " + Empleado.ApellidoMaterno, "", "", "P01"); obj.agregarConcepto("84111505", "", 1, "ACT", "", "Pago de nómina", NominaPercepciones.Sum(x => x.ImporteGravado).Value, NominaPercepciones.Sum(x => x.ImporteGravado).Value, NominaDeducciones.Sum(x => x.Importe)); //Nomina obj.agregarNomina12("1.2", "O", nominaHistorial.FechaPago.ToString("yyyy-MM-dd"), nominaHistorial.FechaInicialPago.ToString("yyyy-MM-dd"), nominaHistorial.FechaFinalPago.ToString("yyyy-MM-dd"), nominaHistorial.NumeroDiasPagados.ToString(), SubTotal.ToString("f2"), Descuento.ToString("f2"), "0"); obj.agregarNominaEmisor12(PAC.CURP, PAC.RegistroPatronal, PAC.RfcPatronOrigen); obj.agregarNominaReceptor12(Empleado.CURP, Empleado.NumeroSeguridadSocial, Empleado.FechaInicioRelLaboral.Value.ToString("yyyy-MM-dd"), Antiguedad, Empleado.TipoContrato, "No", Empleado.TipoJornada, "02", Empleado.NoEmpleado.ToString(), Empleado.Departamento, Empleado.Puesto, Empleado.RiesgoPuesto, nominaHistorial.PeriodicidadPago, Empleado.Banco, Empleado.CuentaBancaria, "0", SalarioDiarioIntegrado, Empleado.ClaveEntFed); double TotalPercepciones = NominaPercepciones.Sum(x => x.ImporteGravado + x.ImporteExcento).Value, TotalPercepcionesTemp = 0; obj.agregarNominaPercepciones12(NominaPercepciones.Sum(x => x.ImporteGravado + x.ImporteExcento).Value.ToString("f2"), "0", "0", NominaPercepciones.Sum(x => x.ImporteGravado).Value.ToString("f2"), NominaPercepciones.Sum(x => x.ImporteExcento).Value.ToString("f2")); foreach (var item in NominaPercepciones) { obj.agregarNominaPercepcionesPercepcion12(item.Tipo, item.Clave, item.Concepto, item.ImporteGravado.Value.ToString("f2"), item.ImporteExcento.Value.ToString("f2")); TotalPercepcionesTemp += item.ImporteGravado.Value + item.ImporteExcento.Value; } obj.agregarNominaDeducciones12(TotalOtrasDeducciones.ToString("f2"), TotalImpuestosRetenidos.ToString("f2")); foreach (var item in NominaDeducciones) { obj.agregarNominaDeduccionesDeduccion12(item.Tipo, item.Clave, item.Concepto, item.Importe.ToString("f2")); } obj.GeneraXML(KEY, PAC.ContrasenaLlave); string XML = obj.Xml.Replace("Sello=\"\"", "Sello=\"" + obj.SelloEmisor + "\""); //obj.UUID; //obj.Serie; string NombreArchivo = Empleado.RFC + "_" + FolioFactura + "_" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + "_SinTimbrar"; string File = Server.MapPath("~/Facturas/" + PAC.RFC + "/Nominas/" + NombreArchivo + ".xml"); Tools.NumLetra NL = new Tools.NumLetra(); System.IO.File.WriteAllText(File, XML); byte[] CFDI; obj.TimbrarCfdiArchivo(File, PAC.Usuario, PAC.Contrasena, "http://generacfdi.com.mx/rvltimbrado/service1.asmx", File.Replace(NombreArchivo + ".xml", ""), NombreArchivo.Replace("_SinTimbrar", ""), true); if (obj.MensajeError == "") { System.IO.File.WriteAllText(File.Replace("_SinTimbrar", ""), obj.XmlTimbrado); CFDI = System.IO.File.ReadAllBytes(File.Replace("_SinTimbrar", "")); db.InsertCFDI(Guid.Parse(obj.UUID), "Nomina", FolioFactura, CFDI, "~\\Facturas\\" + PAC.RFC + "\\Nominas\\" + NombreArchivo.Replace("_SinTimbrar.xml", ""), null, Empleado.Id, PAC.Id, false, DateTime.Now, User.Identity.Name); var base64 = ""; if (PAC.Logo != null) { base64 = Convert.ToBase64String(PAC.Logo); } else { base64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png"))); } var imgSrc = String.Format("data:image/gif;base64,{0}", base64); db.InsertCFDIPorOperacion(Guid.NewGuid(), IdNominaHistorial, null, Guid.Parse(obj.UUID)); CultureInfo CI = CultureInfo.CreateSpecificCulture("es-MX"); PDF.CrearNomina(Server.MapPath("/"), NombreArchivo, nominaHistorial.LugarExpedicion, PAC.RFC, PAC.Nombre, "", "", obj.UUID, obj.NoCertificadoPac, obj.Folio, obj.Serie, obj.FechaEmision, Empleado.Nombre + " " + Empleado.ApellidoPaterno + " " + Empleado.ApellidoMaterno, Empleado.Departamento, Empleado.RFC, Empleado.Puesto, imgSrc, Empleado.CURP, Empleado.NumeroSeguridadSocial, nominaHistorial.NumeroDiasPagados.ToString(), nominaHistorial.FechaPago.ToString("yyyy-MM-dd"), nominaHistorial.FechaInicialPago.ToString("yyyy-MM-dd"), nominaHistorial.FechaFinalPago.ToString("yyyy-MM-dd"), NL.Convertir((SubTotal - Descuento).ToString("f2"), true, "MXN"), "NA", Empleado.CuentaBancaria, PAC.RegimenFiscal, TotalImpuestosRetenidos.ToString("C2", CI), (SubTotal - Descuento).ToString("C2", CI), obj.SelloEmisor, obj.SelloSat, obj.CadenaOriginal, NominaPercepciones, NominaDeducciones); return(Json(new { error = "none", Id = obj.UUID }, JsonRequestBehavior.AllowGet)); } else { return(Json(new { error = "Error a Timbrar", Message = obj.MensajeError }, JsonRequestBehavior.AllowGet)); } }