public static string UpdateProtocol(ProtocolBE protocolBE, List <ProtocolComponentDto> ListProtCompCreate, List <ProtocolComponentDto> ListProtCompUpdate, int userId, int nodeId)
        {
            try
            {
                DatabaseContext cnx = new DatabaseContext();

                var objProtocol = cnx.Protocol.Where(x => x.v_ProtocolId == protocolBE.v_ProtocolId).FirstOrDefault();

                objProtocol.v_Name = protocolBE.v_Name;
                objProtocol.v_GroupOccupationId      = protocolBE.v_GroupOccupationId;
                objProtocol.v_CustomerOrganizationId = protocolBE.v_CustomerOrganizationId;
                objProtocol.v_CustomerLocationId     = protocolBE.v_CustomerLocationId;
                objProtocol.i_MasterServiceTypeId    = protocolBE.i_MasterServiceTypeId;
                objProtocol.v_EmployerOrganizationId = protocolBE.v_EmployerOrganizationId;
                objProtocol.v_EmployerLocationId     = protocolBE.v_EmployerLocationId;
                objProtocol.i_MasterServiceId        = protocolBE.i_MasterServiceId;
                objProtocol.v_WorkingOrganizationId  = protocolBE.v_WorkingOrganizationId;
                objProtocol.v_WorkingLocationId      = protocolBE.v_WorkingLocationId;
                objProtocol.v_CostCenter             = protocolBE.v_CostCenter;
                objProtocol.i_EsoTypeId        = protocolBE.i_EsoTypeId;
                objProtocol.i_IsActive         = protocolBE.i_IsActive;
                objProtocol.r_PriceFactor      = protocolBE.r_PriceFactor;
                objProtocol.r_HospitalBedPrice = protocolBE.r_HospitalBedPrice;
                objProtocol.r_DiscountExam     = protocolBE.r_DiscountExam;
                objProtocol.r_MedicineDiscount = protocolBE.r_MedicineDiscount;
                objProtocol.i_UpdateUserId     = userId;
                objProtocol.d_UpdateDate       = DateTime.Now;

                cnx.SaveChanges();
                if (ListProtCompCreate.Count > 0)
                {
                    var result = ProtocolComponentDal.AddProtocolComponent(ListProtCompCreate, objProtocol.v_ProtocolId, userId, nodeId);
                    if (!result)
                    {
                        return(null);
                    }
                }

                if (ListProtCompUpdate.Count > 0)
                {
                    var result = ProtocolComponentDal.UpdateProtocolComponent(ListProtCompUpdate, userId);
                    if (!result)
                    {
                        return(null);
                    }
                }


                return(objProtocol.v_ProtocolId);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        public string ReturnOrDuplicateProtocol(ServiceCustom data, int nodeId, int userId, List <ProtocolComponentCustom> ListProtocolComponent)
        {
            try
            {
                if (ListProtocolComponent == null)
                {
                    return(null);
                }

                var  id  = data.DataProtocol.EmpresaEmpleadora.Split('|');
                var  id1 = data.DataProtocol.EmpresaCliente.Split('|');
                var  id2 = data.DataProtocol.EmpresaTrabajo.Split('|');
                var  masterServiceTypeId = data.DataProtocol.i_MasterServiceTypeId;
                var  masterServiceId     = data.DataProtocol.i_MasterServiceId;
                var  groupOccupationName = data.DataProtocol.Geso;
                var  esoTypeId           = data.DataProtocol.i_EsoTypeId;
                bool ExisteProtocolo     = ProtocolDal.ExisteProtocoloPropuestoSegunLaEmpresa(id[0], masterServiceTypeId, masterServiceId, groupOccupationName, esoTypeId);
                if (!ExisteProtocolo)
                {
                    ProtocolBE _ProtocolBE = new ProtocolBE();
                    var        sufProtocol = data.DataProtocol.EmpresaEmpleadoraName.Split('/');
                    _ProtocolBE.v_Name = data.DataProtocol.ProtocolName + " " + sufProtocol[0].ToString();
                    _ProtocolBE.v_EmployerOrganizationId = id[0];
                    _ProtocolBE.v_EmployerLocationId     = id[1];
                    _ProtocolBE.i_EsoTypeId = data.DataProtocol.i_EsoTypeId;
                    //obtener GESO
                    var gesoId = new OrganizationDal().GetGroupOcupation(id[1], groupOccupationName);
                    _ProtocolBE.v_GroupOccupationId      = gesoId;
                    _ProtocolBE.v_CustomerOrganizationId = id1[0];
                    _ProtocolBE.v_CustomerLocationId     = id1[1];
                    _ProtocolBE.v_WorkingOrganizationId  = id2[0];
                    _ProtocolBE.v_WorkingLocationId      = data.DataProtocol.EmpresaEmpleadora != "-1" ? id2[1] : "-1";
                    _ProtocolBE.i_MasterServiceId        = masterServiceId;
                    _ProtocolBE.v_CostCenter             = string.Empty;
                    _ProtocolBE.i_MasterServiceTypeId    = masterServiceTypeId;
                    _ProtocolBE.i_HasVigency             = 1;
                    _ProtocolBE.i_ValidInDays            = null;
                    _ProtocolBE.i_IsActive       = 1;
                    _ProtocolBE.v_NombreVendedor = string.Empty;

                    List <ProtocolComponentDto> ListProtocolComponentDto = new List <ProtocolComponentDto>();
                    foreach (var objProtCom in ListProtocolComponent)
                    {
                        ProtocolComponentDto _ProtocolComponentDto = new ProtocolComponentDto();
                        _ProtocolComponentDto.v_ComponentId      = objProtCom.ComponentId;
                        _ProtocolComponentDto.r_Price            = objProtCom.Price;
                        _ProtocolComponentDto.i_OperatorId       = objProtCom.OperatorId;
                        _ProtocolComponentDto.i_Age              = objProtCom.Age;
                        _ProtocolComponentDto.i_GenderId         = objProtCom.GenderId;
                        _ProtocolComponentDto.i_IsAdditional     = objProtCom.IsAdditional;
                        _ProtocolComponentDto.i_IsConditionalId  = objProtCom.IsConditionalId;
                        _ProtocolComponentDto.i_GrupoEtarioId    = objProtCom.GrupoEtarioId;
                        _ProtocolComponentDto.i_IsConditionalIMC = objProtCom.IsConditionalIMC;
                        _ProtocolComponentDto.r_Imc              = objProtCom.Imc;
                        ListProtocolComponentDto.Add(_ProtocolComponentDto);
                    }
                    string protocolId = ProtocolDal.AddProtocol(_ProtocolBE, ListProtocolComponentDto, nodeId, userId);
                    if (protocolId == null)
                    {
                        return(null);
                    }

                    var ListUser            = ProtocolDal.GetSystemUserSigesoft();
                    var extUserWithCustomer = ListUser.FindAll(p => p.v_SystemUserByOrganizationId == id1[0]).ToList();
                    var extUserWithEmployer = ListUser.FindAll(p => p.v_SystemUserByOrganizationId == id[0]).ToList();
                    var extUserWithWorking  = ListUser.FindAll(p => p.v_SystemUserByOrganizationId == id2[0]).ToList();

                    foreach (var extUs in extUserWithCustomer)
                    {
                        var ListUserExter = ProtocolDal.GetProtocolSystemUser(extUs.i_SystemUserId);
                        var list          = new List <ProtocolSystemUserBE>();
                        foreach (var perm in ListUserExter)
                        {
                            var oProtocolSystemUserBEo = new ProtocolSystemUserBE();
                            oProtocolSystemUserBEo.i_SystemUserId           = extUs.i_SystemUserId;
                            oProtocolSystemUserBEo.v_ProtocolId             = protocolId;
                            oProtocolSystemUserBEo.i_ApplicationHierarchyId = perm.i_ApplicationHierarchyId;
                            list.Add(oProtocolSystemUserBEo);
                        }
                        bool resultUs = ProtocolDal.AddProtocolSystemUser(list, userId, nodeId);
                        if (!resultUs)
                        {
                            return(null);
                        }
                    }
                    foreach (var extUs in extUserWithEmployer)
                    {
                        var ListUserExter = ProtocolDal.GetProtocolSystemUser(extUs.i_SystemUserId);
                        var list          = new List <ProtocolSystemUserBE>();
                        foreach (var perm in ListUserExter)
                        {
                            var oProtocolSystemUserBEo = new ProtocolSystemUserBE();
                            oProtocolSystemUserBEo.i_SystemUserId           = extUs.i_SystemUserId;
                            oProtocolSystemUserBEo.v_ProtocolId             = protocolId;
                            oProtocolSystemUserBEo.i_ApplicationHierarchyId = perm.i_ApplicationHierarchyId;
                            list.Add(oProtocolSystemUserBEo);
                        }
                        bool resultUs = ProtocolDal.AddProtocolSystemUser(list, userId, nodeId);
                        if (!resultUs)
                        {
                            return(null);
                        }
                    }
                    foreach (var extUs in extUserWithWorking)
                    {
                        var ListUserExter = ProtocolDal.GetProtocolSystemUser(extUs.i_SystemUserId);
                        var list          = new List <ProtocolSystemUserBE>();
                        foreach (var perm in ListUserExter)
                        {
                            var oProtocolSystemUserBEo = new ProtocolSystemUserBE();
                            oProtocolSystemUserBEo.i_SystemUserId           = extUs.i_SystemUserId;
                            oProtocolSystemUserBEo.v_ProtocolId             = protocolId;
                            oProtocolSystemUserBEo.i_ApplicationHierarchyId = perm.i_ApplicationHierarchyId;
                            list.Add(oProtocolSystemUserBEo);
                        }
                        bool resultUs = ProtocolDal.AddProtocolSystemUser(list, userId, nodeId);
                        if (!resultUs)
                        {
                            return(null);
                        }
                    }
                    return(protocolId);
                }
                else
                {
                    return(data.ProtocolId);
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        public static MessageCustom SaveProtocols(ProtocolList data, int userId, int nodeId)
        {
            MessageCustom msg = new MessageCustom();

            try
            {
                using (var ts = new TransactionScope())
                {
                    ProtocolBE protocolEntity = new ProtocolBE();
                    protocolEntity.v_ProtocolId             = data.v_ProtocolId;
                    protocolEntity.v_Name                   = data.v_Name;
                    protocolEntity.v_GroupOccupationId      = data.v_Geso;
                    protocolEntity.v_CustomerOrganizationId = data.v_CustomerOrganizationId.Split('|')[0];
                    protocolEntity.v_CustomerLocationId     = data.v_CustomerOrganizationId.Split('|')[1];
                    protocolEntity.i_MasterServiceTypeId    = data.i_ServiceTypeId;
                    protocolEntity.v_EmployerOrganizationId = data.v_IntermediaryOrganization.Split('|')[0];
                    protocolEntity.v_EmployerLocationId     = data.v_IntermediaryOrganization.Split('|')[1];
                    protocolEntity.i_MasterServiceId        = data.i_MasterServiceId;
                    protocolEntity.v_WorkingOrganizationId  = data.v_WorkingOrganizationId.Split('|')[0];
                    protocolEntity.v_WorkingLocationId      = data.v_WorkingOrganizationId.Split('|')[1];
                    protocolEntity.v_CostCenter             = data.v_CostCenter;
                    protocolEntity.i_EsoTypeId              = data.i_EsoTypeId;
                    protocolEntity.i_IsActive               = data.i_IsActive;
                    protocolEntity.i_HasVigency             = (int)SiNo.No;
                    protocolEntity.r_PriceFactor            = data.r_PriceFactor == null ? 0 : data.r_PriceFactor;
                    protocolEntity.r_MedicineDiscount       = data.r_MedicineDiscount == null ? 0 : data.r_MedicineDiscount;
                    protocolEntity.r_HospitalBedPrice       = data.r_HospitalBedPrice == null ? 0 : data.r_HospitalBedPrice;
                    protocolEntity.r_ClinicDiscount         = data.r_ClinicDiscount == null ? 0 : data.r_ClinicDiscount;
                    protocolEntity.r_DiscountExam           = data.r_DiscountExam == null ? 0 : data.r_DiscountExam;

                    List <ProtocolComponentDto> ListProtocolComponentCreate = new List <ProtocolComponentDto>();
                    List <ProtocolComponentDto> ListProtocolComponentUpdate = new List <ProtocolComponentDto>();

                    if (data.ListComponents != null)
                    {
                        foreach (var obj in data.ListComponents)
                        {
                            ProtocolComponentDto objProtComp = new ProtocolComponentDto();
                            objProtComp.v_ProtocolComponentId = obj.v_ProtocolComponentId;
                            objProtComp.v_ComponentId         = obj.v_ComponentId;
                            objProtComp.r_Price               = obj.r_Price;
                            objProtComp.i_OperatorId          = obj.i_OperadorId;
                            objProtComp.i_Age                 = obj.i_Edad;
                            objProtComp.i_GenderId            = obj.i_GenderId;
                            objProtComp.i_GrupoEtarioId       = obj.i_GrupoEtario;
                            objProtComp.i_IsConditionalId     = obj.i_IsConditional;
                            objProtComp.i_IsConditionalIMC    = obj.i_IsIMC;
                            objProtComp.r_Imc                 = obj.r_ValueIMC;
                            objProtComp.i_IsAdditional        = obj.i_IsAditional;
                            objProtComp.v_ProtocolComponentId = obj.v_ProtocolComponentId;
                            if (obj.RecordStatus == (int)RecordStatus.Agregado && obj.RecordType == (int)RecordType.Temporal || obj.v_ProtocolComponentId == null)
                            {
                                ListProtocolComponentCreate.Add(objProtComp);
                            }
                            else if (obj.RecordStatus == (int)RecordStatus.Editado && obj.RecordType == (int)RecordType.NoTemporal || obj.v_ProtocolComponentId != null)
                            {
                                ListProtocolComponentUpdate.Add(objProtComp);
                            }
                        }
                    }


                    string protocolId = null;
                    if (data.v_ProtocolId == null)
                    {
                        protocolId = ProtocolDal.AddProtocol(protocolEntity, ListProtocolComponentCreate, nodeId, userId);
                        bool resultProtComp = ProtocolComponentDal.UpdateProtocolComponent(ListProtocolComponentUpdate, userId);
                        if (!resultProtComp)
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        protocolId = ProtocolDal.UpdateProtocol(protocolEntity, ListProtocolComponentCreate, ListProtocolComponentUpdate, userId, nodeId);
                    }
                    if (protocolId == null)
                    {
                        msg.Error   = true;
                        msg.Status  = (int)HttpStatusCode.Conflict;
                        msg.Message = "Sucedió un error al crear el protocolo, por favor vuelva intentar.";
                        throw new Exception("");
                    }
                    else
                    {
                        msg.Error   = false;
                        msg.Id      = protocolId;
                        msg.Status  = (int)HttpStatusCode.Created;
                        msg.Message = "El protocolo se creó correctamente.";
                    }
                    ts.Complete();
                }
                return(msg);
            }
            catch (Exception ex)
            {
                msg.Error   = true;
                msg.Status  = (int)HttpStatusCode.Conflict;
                msg.Message = "Sucedió un error al crear el protocolo, por favor vuelva intentar.";
                return(msg);
            }
        }