Example #1
0
        public static void GeneraOrdenesDeCompraPendientes()
        {
            string fhoy = DateTime.Now.ToShortDateString();

            SolicitudMaterialesConsulta sol = new SolicitudMaterialesConsulta();

            sol.Estatus.id = 6; // 6 = Por generar orden de compra
            sol.FechaDesde = Convert.ToDateTime(fhoy);
            sol.FechaHasta = Convert.ToDateTime(fhoy);
            List <EN.Abastos.SolicitudMateriales> ls = GetSolicitudDeMateriales(sol);

            if (ls != null && ls.Count > 0)
            {
                SDK.Inicializa();
                bool Siguiente = false;
                foreach (EN.Abastos.SolicitudMateriales solicitud in ls)
                {
                    if (SDK.AbreEmpresa(solicitud.BaseDeDatos))
                    {
                        List <EN.Abastos.SolicitudMateriales> ls_aux = new List <EN.Abastos.SolicitudMateriales>();
                        int cidprov = 0;
                        EN.Abastos.SolicitudMateriales saux = null;

                        //Verifica la cantidad de ordenes de compra a generar
                        // por proveedor de acuerdo a los artículos elegidos.
                        foreach (DetalleSolicitudMateriales ds in solicitud.articulos)
                        {
                            if (cidprov != ds.item.CIDPROVEEDOR)
                            {
                                cidprov        = ds.item.CIDPROVEEDOR;
                                saux           = new EN.Abastos.SolicitudMateriales();
                                saux           = (EN.Abastos.SolicitudMateriales)solicitud.Clone();
                                saux.articulos = new List <DetalleSolicitudMateriales>();
                                saux.articulos.Add(ds);
                                ls_aux.Add(saux);
                            }
                            else
                            {
                                saux.articulos.Add(ds);
                            }
                        }

                        //Por cada diferente proveedor en la misma solicitud
                        // se genera una orden de compra en el sistema comercial
                        foreach (EN.Abastos.SolicitudMateriales sol_aux in ls_aux)
                        {
                            Siguiente = false;
                            try
                            {
                                Documento documento    = new Documento();
                                string    codProveedor = documento.BuscaProveedorPorId(solicitud.CIDProveedor); //339
                                int       idmoneda     = documento.ObtieneIdMoneda(solicitud.Moneda);
                                double    importe      = solicitud.total;
                                string    sconcepto    = documento.ObtieneCodigoConcepto(solicitud.ConceptoDocumento);
                                if (sconcepto.Trim().Length > 0)
                                {
                                    string folio = documento.ObtieneFolioSiguiente(sconcepto);
                                    solicitud.FolioDocumento = folio;
                                    solicitud.SerieDocumento = "";
                                    tDocumento docto = new tDocumento();
                                    docto.aCodConcepto   = sconcepto;
                                    docto.aSerie         = "";
                                    docto.aFecha         = DateTime.Now.ToString("MM/dd/yyyy");
                                    docto.aFolio         = Convert.ToDouble(documento.Folio);
                                    docto.aCodigoCteProv = codProveedor;
                                    docto.aNumMoneda     = idmoneda;
                                    docto.aImporte       = importe;
                                    docto.aDescuentoDoc1 = 0;
                                    docto.aDescuentoDoc2 = 0;
                                    docto.aSistemaOrigen = 0;
                                    docto.aAfecta        = 0;
                                    docto.aReferencia    = "";

                                    bool bCreado = false;
                                    try
                                    {
                                        bCreado = documento.AltaDeDocumento(docto);
                                    }
                                    catch (Exception ex)
                                    {
                                        throw ex;
                                    }

                                    if (bCreado)
                                    {
                                        //Inserta información adicional
                                        bCreado = documento.SetDatoDocumento("CTEXTOEXTRA1", new StringBuilder(solicitud.Usuario));
                                    }

                                    if (bCreado)
                                    {
                                        int c = 1;
                                        foreach (DetalleSolicitudMateriales fila in solicitud.articulos)
                                        {
                                            tMovimiento tm = new tMovimiento();
                                            tm.aConsecutivo      = c;
                                            tm.aCodProdSer       = fila.item.CCODIGOPRODUCTO.ToString();
                                            tm.aCosto            = 0;
                                            tm.aPrecio           = fila.item.preciocompra;
                                            tm.aReferencia       = "";
                                            tm.aCodClasificacion = "";
                                            tm.aCodAlmacen       = "1";
                                            tm.aUnidades         = fila.cantidad;
                                            bCreado = false;
                                            try
                                            {
                                                Int32 idMov = documento.AltaMovimiento(tm);
                                                if (idMov > 0)
                                                {
                                                    documento.SetDatoMovimiento("CIMPUESTO1", new StringBuilder(((fila.item.preciocompra * fila.cantidad) * 0.16).ToString()));
                                                    documento.SetDatoMovimiento("CPORCENTAJEIMPUESTO1", new StringBuilder("16"));
                                                    fila.CIDMOVIMIENTO  = idMov;
                                                    fila.FolioDocumento = folio;
                                                    fila.SerieDocumento = "";
                                                }
                                                else
                                                {
                                                    throw new Exception(string.Format("Revise el log {0} en el visor de eventos del sistema", EN.General.Utils.EventLog));
                                                }
                                            }
                                            catch (Exception ex)
                                            {
                                                throw ex;
                                            }
                                            c++;
                                        }
                                    }
                                }
                                else
                                {
                                    throw new Exception("No se econtró el codigo del concepto " + solicitud.ConceptoDocumento);
                                }

                                InsertaSolicitud(solicitud); //Actualiza información de la solicitud en DB
                                Siguiente = true;
                            }
                            catch (Exception ex)
                            {
                                EN.General.EventLog.WriteError(ex.ToString());
                                Siguiente = false;
                                break;
                            }
                        }

                        if (SDK.EmpresaAbierta)
                        {
                            SDK.CerrarEmpresa(solicitud.BaseDeDatos);
                        }

                        if (!Siguiente)
                        {
                            break;
                        }
                    }
                    else
                    {
                        EN.General.EventLog.WriteError("Error al procesar la solicitud con id: " + solicitud.id);
                        EN.General.EventLog.WriteError("Error al abrir Base de Datos " + solicitud.BaseDeDatos);
                    }

                    ActualizaEstatus("SICAS", solicitud.id, 4);
                }
                SDK.TerminaSDK();
            }
        }