public IEnumerable getRazaCount(DateTime?fecha_start, DateTime?fecha_fin)
    {
        SCPMdbEntities db = new SCPMdbEntities();

        var razas = db.SCPM_RAZAS.ToList();
        var _res  = new Dictionary <decimal, PersonaRaza>();

        foreach (var item in razas)
        {
            _res.Add(item.RAZ_ID, new PersonaRaza()
            {
                count = 0,
                raza  = item.RAZ_NOM
            });
        }

        var personas = db.SCPM_PERSONALES.ToList();

        foreach (var p in personas)
        {
            p.SCPM_PUESTO_HIST.Load();
            if (p.SCPM_PUESTO_HIST.Count > 0)
            {
                SCPM_PUESTO_HIST lastCargo = p.SCPM_PUESTO_HIST.OrderBy(c => c.PST_HIS_FEC_INI).FirstOrDefault();
                p.SCPM_RAZASReference.Load();
                if ((lastCargo.PST_HIS_FEC_INI <= fecha_fin) && (fecha_start == null || lastCargo.PST_HIS_FEC_INI >= fecha_start))
                {
                    _res[p.SCPM_RAZAS.RAZ_ID].count++;
                }
            }
        }
        return(_res.Values.ToList());
    }
Example #2
0
    public List <SCPM_CARGOS> getFreeCargosByAreaID(int newx, int per_id)
    {
        List <SCPM_CARGOS> _res = new List <SCPM_CARGOS>();

        var cargosx = (from a in db.SCPM_CARGOS.Include("SCPM_DENOMINACIONES") where a.SCPM_AREAS.ARE_COD == newx select a).ToList();

        foreach (var puesto in cargosx)
        {
            puesto.SCPM_PUESTO_HIST.Load();
            SCPM_PUESTO_HIST lastCargo = puesto.SCPM_PUESTO_HIST.Count > 0 ? puesto.SCPM_PUESTO_HIST.OrderByDescending(c => c.PST_HIS_FEC_INI).FirstOrDefault() : puesto.SCPM_PUESTO_HIST.FirstOrDefault();
            if (lastCargo != null && (lastCargo.PST_HIS_FEC_FIN == null || DateTime.Now.CompareTo(lastCargo.PST_HIS_FEC_FIN) <= 0))
            {//cargo tiene un funcionario actualmente
                lastCargo.SCPM_PERSONALESReference.Load();
                if (lastCargo.SCPM_PERSONALES.PER_ID == per_id)
                {
                    _res.Add(puesto);
                }
            }
            else
            {//cargo libre
                _res.Add(puesto);
            }
        }
        return(_res);
    }
    public IEnumerable getPersonasDiscapacidadCount(DateTime?fecha_start, DateTime?fecha_fin)
    {
        SCPMdbEntities db = new SCPMdbEntities();

        var razas = db.SCPM_TIPO_DISCAPACIDADES.ToList();
        var _res  = new Dictionary <decimal, PersonaRaza>();



        _res.Add(0, new PersonaRaza()
        {
            count = 0,
            raza  = "Sin discapacidad"
        });

        _res.Add(1, new PersonaRaza()
        {
            count = 0,
            raza  = "Con discapacidad"
        });

        var personas = db.SCPM_PERSONALES.ToList();

        foreach (var p in personas)
        {
            p.SCPM_PUESTO_HIST.Load();
            if (p.SCPM_PUESTO_HIST.Count > 0)
            {
                SCPM_PUESTO_HIST lastCargo = p.SCPM_PUESTO_HIST.OrderBy(c => c.PST_HIS_FEC_INI).FirstOrDefault();

                if ((lastCargo.PST_HIS_FEC_INI <= fecha_fin) && (fecha_start == null || lastCargo.PST_HIS_FEC_INI >= fecha_start))
                {
                    p.SCPM_DISCAPACIDADES.Load();
                    var dis = p.SCPM_DISCAPACIDADES.ToList();
                    if (dis.Count > 0)
                    {
                        _res[1].count++;
                    }
                    else
                    {
                        _res[0].count++;
                    }
                }
            }
        }

        return(_res.Values.ToList());
    }
    public IEnumerable getGeneroCount(DateTime?fecha_start, DateTime?fecha_fin)
    {
        SCPMdbEntities db = new SCPMdbEntities();

        var _res = new Dictionary <decimal, PersonaRaza>();


        _res.Add(0, new PersonaRaza()
        {
            count = 0,
            raza  = "Hombre"
        });
        _res.Add(1, new PersonaRaza()
        {
            count = 0,
            raza  = "Mujer"
        });


        var personas = db.SCPM_PERSONALES.ToList();

        foreach (var p in personas)
        {
            p.SCPM_PUESTO_HIST.Load();
            if (p.SCPM_PUESTO_HIST.Count > 0)
            {
                SCPM_PUESTO_HIST lastCargo = p.SCPM_PUESTO_HIST.OrderBy(c => c.PST_HIS_FEC_INI).FirstOrDefault();

                if ((lastCargo.PST_HIS_FEC_INI <= fecha_fin) && (fecha_start == null || lastCargo.PST_HIS_FEC_INI >= fecha_start))
                {
                    _res[p.PER_GEN.Value ? 0 : 1].count++;
                }
            }
        }
        return(_res.Values.ToList());
    }
Example #5
0
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        try
        {
            var res = persvm.getPersonasByID(Convert.ToInt32(e.CommandArgument.ToString()));
            if (res.Count > 0)
            {
                SCPM_PERSONALES persona = res.First();
                current_persona_id.Value = persona.PER_ID.ToString();
                //fillCargos(persona.PER_ID.ToString());
                //historial puestos
                persona.SCPM_PUESTO_HIST.Load();

                SCPM_PUESTO_HIST lastCargo = persona.SCPM_PUESTO_HIST.Count > 0 ? persona.SCPM_PUESTO_HIST.OrderByDescending(c => c.PST_HIS_FEC_INI).FirstOrDefault() : persona.SCPM_PUESTO_HIST.FirstOrDefault();

                comboUnidad.Enabled      = true;
                ComboArea.Enabled        = true;
                comboRelacionLab.Enabled = true;
                comboCargo.Enabled       = true;
                inFechaStart.Enabled     = true;
                inFechaEnd.Enabled       = true;

                search_res2.InnerHtml = String.Format("{0} {1} {2} {3}", persona.PER_APE_PAT, persona.PER_APE_MAT, persona.PER_NOM1, persona.PER_NOM2);

                if (lastCargo != null && (lastCargo.PST_HIS_FEC_FIN == null || DateTime.Now.CompareTo(lastCargo.PST_HIS_FEC_FIN) <= 0))
                {
                    lastCargo.SCPM_CARGOSReference.Load();
                    lastCargo.SCPM_RELACIONES_LABORALESReference.Load();
                    lastCargo.SCPM_CARGOS.SCPM_AREASReference.Load();
                    lastCargo.SCPM_CARGOS.SCPM_AREAS.SCPM_UNIDADReference.Load();

                    current_cargo_id.Value = lastCargo.SCPM_CARGOS.CAR_ID.ToString();

                    puestoActual.InnerHtml = String.Format("Puesto Actual: {0} / {1} / {2} / {3} <br/> <span class='mif-calendar'></span> {4}/{5}", lastCargo.SCPM_CARGOS.SCPM_AREAS.SCPM_UNIDAD.UNI_NOM,
                                                           lastCargo.SCPM_CARGOS.SCPM_AREAS.ARE_NOM,
                                                           lastCargo.SCPM_CARGOS.CAR_NOM,
                                                           lastCargo.SCPM_RELACIONES_LABORALES.REL_LAB_NOM,
                                                           lastCargo.PST_HIS_FEC_INI.Value.ToString("yyyy-MM-dd"),
                                                           lastCargo.PST_HIS_FEC_FIN == null ? "actualidad" : lastCargo.PST_HIS_FEC_FIN.Value.ToString("yyyy-MM-dd"));

                    //jefe
                    JefeModel jefe = psvm.getJefeOfAreaId(Convert.ToInt32(ComboArea.SelectedValue), HelperUtil.cargoJefeArea.Split(',').Contains(lastCargo.SCPM_CARGOS.CAR_NOM));
                    puestoActual.InnerHtml += String.Format("<br/><br/><strong>{0}<strong>: {1}", jefe.Cargo, jefe.Nombre);
                    //fin jefe
                    comboUnidad.SelectedValue = lastCargo.SCPM_CARGOS.SCPM_AREAS.SCPM_UNIDAD.UNI_COD.ToString();
                    fillAreas();

                    ComboArea.SelectedValue = lastCargo.SCPM_CARGOS.SCPM_AREAS.ARE_COD.ToString();
                    fillCargos(persona.PER_ID.ToString());
                    comboCargo.SelectedValue = lastCargo.SCPM_CARGOS.CAR_ID.ToString();

                    comboRelacionLab.SelectedValue = lastCargo.SCPM_RELACIONES_LABORALES.REL_LAB_ID.ToString();
                    inFechaStart.Text = lastCargo.PST_HIS_FEC_INI.Value.ToString("yyyy-MM-dd");
                    inFechaEnd.Text   = lastCargo.PST_HIS_FEC_FIN == null ? "" : lastCargo.PST_HIS_FEC_FIN.Value.ToString("yyyy-MM-dd");
                }
                else
                {
                    puestoActual.InnerHtml = String.Format("Puesto Actual: {0}", "Ninguno");
                    current_cargo_id.Value = "dcm";
                    HelperUtil.showNotifi("Funcionario actualmente sin puesto de trabajo");
                    fillCargos(persona.PER_ID.ToString());
                }
            }
            else
            {
                comboUnidad.Enabled      = false;
                ComboArea.Enabled        = false;
                comboRelacionLab.Enabled = false;
                comboCargo.Enabled       = false;
                inFechaStart.Enabled     = false;
                inFechaEnd.Enabled       = false;

                search_res.InnerHtml     = "No se encontro funcionario";
                puestoActual.InnerHtml   = "Puesto Actual: Ninguno";
                current_persona_id.Value = "dcm";
                current_cargo_id.Value   = "dcm";
                HelperUtil.showNotifi("No se encontro funcionario");
            }
        }
        catch (Exception ex)
        {
            HelperUtil.showNotifi("No se encontro funcionario");
        }
    }
    private void fillData(int cargo_id)
    {
        try
        {
            var puesto = psvm.getCargoByID(cargo_id);
            if (puesto != null)
            {
                current_puesto_id.Value = puesto.CAR_ID.ToString();


                ViewDetail(true);
                fillPersonas();
                //puesto detall
                puesto.SCPM_AREASReference.Load();
                puesto.SCPM_AREAS.SCPM_UNIDADReference.Load();
                puesto.SCPM_DENOMINACIONESReference.Load();

                unidadLabel.InnerHtml       = puesto.SCPM_AREAS.SCPM_UNIDAD.UNI_NOM;
                areaLabel.InnerHtml         = puesto.SCPM_AREAS.ARE_NOM;
                cargoLabel.InnerHtml        = puesto.CAR_NOM;
                denominacionLabel.InnerHtml = puesto.SCPM_DENOMINACIONES.DEN_NOM;



                //puesto funcionario
                puesto.SCPM_PUESTO_HIST.Load();
                SCPM_PUESTO_HIST lastCargo = puesto.SCPM_PUESTO_HIST.Count > 0 ? puesto.SCPM_PUESTO_HIST.OrderByDescending(c => c.PST_HIS_FEC_INI).FirstOrDefault() : puesto.SCPM_PUESTO_HIST.FirstOrDefault();
                if (lastCargo != null && (lastCargo.PST_HIS_FEC_FIN == null || DateTime.Now.CompareTo(lastCargo.PST_HIS_FEC_FIN) <= 0))
                {//cargo tiene un funcionario actualmente
                    lastCargo.SCPM_PERSONALESReference.Load();
                    SCPM_PERSONALES persona = lastCargo.SCPM_PERSONALES;
                    personaLabel.InnerHtml = String.Format("{0} {1} {2} {3}", persona.PER_APE_PAT, persona.PER_APE_MAT, persona.PER_NOM1, persona.PER_NOM2);

                    HelperUtil.showNotifi("Cargo ocupado<br/>" + personaLabel.InnerHtml);

                    lastCargo.SCPM_RELACIONES_LABORALESReference.Load();
                    relLabLabel.InnerHtml = lastCargo.SCPM_RELACIONES_LABORALES.REL_LAB_NOM;

                    current_persona_id.Value = persona.PER_ID.ToString();;
                }
                else
                {//cargo no ocupado
                    HelperUtil.showNotifi("Cargo no ocupado");
                    relLabLabel.InnerHtml    = "ninguno";
                    personaLabel.InnerHtml   = "ninguno";
                    current_persona_id.Value = "dcm";
                }
                //puesto subrogado/encargo
                puesto.SCPM_SUBROGA_HIST.Load();
                var q = puesto.SCPM_SUBROGA_HIST.ToList();
                SCPM_SUBROGA_HIST lastSugroga = q.Count > 0 ? q.OrderByDescending(c => c.SUB_HIS_FEC_INI).FirstOrDefault() : q.FirstOrDefault();
                if (lastSugroga != null && (lastSugroga.SUB_HIS_FEC_FIN == null || DateTime.Now.CompareTo(lastSugroga.SUB_HIS_FEC_FIN) <= 0))
                {//puesto esta subrogado o encargado actualmente
                    combo_tipo.SelectedValue = lastSugroga.SUB_HIS_IS_ENCARGO.Value ? "2" : "1";
                    lastSugroga.SCPM_PERSONALESReference.Load();
                    comboPersona.SelectedValue = lastSugroga.SCPM_PERSONALES.PER_ID.ToString();

                    HelperUtil.showNotifi("Cargo actualmente " + (lastSugroga.SUB_HIS_IS_ENCARGO.Value ? "Encargado" : "Subrogado"));

                    current_subroga_id.Value  = lastSugroga.SCPM_PERSONALES.PER_ID.ToString();
                    current_tipo_id.Value     = lastSugroga.SUB_HIS_IS_ENCARGO.Value ? "2" : "1";
                    sub_hist_id.Value         = lastSugroga.SUB_HIS_ID.ToString();
                    inFechaStart.Text         = lastSugroga.SUB_HIS_FEC_INI.Value.ToString("yyyy-MM-dd");
                    inFechaEnd.Text           = (lastSugroga.SUB_HIS_FEC_FIN == null ? "" : lastSugroga.SUB_HIS_FEC_FIN.Value.ToString("yyyy-MM-dd"));
                    subrogaPerLabel.InnerHtml = String.Format("{0} {1} {2} {3}", lastSugroga.SCPM_PERSONALES.PER_APE_PAT, lastSugroga.SCPM_PERSONALES.PER_APE_MAT, lastSugroga.SCPM_PERSONALES.PER_NOM1, lastSugroga.SCPM_PERSONALES.PER_NOM2);
                }
                else
                {//puesto no encargado subrogado
                    current_subroga_id.Value  = "dcm";
                    sub_hist_id.Value         = "dcm";
                    subrogaPerLabel.InnerHtml = "ninguno";
                    current_tipo_id.Value     = "dcm";
                    inFechaStart.Text         = DateTime.Now.ToString("yyyy-MM-dd");

                    HelperUtil.showNotifi("Puesto no subrogado");
                }
            }
            else
            {
                ViewDetail(false);
                HelperUtil.showNotifi("Puesto no encontrado");
                current_puesto_id.Value = "dcm";
            }
        }
        catch (Exception ex)
        {
            ViewDetail(false);
            HelperUtil.showNotifi("Error: Puesto no encontrado");
            current_subroga_id.Value  = "dcm";
            sub_hist_id.Value         = "dcm";
            subrogaPerLabel.InnerHtml = "ninguno";
            current_tipo_id.Value     = "dcm";
            inFechaStart.Text         = DateTime.Now.ToString("yyyy-MM-dd");
        }
    }
Example #7
0
 public void AddToSCPM_PUESTO_HIST(SCPM_PUESTO_HIST sCPM_PUESTO_HIST)
 {
     base.AddObject("SCPM_PUESTO_HIST", sCPM_PUESTO_HIST);
 }
Example #8
0
 public static SCPM_PUESTO_HIST CreateSCPM_PUESTO_HIST(decimal pST_HIS_ID)
 {
     SCPM_PUESTO_HIST sCPM_PUESTO_HIST = new SCPM_PUESTO_HIST();
     sCPM_PUESTO_HIST.PST_HIS_ID = pST_HIS_ID;
     return sCPM_PUESTO_HIST;
 }
Example #9
0
    public JefeModel getJefeOfAreaId(int area_cod, bool searchJefeUnidad)
    {
        SCPM_AREAS area = (from a in db.SCPM_AREAS where a.ARE_COD == area_cod select a).FirstOrDefault();

        area.SCPM_UNIDADReference.Load();
        SCPM_UNIDAD unidad = area.SCPM_UNIDAD;

        //determino si busco un cargo q sea jefe de undad o area
        List <String> cargo_jefe_nombre;
        string        jefe_tipo;

        if (area.ARE_NOM.Equals(unidad.UNI_NOM, StringComparison.InvariantCultureIgnoreCase) || searchJefeUnidad)
        {//si el nombre del area es igual al nombre de la unidad, busco al jefe de la unidad
            cargo_jefe_nombre = HelperUtil.cargoJefeUnidad.Split(',').ToList();
            jefe_tipo         = "unidad";
        }
        else
        {//si el nombre del area distinto al nombre de la unidad, busco al jefe del area
            cargo_jefe_nombre = HelperUtil.cargoJefeArea.Split(',').ToList();
            jefe_tipo         = "area";
        }

        //obtengo los cargos q posee esta area, y cojo solo el q tiene el nombre de cargo jefe buscado (determinado en el paso anterior)
        area.SCPM_CARGOS.Load();
        SCPM_CARGOS cargo_jefe = (from c in area.SCPM_CARGOS where cargo_jefe_nombre.Contains(c.CAR_NOM.ToUpper()) select c).FirstOrDefault();

        if (cargo_jefe == null)
        {
            HelperUtil.showNotifi(String.Format("debe crear el cargo de {0} en esta {1}",
                                                String.Join(";", cargo_jefe_nombre.ToArray()),
                                                jefe_tipo));
            return(new JefeModel()
            {
                Cargo = String.Join(",", cargo_jefe_nombre.ToArray()),
                Nombre = "ninguno, cargo no creado"
            });;
        }
        //traigo el historial de ese cargo de jefe especifico
        cargo_jefe.SCPM_PUESTO_HIST.Load();
        SCPM_PUESTO_HIST lastCargo = cargo_jefe.SCPM_PUESTO_HIST.OrderByDescending(c => c.PST_HIS_FEC_INI).FirstOrDefault();

        if (lastCargo != null && (lastCargo.PST_HIS_FEC_FIN == null || DateTime.Now.CompareTo(lastCargo.PST_HIS_FEC_FIN) <= 0))
        {//el cargo esta actualmente ocupado, tiene jefe
            lastCargo.SCPM_PERSONALESReference.Load();
            SCPM_PERSONALES persona = lastCargo.SCPM_PERSONALES;
            return(new JefeModel()
            {
                Cargo = cargo_jefe.CAR_NOM,
                Nombre = String.Format("{0} {1} {2} {3}", persona.PER_APE_PAT, persona.PER_APE_MAT, persona.PER_NOM1, persona.PER_NOM2)
            });
        }
        else
        {//no tiene jefe
            HelperUtil.showNotifi(jefe_tipo + " sin " + cargo_jefe.CAR_NOM);
            return(new JefeModel()
            {
                Cargo = cargo_jefe.CAR_NOM,
                Nombre = "ninguno"
            });
        }
    }
Example #10
0
    private bool isRangoFechaCargoValid(List <SCPM_PUESTO_HIST> historial_cargos_persona, List <SCPM_PUESTO_HIST> historial_cargos_cargo_id, DateTime startB, DateTime?endB, SCPM_PUESTO_HIST lastCargo)
    {
        foreach (var item in historial_cargos_persona)
        {
            if (lastCargo == null || item.PST_HIS_ID != lastCargo.PST_HIS_ID)
            {
                var startA = item.PST_HIS_FEC_INI.Value;
                var endA   = item.PST_HIS_FEC_FIN;
                if (endA == null && endB == null)
                {
                    if (startA > startB)
                    {
                        endA = startA;
                        endB = startA;
                    }
                    else
                    {
                        endA = startB;
                        endB = startB;
                    }
                }
                if ((startA <= endB) && (endA >= startB))
                {
                    HelperUtil.showNotifi("persona ya posee un cargo en esas fechas");
                    return(false);
                }
            }
        }

        foreach (var item in historial_cargos_cargo_id)
        {
            if (lastCargo == null || item.PST_HIS_ID != lastCargo.PST_HIS_ID)
            {
                var startA = item.PST_HIS_FEC_INI.Value;
                var endA   = item.PST_HIS_FEC_FIN;
                if (endA == null && endB == null)
                {
                    if (startA > startB)
                    {
                        endA = startA;
                        endB = startA;
                    }
                    else
                    {
                        endA = startB;
                        endB = startB;
                    }
                }
                if ((startA <= endB) && (endA >= startB))
                {
                    HelperUtil.showNotifi("cargo ya posee un funcionario en esas fechas");
                    return(false);
                }
            }
        }
        return(true);
    }
Example #11
0
    public bool addCargoHistorial(SCPM_PUESTO_HIST historial, int per_id, int cargo_id, int rel_lab_id)
    {
        //compruebo si persona ya tiene un cargo activo
        var historial_cargos_persona  = (from h in db.SCPM_PUESTO_HIST.Include("SCPM_PERSONALES") where h.SCPM_PERSONALES.PER_ID == per_id select h).ToList();
        SCPM_PUESTO_HIST currentCargo = historial_cargos_persona.Count > 0 ? historial_cargos_persona.OrderByDescending(c => c.PST_HIS_FEC_INI).FirstOrDefault() : historial_cargos_persona.FirstOrDefault();

        if (currentCargo != null)
        {
            currentCargo.SCPM_CARGOSReference.Load();
            currentCargo.SCPM_RELACIONES_LABORALESReference.Load();
        }

        if (currentCargo != null && currentCargo.SCPM_CARGOS.CAR_ID != cargo_id && (currentCargo.PST_HIS_FEC_FIN == null || DateTime.Now.CompareTo(currentCargo.PST_HIS_FEC_FIN) <= 0))
        {
            HelperUtil.showNotifi("persona ya tiene un cargo activo, finalicelo para poder asignarlo a otro cargo");
            return(false);
        }

        //
        var historial_cargos_cargo_id = (from h in db.SCPM_PUESTO_HIST.Include("SCPM_CARGOS") where h.SCPM_CARGOS.CAR_ID == cargo_id select h).ToList();
        var nowTime = DateTime.Now;

        SCPM_PUESTO_HIST lastCargo = historial_cargos_cargo_id.Count > 0 ? historial_cargos_cargo_id.OrderByDescending(c => c.PST_HIS_FEC_INI).FirstOrDefault() : historial_cargos_cargo_id.FirstOrDefault();

        if (lastCargo != null && (lastCargo.PST_HIS_FEC_FIN == null || DateTime.Now.CompareTo(lastCargo.PST_HIS_FEC_FIN) <= 0))
        {//el cargo esta actualmente ocupado
            lastCargo.SCPM_PERSONALESReference.Load();
            lastCargo.SCPM_RELACIONES_LABORALESReference.Load();

            if (lastCargo.SCPM_PERSONALES.PER_ID != per_id)
            {
                //el cargo esta ocupado por otra persona
                HelperUtil.showNotifi("el cargo esta ocupado por otra persona");
                return(false);
            }
            else
            if (lastCargo.SCPM_RELACIONES_LABORALES.REL_LAB_ID == rel_lab_id)
            {    // el cargo esta ocupado por la misma persona y relacion laboral es la misma solo se actualizara sus campos
                //fecha fin no puede ser menor a fecha inicio
                if (historial.PST_HIS_FEC_FIN != null && historial.PST_HIS_FEC_INI.Value.CompareTo(historial.PST_HIS_FEC_FIN) > 0)
                {
                    HelperUtil.showNotifi("fecha inicio no puede ser mayor que final");
                    return(false);
                }
                //checa si rango de fecha no overlap con alguno del historial del cargo o la persona
                if (!isRangoFechaCargoValid(historial_cargos_persona, historial_cargos_cargo_id, historial.PST_HIS_FEC_INI.Value, historial.PST_HIS_FEC_FIN, lastCargo))
                {
                    return(false);
                }
                lastCargo.PST_HIS_FEC_FIN = historial.PST_HIS_FEC_FIN;
                lastCargo.PST_HIS_FEC_INI = historial.PST_HIS_FEC_INI;
                db.SaveChanges();
                HelperUtil.showNotifi("Solo fecha final actualizada");
                return(true);
            }
            else
            {     // el cargo esta ocupado por la misma persona y relacion laboral no es la misma
                if (historial.PST_HIS_FEC_FIN == null || historial.PST_HIS_FEC_FIN.Value.CompareTo(nowTime) > 0)
                { //quiere cambiar de relacion laboral al cargo que actualmente tiene, se finaliza este historial y añade otro con la nueva relacion laboral
                    //entonces fecha inicio del nuevo historial debe ser mayor a fecha inicio del cargo actual
                    if (historial.PST_HIS_FEC_INI.Value.CompareTo(lastCargo.PST_HIS_FEC_INI.Value) < 0)
                    {
                        HelperUtil.showNotifi("Fecha inico de la nueva relacion laboral debe ser mayor a fecha inicio de la actual relacion laboral.");
                        return(false);
                    }
                    //fecha fin no puede ser menor a fecha inicio
                    if (historial.PST_HIS_FEC_FIN != null && nowTime.CompareTo(historial.PST_HIS_FEC_FIN) > 0)
                    {
                        HelperUtil.showNotifi("fecha inicio no puede ser mayor que final");
                        return(false);
                    }
                    lastCargo.PST_HIS_FEC_FIN = nowTime;
                    historial.PST_HIS_FEC_INI = nowTime;
                    db.SaveChanges();
                    HelperUtil.showNotifi("Relacion laboral anterior finalizada.");
                }
                else
                {    //el cargo esta actualmente ocupado se desea añadir un historial antiguo
                    //entonces fecha fin debe ser menor a fecha inicio del cargo actual
                    if (historial.PST_HIS_FEC_FIN.Value.CompareTo(lastCargo.PST_HIS_FEC_INI) > 0)
                    {
                        HelperUtil.showNotifi("Intenta añadir un historial antiguo. fecha final debe ser menor a fecha inicial del cargo actual");
                        return(false);
                    }
                    //fecha fin no puede ser menor a fecha inicio
                    if (historial.PST_HIS_FEC_INI.Value.CompareTo(historial.PST_HIS_FEC_FIN) > 0)
                    {
                        HelperUtil.showNotifi("fecha inicio no puede ser mayor que final");
                        return(false);
                    }
                    //checa si rango de fecha no overlap con alguno del historial del cargo o la persona
                    if (!isRangoFechaCargoValid(historial_cargos_persona, historial_cargos_cargo_id, historial.PST_HIS_FEC_INI.Value, historial.PST_HIS_FEC_FIN, null))
                    {
                        return(false);
                    }
                }

                //add new relacion
                historial.SCPM_PERSONALES           = getPersonasByID(per_id).ToList().First();
                historial.SCPM_RELACIONES_LABORALES = getRalacionLabByID(rel_lab_id);
                historial.SCPM_CARGOS = getCargoByID(cargo_id);
                db.AddToSCPM_PUESTO_HIST(historial);
                //save
                db.SaveChanges();
                HelperUtil.showNotifi("Nueva Relacion laboral añadida.");
                return(true);
            }
        }
        else
        {//el cargo no esta ocupado actualmente, se procede a añadir el historial nuevo
            //fecha fin no puede ser menor a fecha inicio
            if (historial.PST_HIS_FEC_FIN != null && historial.PST_HIS_FEC_INI.Value.CompareTo(historial.PST_HIS_FEC_FIN) > 0)
            {
                HelperUtil.showNotifi("fecha inicio no puede ser mayor que final");
                return(false);
            }
            //checa si rango de fecha no overlap con alguno del historial del cargo o la persona
            if (!isRangoFechaCargoValid(historial_cargos_persona, historial_cargos_cargo_id, historial.PST_HIS_FEC_INI.Value, historial.PST_HIS_FEC_FIN, null))
            {
                return(false);
            }
            //add new relacion
            historial.SCPM_PERSONALES           = getPersonasByID(per_id).ToList().First();
            historial.SCPM_RELACIONES_LABORALES = getRalacionLabByID(rel_lab_id);
            historial.SCPM_CARGOS = getCargoByID(cargo_id);
            db.AddToSCPM_PUESTO_HIST(historial);
            //save
            db.SaveChanges();
            HelperUtil.showNotifi("Nueva Relacion laboral añadida.");
            return(true);
        }
    }