public IHttpActionResult RegistrarCheckOut(CitaBO modelo) { string mensaje = string.Empty; try { Guid userId = Guid.Empty; string crm_url_connection = string.Empty, crm_user = modelo.Usuario, crm_password = modelo.Password; crm_url_connection = ConfigurationManager.AppSettings["CRM_URL_CONNECTION"]; var connection = ToolsCRM.getService(crm_url_connection, crm_user, crm_password, out userId); if (connection != null) { Entity currentEntity = connection.Retrieve("appointment", modelo.Id, new ColumnSet(true)); if (currentEntity != null) { if (currentEntity.Attributes.Contains("hd_latitud_out")) { double existeLatitud = currentEntity.GetAttributeValue <double>("hd_latitud_out"); if (existeLatitud != 0) { return(Ok(mensaje)); } } bool realizaProceso = true; string tipoDeCita = currentEntity.FormattedValues["hd_tipo_seguimiento"]; #region Seguimiento if (!string.IsNullOrEmpty(tipoDeCita) && tipoDeCita.ToLower().Contains("seguimiento")) { if (currentEntity.Attributes.Contains("hd_distribuidorid")) { QueryExpression queryExpression = new QueryExpression("hd_matriz_seguimiento"); queryExpression.ColumnSet = new ColumnSet(true); queryExpression.Criteria.AddCondition("hd_citasid", ConditionOperator.Equal, modelo.Id); EntityCollection results = connection.RetrieveMultiple(queryExpression); if (results != null && results.Entities != null && results.Entities.Any()) { foreach (var aux in results.Entities) { bool tienePrioridad = aux.GetAttributeValue <bool>("hd_prioridad"); if (tienePrioridad) { if (!aux.Attributes.Contains("hd_punto_revisado")) { realizaProceso = false; mensaje = "Se deben revisar todos los puntos con prioridad para esta visita. Revisar la matriz de seguimiento."; } } } } } else { realizaProceso = false; mensaje = "La cita debe de tener un distribuidor seleccionado."; } } #endregion #region Prospeccion if (!string.IsNullOrEmpty(tipoDeCita) && tipoDeCita.ToLower().Contains("prospección")) { if (currentEntity.Attributes.Contains("hd_prospeccionid")) { EntityReference refProspeccion = currentEntity.GetAttributeValue <EntityReference>("hd_prospeccionid"); if (refProspeccion != null) { string fase = string.Empty, faseActual = string.Empty; bool checklistCompleto = false; Entity entityProspeccion = connection.Retrieve(refProspeccion.LogicalName, refProspeccion.Id, new ColumnSet(true)); if (entityProspeccion.Attributes.Contains("hd_fase")) { fase = entityProspeccion.FormattedValues["hd_fase"]; } if (entityProspeccion.Attributes.Contains("hd_fase_actual")) { faseActual = entityProspeccion.FormattedValues["hd_fase_actual"]; } if (entityProspeccion.Attributes.Contains("hd_checklist_completado")) { checklistCompleto = entityProspeccion.GetAttributeValue <bool>("hd_checklist_completado"); } if (!checklistCompleto) { if (fase.ToLower() != "cita reprogramada") { if (fase.ToLower() == faseActual.ToLower()) { realizaProceso = false; mensaje = "Para realizar check-out, debe cumplir con al menos una fase del proceso. En caso de no contar con la información, reprogramar la cita."; } } } } } } #endregion if (realizaProceso) { DateTime dtAux = new DateTime(modelo.year, modelo.month, modelo.day, modelo.hour, modelo.minute, 0); Entity entityToUpdate = new Entity("appointment"); entityToUpdate.Id = modelo.Id; entityToUpdate.Attributes = new AttributeCollection(); entityToUpdate.Attributes.Add("hd_fin_real", dtAux); entityToUpdate.Attributes.Add("hd_latitud_out", modelo.LatitudFin); entityToUpdate.Attributes.Add("hd_longitud_out", modelo.LongitudFin); connection.Update(entityToUpdate); } } } } catch (Exception ex) { mensaje = ex.Message; } return(Ok(mensaje)); }
public IHttpActionResult RegistrarCheckIn(CitaBO modelo) { string mensaje = string.Empty; try { Guid userId = Guid.Empty; string crm_url_connection = string.Empty, crm_user = modelo.Usuario, crm_password = modelo.Password; crm_url_connection = ConfigurationManager.AppSettings["CRM_URL_CONNECTION"]; var connection = ToolsCRM.getService(crm_url_connection, crm_user, crm_password, out userId); if (connection != null) { bool realizaProceso = true; Entity currentEntity = connection.Retrieve("appointment", modelo.Id, new ColumnSet(true)); if (currentEntity != null) { if (currentEntity.Attributes.Contains("hd_latitud_in")) { double existeLatitud = currentEntity.GetAttributeValue <double>("hd_latitud_in"); if (existeLatitud != 0) { if (currentEntity.Attributes.Contains("hd_validacion_check")) { int existeContador = currentEntity.GetAttributeValue <int>("hd_validacion_check"); existeContador = existeContador + 1; Entity entityToUpdate = new Entity("appointment"); entityToUpdate.Id = currentEntity.Id; entityToUpdate.Attributes = new AttributeCollection(); entityToUpdate.Attributes.Add("hd_validacion_check", existeContador); connection.Update(entityToUpdate); } else { int existeContador = 1; Entity entityToUpdate = new Entity("appointment"); entityToUpdate.Id = currentEntity.Id; entityToUpdate.Attributes = new AttributeCollection(); entityToUpdate.Attributes.Add("hd_validacion_check", existeContador); connection.Update(entityToUpdate); } return(Ok(mensaje)); } } var statuscode = currentEntity.GetAttributeValue <OptionSetValue>("statuscode"); //if (statuscode.Value == 100010002) if (statuscode.Value == 5) { #region cita programada string tipoDeCita = currentEntity.FormattedValues["hd_tipo_seguimiento"]; if (tipoDeCita.ToLower().Contains("prospección") && !currentEntity.Attributes.Contains("hd_prospeccionid")) { realizaProceso = false; mensaje = "La cita debe de tener prospección seleccionada."; } #region seguimiento y cliente final if (realizaProceso && (tipoDeCita.ToLower().Contains("cliente final") || tipoDeCita.ToLower().Contains("seguimiento"))) { bool existeRegistroDeLlamada = false; QueryExpression queryExpression2 = new QueryExpression("phonecall"); queryExpression2.ColumnSet = new ColumnSet(true); queryExpression2.Criteria.AddCondition("hd_citallamadaid", ConditionOperator.Equal, currentEntity.Id); EntityCollection results2 = connection.RetrieveMultiple(queryExpression2); if (results2 != null && results2.Entities != null && results2.Entities.Count > 0) { existeRegistroDeLlamada = true; } if (!existeRegistroDeLlamada) { realizaProceso = false; mensaje = "La cita debe de tener al menos un registro de llamada."; } } #endregion #region prospección if (realizaProceso && tipoDeCita.ToLower().Contains("prospección") && currentEntity.Attributes.Contains("hd_contacto_visita")) { string aux = currentEntity.FormattedValues["hd_contacto_visita"].ToLower(); if (aux == "si" || aux == "sí") { bool existeRegistroDeLlamada = false; QueryExpression queryExpression2 = new QueryExpression("phonecall"); queryExpression2.ColumnSet = new ColumnSet(true); queryExpression2.Criteria.AddCondition("hd_citallamadaid", ConditionOperator.Equal, currentEntity.Id); EntityCollection results2 = connection.RetrieveMultiple(queryExpression2); if (results2 != null && results2.Entities != null && results2.Entities.Count > 0) { existeRegistroDeLlamada = true; } if (!existeRegistroDeLlamada) { realizaProceso = false; mensaje = "La cita debe de tener al menos un registro de llamada."; } } } #endregion #endregion } else { realizaProceso = false; mensaje = "La cita no ha sido aprobada por su gerente"; } } if (realizaProceso) { DateTime dtAux = new DateTime(modelo.year, modelo.month, modelo.day, modelo.hour, modelo.minute, 0); Entity entityToUpdate = new Entity("appointment"); entityToUpdate.Id = modelo.Id; entityToUpdate.Attributes = new AttributeCollection(); entityToUpdate.Attributes.Add("hd_inicio_real", dtAux); entityToUpdate.Attributes.Add("hd_latitud_in", modelo.LatitudInicio); entityToUpdate.Attributes.Add("hd_longitud_in", modelo.LongitudInicio); connection.Update(entityToUpdate); } } } catch (Exception ex) { mensaje = "Excepción:" + ex.Message; } return(Ok(mensaje)); }