﻿
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.ComponentModel;
using System.Linq;
using Softv.Providers;
using Softv.Entities;
using Globals;

/// <summary>
/// Class                   : Softv.BAL.Client.cs
/// Generated by            : Class Generator (c) 2014
/// Description             : TrabajoBussines
/// File                    : TrabajoBussines.cs
/// Creation date           : 04/05/2016
/// Creation time           : 01:21 p. m.
///</summary>
namespace Softv.BAL
{

    [DataObject]
    [Serializable]
    public class Trabajo
    {

        #region Constructors
        public Trabajo() { }
        #endregion

        /// <summary>
        ///Adds Trabajo
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Insert, true)]
        public static int Add(TrabajoEntity objTrabajo)
        {
            int result = ProviderSoftv.Trabajo.AddTrabajo(objTrabajo);
            return result;
        }

        /// <summary>
        ///Delete Trabajo
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Delete, true)]
        public static int Delete(int? Clv_Trabajo)
        {
            int resultado = ProviderSoftv.Trabajo.DeleteTrabajo(Clv_Trabajo);
            return resultado;
        }

        /// <summary>
        ///Update Trabajo
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Update, true)]
        public static int Edit(TrabajoEntity objTrabajo)
        {
            int result = ProviderSoftv.Trabajo.EditTrabajo(objTrabajo);
            return result;
        }

        /// <summary>
        ///Get Trabajo
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public static List<TrabajoEntity> GetAll()
        {
            List<TrabajoEntity> entities = new List<TrabajoEntity>();
            entities = ProviderSoftv.Trabajo.GetTrabajo();

            List<LlamadaEntity> lLlamada = ProviderSoftv.Llamada.GetLlamada(entities.Where(x => x.Clv_Trabajo.HasValue).Select(x => x.Clv_Trabajo.Value).ToList());
            lLlamada.ForEach(XLlamada => entities.Where(x => x.Clv_Trabajo.HasValue).Where(x => x.Clv_Trabajo == XLlamada.Clv_Trabajo).ToList().ForEach(y => y.Llamada = XLlamada));

            return entities ?? new List<TrabajoEntity>();
        }

        /// <summary>
        ///Get Trabajo List<lid>
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public static List<TrabajoEntity> GetAll(List<int> lid)
        {
            List<TrabajoEntity> entities = new List<TrabajoEntity>();
            entities = ProviderSoftv.Trabajo.GetTrabajo(lid);
            return entities ?? new List<TrabajoEntity>();
        }

        /// <summary>
        ///Get Trabajo By Id
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Select)]
        public static TrabajoEntity GetOne(int? Clv_Trabajo)
        {
            TrabajoEntity result = ProviderSoftv.Trabajo.GetTrabajoById(Clv_Trabajo);

            if (result.Clv_Trabajo != null)
                result.Llamada = ProviderSoftv.Llamada.GetLlamadaById(result.Clv_Trabajo);

            return result;
        }

        /// <summary>
        ///Get Trabajo By Id
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Select)]
        public static TrabajoEntity GetOneDeep(int? Clv_Trabajo)
        {
            TrabajoEntity result = ProviderSoftv.Trabajo.GetTrabajoById(Clv_Trabajo);

            if (result.Clv_Trabajo != null)
                result.Llamada = ProviderSoftv.Llamada.GetLlamadaById(result.Clv_Trabajo);

            return result;
        }

        public static List<TrabajoEntity> GetTrabajoByClv_Trabajo(int? Clv_Trabajo)
        {
            List<TrabajoEntity> entities = new List<TrabajoEntity>();
            entities = ProviderSoftv.Trabajo.GetTrabajoByClv_Trabajo(Clv_Trabajo);
            return entities ?? new List<TrabajoEntity>();
        }



        /// <summary>
        ///Get Trabajo
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public static SoftvList<TrabajoEntity> GetPagedList(int pageIndex, int pageSize)
        {
            SoftvList<TrabajoEntity> entities = new SoftvList<TrabajoEntity>();
            entities = ProviderSoftv.Trabajo.GetPagedList(pageIndex, pageSize);

            List<LlamadaEntity> lLlamada = ProviderSoftv.Llamada.GetLlamada(entities.Where(x => x.Clv_Trabajo.HasValue).Select(x => x.Clv_Trabajo.Value).Distinct().ToList());
            lLlamada.ForEach(XLlamada => entities.Where(x => x.Clv_Trabajo.HasValue).Where(x => x.Clv_Trabajo == XLlamada.Clv_Trabajo).ToList().ForEach(y => y.Llamada = XLlamada));

            return entities ?? new SoftvList<TrabajoEntity>();
        }

        /// <summary>
        ///Get Trabajo
        ///</summary>
        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public static SoftvList<TrabajoEntity> GetPagedList(int pageIndex, int pageSize, String xml)
        {
            SoftvList<TrabajoEntity> entities = new SoftvList<TrabajoEntity>();
            entities = ProviderSoftv.Trabajo.GetPagedList(pageIndex, pageSize, xml);

            List<LlamadaEntity> lLlamada = ProviderSoftv.Llamada.GetLlamada(entities.Where(x => x.Clv_Trabajo.HasValue).Select(x => x.Clv_Trabajo.Value).Distinct().ToList());
            lLlamada.ForEach(XLlamada => entities.Where(x => x.Clv_Trabajo.HasValue).Where(x => x.Clv_Trabajo == XLlamada.Clv_Trabajo).ToList().ForEach(y => y.Llamada = XLlamada));

            return entities ?? new SoftvList<TrabajoEntity>();
        }


    }




    #region Customs Methods

    #endregion
}
