/// <summary> /// <para> /// Da de alta el comercial pasado por parámetro <paramref name="commercialRequestModel"/>. /// </para> /// </summary> /// <param name="commercialRequestModel">Datos del comercial que debe ser dado de alta.</param> /// <returns> /// Modelo <see cref="PostBOCommercialsResponseModel"/> con los datos de la respuesta. /// </returns> public PostBOCommercialsResponseModel CreateCommercial(PostBOCommercialsRequestModel commercialRequestModel) { PostBOCommercialsResponseModel result = new PostBOCommercialsResponseModel { Status = ResultStatus.ERROR }; IDbContextTransaction dbTransaction = null; try { var context = _commercialRepository.GetContext(); using (dbTransaction = context.Database.BeginTransaction()) { // Generate random pass commercialRequestModel.CommercialPassword = (new Random().Next(10000000, 100000000)).ToString(); var toInsert = new Commercials() { Name = commercialRequestModel.CommercialName, Email = commercialRequestModel.CommercialEmail, PBXPhoneNumber = commercialRequestModel.PBXPhoneNumber, MobilePhoneNumber = commercialRequestModel.MobilePhoneNumber, Active = commercialRequestModel.Active, Password = _securityService.HashData(commercialRequestModel.CommercialPassword), Peer = GetPeer(), SiebelId = commercialRequestModel.SiebelId, PasswordChangeRequired = true, AlternativeCommercials = new List <AlternativeCommercials>() }; // Se da de alta en BD al nuevo comercial _commercialRepository.Insert(toInsert); _commercialRepository.Save(); foreach (AlternativeCommercialModel c in commercialRequestModel.Alternatives) { var alter = _commercialRepository.GetById(c.Commercial.CommercialId); toInsert.AlternativeCommercials.Add(new AlternativeCommercials() { CommercialId = toInsert.Id, AlternativeCommercialId = c.Commercial.CommercialId, Order = c.Order }); } // Se agregan los comerciales alternativos al nuevo comercial _commercialRepository.Save(); // Conexión a PBX PbxConnection pbxConnection = null; if (_pbxConnect) { pbxConnection = new PbxConnection(_pbxServer, _pbxUser, _pbxPwd, out string pbxMsg); // validacion instancia PBX if (pbxConnection == null) { dbTransaction.Rollback(); result.Status = ResultStatus.EXTERNAL_SERVICE_ERROR; result.Message = "[BOCommercialsService-CreateCommercial] Could not instantiate PBX"; return(result); } // validacion PBX inicializada if (!pbxConnection.IsInitialized()) { dbTransaction.Rollback(); result.Status = ResultStatus.CANNOT_CONNECT_TO_PBX; result.Message = "[BOCommercialsService-CreateCommercial] " + pbxMsg; return(result); } // petición a la PBX try { pbxConnection.New(toInsert.Peer, toInsert.Name, toInsert.Password, () => { }); } catch (AmiException ex) { dbTransaction.Rollback(); // Marchelo // No estoy de acuerdo con retonar este error (lo correcto es utilizar el "catch (AmiException amiEx)" mas abajo) // Simplemente lo dejo por consistencia con la capa HTTP. result.Status = ResultStatus.PEER_ALREADY_EXIST_IN_PBX; result.Message = "[BOCommercialsService-CreateCommercial] " + ex.Message; return(result); } } result.Status = ResultStatus.SUCCESS; result.Name = commercialRequestModel.CommercialName; result.Email = commercialRequestModel.CommercialEmail; result.Password = commercialRequestModel.CommercialPassword; result.Peer = toInsert.Peer; dbTransaction.Commit(); return(result); } } catch (DbUpdateException updEx) { if (dbTransaction != null) { dbTransaction.Rollback(); } SqlException sqlEx = updEx.GetBaseException() as SqlException; if (sqlEx != null) { switch (sqlEx.Number) { case 515: // NOT NULL values // Determino nombre de la columna que no acepta valor NULL // EJ: "Cannot insert the value NULL into column 'SiebelId', table 'InConcert.dbo.Commercials'." int indexStart = sqlEx.Message.IndexOf("'", 0) + 1; int indexEnd = sqlEx.Message.IndexOf("'", indexStart); string columName = sqlEx.Message[indexStart..indexEnd];
/// <summary> /// <para> /// Elimina el comercial cuyo campo 'Id' coincide con el id indicado por el parametro <paramref id="intId"/>. /// </para> /// </summary> /// <param name="id">Identificador del comercial.</param> /// <returns> /// Modelo <see cref="DeleteBOCommercialsResponseModel"/> con los datos de la respuesta. /// </returns> public StatusResponseModel DeleteCommercial(int id) { StatusResponseModel result = new StatusResponseModel { Status = ResultStatus.ERROR }; IDbContextTransaction dbTransaction = null; try { var context = _commercialRepository.GetContext(); using (dbTransaction = context.Database.BeginTransaction()) { // Issue ICCB-735 Sessions session = _sessionRepository.SingleOrDefault(s => s.CommercialId == id); if (session != null) { _sessionRepository.Delete(session); _sessionRepository.Save(); } Commercials toDelete = _commercialRepository.SingleOrDefault(c => c.Id == id); if (toDelete == null) { result.Status = ResultStatus.NOT_FOUND; result.Message = string.Format("No records found for the commercial (id:{0}).", id); return(result); } RemoveThisComercialAsAlternative(id); RemoveAlternativesOfThisComercial(id); _commercialRepository.Delete(toDelete); _commercialRepository.Save(); // Conexión a PBX PbxConnection pbxConnection = null; if (_pbxConnect) { pbxConnection = new PbxConnection(_pbxServer, _pbxUser, _pbxPwd, out string pbxMsg); // validacion instancia PBX if (pbxConnection == null) { dbTransaction.Rollback(); result.Status = ResultStatus.EXTERNAL_SERVICE_ERROR; result.Message = "[BOCommercialsService-UpdateCommercial] Could not instantiate PBX"; return(result); } // validacion PBX inicializada if (!pbxConnection.IsInitialized()) { dbTransaction.Rollback(); result.Status = ResultStatus.CANNOT_CONNECT_TO_PBX; result.Message = pbxMsg; return(result); } // petición Delete a la PBX pbxConnection.Delete(toDelete.Peer, () => { }); } dbTransaction.Commit(); result.Status = ResultStatus.SUCCESS; return(result); } } catch (AmiException amiEx) { if (dbTransaction != null) { dbTransaction.Rollback(); } result.Status = ResultStatus.EXTERNAL_SERVICE_ERROR; result.Message = "[BOCommercialsService-DeleteCommercial-AmiException] " + amiEx.Message; return(result); } catch (Exception e) { if (dbTransaction != null) { dbTransaction.Rollback(); } result.Status = ResultStatus.ERROR; result.Message = "[BOCommercialsService-DeleteCommercial-Exception] " + e.Message; return(result); } }