/// <summary> /// Agrega el cliente pasado como parámetro al layout del fondo. /// Lo introduce en una nueva fila. /// </summary> /// <param name="control"></param> void AgregarClienteControl(ClienteControl control) { // La sentencia if es para que no se cree una nueva fila si exiten filas vacías // disponibles donde se puede poner el nuevo cliente. if (vacio) { vacio = false; } else { tableLayoutClientes.RowCount++; } tableLayoutClientes.Controls.Add(control, 0, tableLayoutClientes.RowCount - 1); controlesCliente.Add(control); }
/// <summary> /// Crear nuevo cliente cuando se hace click en el botón correspondiente. /// </summary> private async void CrearCliente(object sender, EventArgs e) { FormNuevoCliente dialogo = new FormNuevoCliente(); // Abre una ventana de dialogo para obtener la información del nuevo cliente. if (dialogo.ShowDialog() == DialogResult.OK) { Client cliente = new Client(dialogo.darNombreCliente(), dialogo.darTipoAsociacion()); // TODO Agregar el id del usuario al cliente. ClienteControl clienteControl = null; using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri(DIRECCION_SERVIDOR); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(APP_JSON)); if (Sesion != null) { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Sesion.access_token); } HttpResponseMessage response = await httpClient.PostAsJsonAsync(RUTA_CLIENTES, cliente); if (response.IsSuccessStatusCode) { cliente = await response.Content.ReadAsAsync <Client>(); // Esto se hace para obtener el Id asignado por el servidor. //AgregarClienteControl(cliente); clienteControl = new ClienteControl(cliente); AgregarClienteControl(clienteControl); } else { MessageBox.Show("No fue posible guardar el nuevo cliente en la base de datos. Revise si el servidor está disponible.", "Error al comunicarse con el servidor"); return; } } // Registra el contacto principal si se rellenaron los campos correspondientes. if (dialogo.CrearNuevoContacto) { // Si se va a crear un nuevo contacto, es necesario que al menos el campo del nombre no esté vacío. if (dialogo.darNombreContactoPrincipal() != "") { Contact contacto = new Contact(dialogo.darNombreContactoPrincipal()); contacto.JobTitle = dialogo.darCargoContactoPrincipal(); contacto.Mail = dialogo.darCorreoContactoPrincipal(); contacto.Telephone = dialogo.darTelefonoContactoPrincipal(); contacto.ClientId = cliente.Id; // Envía el query POST using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri(DIRECCION_SERVIDOR); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(APP_JSON)); if (Sesion != null) { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Sesion.access_token); } HttpResponseMessage response = await httpClient.PostAsJsonAsync(RUTA_CONTACTOS, contacto); if (response.IsSuccessStatusCode) { contacto = await response.Content.ReadAsAsync <Contact>(); // Esto se hace para obtener el Id asignado por el servidor. clienteControl.Cliente.MainContactId = contacto.Id; clienteControl.GuardarCambiosCliente(); clienteControl.ImprimirDatosContactoPrincipal(contacto); clienteControl.AgregarControlContacto(contacto); } else { MessageBox.Show("No fue posible guardar el nuevo contacto en la base de datos. Revise si el servidor está disponible.", "Error al comunicarse con el servidor"); } } } } else // Esto sucede cuando se selecciona un contacto de la lista de contactos existentes. { Contact contacto = dialogo.darContactoSeleccionado(); clienteControl.Cliente.MainContactId = contacto.Id; clienteControl.GuardarCambiosCliente(); clienteControl.ImprimirDatosContactoPrincipal(contacto); } } }
/// <summary> /// Obtiene los clientes desde el backend por medio de un servicio web. /// Crea los controles correspondientes y los agrega a al layout de fondo. /// </summary> private async void CargarClientes(string ruta) { LimpiarListas(); cargando = true; // Quitar filtros FiltroEstado.Checked = false; toolStripLabelMensaje.Text = CARGANDO; // Obtener los clientes con un query GET. using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri(DIRECCION_SERVIDOR); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(APP_JSON)); if (Sesion != null) { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Sesion.access_token); } HttpResponseMessage response = await httpClient.GetAsync(ruta); if (response.IsSuccessStatusCode) { Client[] clientes = await response.Content.ReadAsAsync <Client[]>(); foreach (Client cliente in clientes) { var controlCliente = new ClienteControl(cliente); controlCliente.ObtenerDatosContactoPrincipal(cliente.MainContactId); AgregarClienteControl(controlCliente); // Obtener las tarea del cliente y las agrega en los controles correspondientes. response = await httpClient.GetAsync(RUTA_CLIENTES + "/" + cliente.Id + RUTA_TAREAS_CLIENTE); if (response.IsSuccessStatusCode) { Job[] tareas = await response.Content.ReadAsAsync <Job[]>(); foreach (var tarea in tareas) { controlCliente.AgregarControlTarea(tarea); } } // Obtener los contactos del cliente y las agrega en los controles correspondientes. response = await httpClient.GetAsync(RUTA_CLIENTES + "/" + cliente.Id + RUTA_CONTACTOS_CLIENTE); if (response.IsSuccessStatusCode) { Contact[] contactos = await response.Content.ReadAsAsync <Contact[]>(); foreach (var contacto in contactos) { controlCliente.AgregarControlContacto(contacto); } } } } else { toolStripLabelMensaje.Text = "Respuesta negativa del servidor"; } } MinimizarControles(); cargando = false; toolStripLabelMensaje.Text = "Conectado como: " + Sesion.userName; }