Пример #1
0
        public List <DETAIL_PROCESS> get_changed(SV_SYSTEM RqSistema, DateTime desde, DateTime hasta, int codigo, int parte, bool WithParameters, SV_KIND[] clases, SV_ZONE[] zonas)
        {
            var salida = new List <DETAIL_PROCESS>();

            int[] default_clase = new int[] { 1 };
            int[] default_zona  = new int[] { 0 };
            int[] rq_cl         = default_clase,
            rq_zn   = default_zona,
            rq_type = default_zona;
            //Some values are fixed from original get_detailed
            string[] aprobados = EstadoAprobacion.ArrOnlyActive;
            bool     CheckPost = true;

            if (clases != null)
            {
                rq_cl   = clases.Select(c => c.id).ToArray();
                rq_type = clases.Select(c => c.type_asset_id).Distinct().ToArray();
            }

            if (zonas != null)
            {
                rq_zn = zonas.Select(c => c.id).ToArray();
            }

            var def_clas = default_clase[0];
            var def_zon  = default_zona[0];


            var datos = (from A in this._context.BATCHS_ARTICLES
                         join B in this._context.PARTS on A.id equals B.article_id
                         join C in this._context.TRANSACTIONS_HEADERS
                         on B.id equals C.article_part_id
                         join D in this._context.TRANSACTIONS_DETAILS
                         on C.id equals D.trx_head_id
                         where
                         (C.trx_ini >= desde &&
                          C.trx_ini <= hasta) &&
                         (A.id == codigo || codigo == 0) &&
                         (B.part_index == parte || parte == -99) &&
                         (rq_cl.Contains(C.kind_id) || rq_cl.Contains(def_clas)) &&
                         (rq_zn.Contains(C.zone_id) || rq_zn.Contains(def_zon)) &&
                         (rq_type.Contains(A.type_asset_id) || rq_type.Contains(def_zon)) &&
                         (A.account_date <= hasta || !CheckPost) &&
                         aprobados.Contains(A.APROVAL_STATE.code) &&
                         (C.ref_source.Contains("TRAS")) &&
                         D.system_id == RqSistema.id
                         select new
            {
                //Batch = A,
                BatchId = A.id,
                BatchDescription = A.descrip,
                BatchPurchaseDate = A.purchase_date,
                BatchAprovalStateId = A.aproval_state_id,
                BatchInitialPrice = A.initial_price,
                BatchInitialLifeTime = A.initial_life_time,
                BatchAccountDate = A.account_date,
                BatchOriginId = A.origin_id,
                BatchAssetId = A.type_asset_id,
                //Part = B,
                PartIndex = B.part_index,
                PartQuantity = B.quantity,
                PartId = B.id,
                PartFirstDate = B.first_date,
                //Head = C,
                HeadTrxIni = C.trx_ini,
                HeadTrxEnd = C.trx_end,
                HeadZoneId = C.zone_id,
                HeadKindId = C.kind_id,
                HeadCategoryId = C.category_id,
                HeadSubZoneId = C.subzone_id,
                HeadSubkindId = C.subkind_id,
                HeadManageId = C.manage_id,
                HeadUserOwn = C.user_own,
                HeadId = C.id,
                HeadRefSource = C.ref_source,
                MethodRevalId = C.method_revalue_id,
                //Detail = D
                DetailValidityId = D.validity_id,
                DetailDepreciate = D.depreciate,
                DetailAllowCredit = D.allow_credit,
                DetailId = D.id
            });

            var selectedHeads = datos.Select(d => d.HeadId).Distinct().ToArray();

            set_detalle_parametros(RqSistema.id, selectedHeads);
            var all_params = this.parametros_sistemas.BySystem(RqSistema.id);

            foreach (var d in datos)
            {
                var line = new DETAIL_PROCESS();
                line.fecha_proceso = desde;
                line.sistema       = RqSistema;
                //Batch = A,
                line.cod_articulo      = d.BatchId;
                line.dscrp             = d.BatchDescription;
                line.dsc_extra         = d.BatchDescription;
                line.fecha_compra      = d.BatchPurchaseDate;
                line.aprobacion        = this.EstadoAprobacion.ById(d.BatchAprovalStateId);
                line.precio_inicial    = d.BatchInitialPrice;
                line.vida_util_inicial = ((RqSistema.ENVIORMENT.code == "IFRS") ? (int)(Math.Round((double)(d.BatchInitialLifeTime / 12 * 365), 0)) : d.BatchInitialLifeTime);
                line.fecha_ing         = d.BatchAccountDate;
                line.origen            = this.origenes.ById(d.BatchOriginId);
                line.tipo = this.Tipos.ById(d.BatchAssetId);
                //Part = B,
                line.parte        = d.PartIndex;
                line.cantidad     = d.PartQuantity;
                line.PartId       = d.PartId;
                line.PrimeraFecha = d.PartFirstDate;
                //Head = C,
                line.fecha_inicio = d.HeadTrxIni;
                line.fecha_fin    = d.HeadTrxEnd;
                line.zona         = this.zonas.ById(d.HeadZoneId);
                line.clase        = this.Clases.ById(d.HeadKindId);
                line.categoria    = this.categorias.ById(d.HeadCategoryId);
                line.subzona      = this.subzonas.ById(d.HeadSubZoneId);
                line.subclase     = this.subclases.ById(d.HeadSubkindId);
                line.gestion      = this.gestiones.ById(d.HeadManageId);
                line.usuario      = d.HeadUserOwn;
                line.HeadId       = d.HeadId;
                line.RefSource    = d.HeadRefSource;
                line.metodo_reval = this.MetodosRev.ById(d.MethodRevalId);
                //Detail = D
                line.vigencia        = this.Vigencias.ById(d.DetailValidityId);
                line.se_deprecia     = d.DetailDepreciate;
                line.derecho_credito = d.DetailAllowCredit;
                line.DetailId        = d.DetailId;

                line.documentos = this.documentos.ByBatch(d.BatchId);

                if (WithParameters)
                {
                    //Complete TRANSACTIONS_PARAMETERS_DETAILS collection
                    var valores   = new LIST_PARAM_VALUE();
                    var curr_vals = this.DetallesParametros.ByHead_Sys(d.HeadId, RqSistema.id);
                    foreach (var par in all_params)
                    {
                        SV_PARAMETER meta_param = this.parametros.ById(par.parameter_id);
                        PARAM_VALUE  det;
                        var          act_val = curr_vals.Find(x => x.code == meta_param.code);
                        if (act_val == null)
                        {
                            det = PARAM_VALUE.NoValue(meta_param);
                        }
                        else
                        {
                            det = act_val;
                        }
                        valores.Add(det);
                    }
                    line.parametros = valores;
                    //Complete SCHEMA sales
                    line.precio_venta = this.ventas.GetPriceSalesByPart(d.PartId, RqSistema.CURRENCY);
                }
                salida.Add(line);
            }

            return(salida);
        }
Пример #2
0
        //public test test_add()
        //{

        //    return test_add("hola", 1, new DateTime(2019, 3, 3));
        //}
        //public test test_add(string texto, int numero, DateTime fecha)
        //{
        //    var row = new test();
        //    row.texto = texto;
        //    row.numero = numero;
        //    row.fecha = fecha;

        //    var rel = new rel_test();
        //    rel.texto_rel = texto + numero.ToString();
        //    rel.test = row;
        //    //_context.tests.AddObject(row);
        //    _context.rel_test.AddObject(rel);
        //    _context.SaveChanges();
        //    return row;
        //}
        #endregion

        #region Datos Generales
        public List <DETAIL_PROCESS> get_detailed(SV_SYSTEM sistema, DateTime corte, int codigo, string[] aprobados, bool WithParameters, bool CheckPost, GENERIC_VALUE clase, GENERIC_VALUE zona)
        {
            var salida = new List <DETAIL_PROCESS>();
            int default_clase = 1;
            int default_zona = 0;
            int rq_cl = default_clase, rq_zn = default_zona, rq_type = 0;

            if (clase != null)
            {
                rq_cl = clase.id;
                if (clase.code == "10")
                {
                    rq_type = 1;
                    rq_cl   = default_clase;
                }
                if (clase.code == "20")
                {
                    rq_type = 2;
                    rq_cl   = default_clase;
                }
            }
            if (zona != null)
            {
                rq_zn = zona.id;
            }

            var datos = (from A in this._context.BATCHS_ARTICLES
                         join B in this._context.PARTS on A.id equals B.article_id
                         join C in this._context.TRANSACTIONS_HEADERS
                         on B.id equals C.article_part_id
                         join D in this._context.TRANSACTIONS_DETAILS
                         on C.id equals D.trx_head_id
                         where
                         (C.trx_ini <= corte &&
                          C.trx_end > corte) &&
                         (A.id == codigo || codigo == 0) &&
                         (C.kind_id == rq_cl || rq_cl == default_clase) &&
                         (C.zone_id == rq_zn || rq_zn == default_zona) &&
                         (A.type_asset_id == rq_type || rq_type == 0) &&
                         (A.account_date <= corte || !CheckPost) &&
                         aprobados.Contains(A.APROVAL_STATE.code) &&
                         D.system_id == sistema.id
                         select new {
                //Batch = A,
                BatchId = A.id,
                BatchDescription = A.descrip,
                BatchPurchaseDate = A.purchase_date,
                BatchAprovalStateId = A.aproval_state_id,
                BatchInitialPrice = A.initial_price,
                BatchInitialLifeTime = A.initial_life_time,
                BatchAccountDate = A.account_date,
                BatchOriginId = A.origin_id,
                BatchAssetId = A.type_asset_id,
                //Part = B,
                PartIndex = B.part_index,
                PartQuantity = B.quantity,
                PartId = B.id,
                PartFirstDate = B.first_date,
                //Head = C,
                HeadTrxIni = C.trx_ini,
                HeadTrxEnd = C.trx_end,
                HeadZoneId = C.zone_id,
                HeadKindId = C.kind_id,
                HeadCategoryId = C.category_id,
                HeadSubZoneId = C.subzone_id,
                HeadSubkindId = C.subkind_id,
                HeadManageId = C.manage_id,
                HeadUserOwn = C.user_own,
                HeadId = C.id,
                HeadIndex = C.head_index,
                HeadRefSource = C.ref_source,
                MethodRevalId = C.method_revalue_id,
                //Detail = D
                DetailValidityId = D.validity_id,
                DetailDepreciate = D.depreciate,
                DetailAllowCredit = D.allow_credit,
                DetailId = D.id,
            }).ToList();
            var selectedHeads = datos.
                                GroupBy(d => d.PartId).
                                Select(d =>
                                       //new {
                                       //PartId = d.Key,
                                       //HeadMaxId = d.Max(e => e.HeadIndex), HeadId =
                                       d.Where(e => e.HeadIndex == d.Max(f => f.HeadIndex))
                                       .FirstOrDefault().HeadId
                                       //}
                                       ).ToArray();

            //var selectedHeads = datos.Select(d => d.HeadId).Distinct().ToArray();
            set_detalle_parametros(sistema.id, selectedHeads);
            var all_params = this.parametros_sistemas.BySystem(sistema.id);

            foreach (var d in datos.Where(a => selectedHeads.Contains(a.HeadId)))
            {
                var line = new DETAIL_PROCESS();
                line.fecha_proceso  = corte;
                line.sistema        = sistema;
                line.cod_articulo   = d.BatchId;
                line.parte          = d.PartIndex;
                line.fecha_inicio   = d.HeadTrxIni;
                line.fecha_fin      = d.HeadTrxEnd;
                line.zona           = this.zonas.ById(d.HeadZoneId);
                line.vigencia       = this.Vigencias.ById(d.DetailValidityId);
                line.cantidad       = d.PartQuantity;
                line.clase          = this.Clases.ById(d.HeadKindId);
                line.categoria      = this.categorias.ById(d.HeadCategoryId);
                line.subzona        = this.subzonas.ById(d.HeadSubZoneId);
                line.subclase       = this.subclases.ById(d.HeadSubkindId);
                line.gestion        = this.gestiones.ById(d.HeadManageId);
                line.usuario        = d.HeadUserOwn;
                line.se_deprecia    = d.DetailDepreciate;
                line.aprobacion     = this.EstadoAprobacion.ById(d.BatchAprovalStateId);
                line.dscrp          = d.BatchDescription;
                line.dsc_extra      = this.inv_articulos_details.ExtraDescrip(d.BatchId);
                line.fecha_compra   = d.BatchPurchaseDate;
                line.documentos     = this.documentos.ByBatch(d.BatchId);
                line.precio_inicial = d.BatchInitialPrice;
                if (sistema.ENVIORMENT.code == "IFRS")
                {
                    line.vida_util_inicial = (int)(Math.Round((double)(d.BatchInitialLifeTime / 12 * 365), 0));
                }
                else
                {
                    line.vida_util_inicial = d.BatchInitialLifeTime;
                }
                line.derecho_credito = d.DetailAllowCredit;
                line.fecha_ing       = d.BatchAccountDate;
                line.origen          = this.origenes.ById(d.BatchOriginId);
                line.tipo            = this.Tipos.ById(d.BatchAssetId);
                line.metodo_reval    = this.MetodosRev.ById(d.MethodRevalId);

                line.PartId    = d.PartId;
                line.HeadId    = d.HeadId;
                line.DetailId  = d.DetailId;
                line.RefSource = d.HeadRefSource;
                if (WithParameters)
                {
                    //Complete TRANSACTIONS_PARAMETERS_DETAILS collection
                    var valores   = new LIST_PARAM_VALUE();
                    var curr_vals = this.DetallesParametros.ByHead_Sys(d.HeadId, sistema.id);
                    foreach (var par in all_params)
                    {
                        SV_PARAMETER meta_param = this.parametros.ById(par.parameter_id);
                        PARAM_VALUE  det;
                        var          act_val = curr_vals.Find(x => x.code == meta_param.code);
                        if (act_val == null)
                        {
                            det = PARAM_VALUE.NoValue(meta_param);
                        }
                        else
                        {
                            det = act_val;
                        }
                        valores.Add(det);
                    }
                    line.parametros = valores;
                    //Complete SCHEMA sales
                    line.precio_venta = this.ventas.GetPriceSalesByPart(d.PartId, sistema.CURRENCY);
                }
                salida.Add(line);
            }

            return(salida);
        }