//step 2 private void ChooseClient() { //this means that the user has completed this step once, //and that she wants to choose if create or use existing client once more if(this.TargetMember.InnerClient != null) { this.TargetMember.InnerClient = null; this.OnPrevious(); return; } bool new_client = this.NewClientButton.Active; if(new_client) { ClientWizard cw = new ClientWizard(); cw.SuccessEvent += (object target) => { this.TargetMember.InnerClient = (Client) target; this.OnNext(); }; cw.CancelEvent += () => this.Step -= 1; cw.TransientFor = this; cw.Run(); } else { this.Description = "Elija un método para seleccionar al cliente que será nuevo miembro del gimnasio"; this.ClearContentBox(); this.ClientByIdButton = new RadioButton(null, "Id de usuario:"); this.ClientSearchButton = new RadioButton(this.ClientByIdButton, "Buscar manualmente"); Button test_button= new Button("Comprobar"); SpinButton id_spin = new SpinButton(0, 5000, 1); id_spin.Value = this.ClientId; id_spin.TooltipText = "Número de cliente"; Button search_button = new Button("Clientes..."); Label empty_label = new Label(" "); Label empty_label2 = new Label(" "); Label info_label = new Label(); this.PackWidgetSingle(this.ClientByIdButton); this.PackWidgetPair(id_spin, test_button, true); this.PackWidgetSingle(this.ClientSearchButton); this.PackWidgetPair(empty_label, search_button, true); this.PackWidgetSingle(empty_label2); this.PackWidgetSingle(new HSeparator()); this.PackWidgetSingle(info_label); //connecting local buttons this.ClientByIdButton.Clicked += (object sender, EventArgs args) => { bool state = this.ClientByIdButton.Active; id_spin.Sensitive = state; test_button.Sensitive = state; search_button.Sensitive = !state; }; id_spin.Changed += (object sender, EventArgs args) => { int id; this.ClientId = (int.TryParse(id_spin.Text, out id) ? id : id_spin.ValueAsInt); //this.ClientId = id_spin.ValueAsInt; }; id_spin.Value = this.ClientId; test_button.Clicked += (object sender, EventArgs args) => { long id = this.ClientId; ClientModel m = new ClientModel(); if(m.ExistsById(id)) { IDataReader r = m.GetById(id); r.Read(); Client c = new Client(); c.Id = id; c.Name = (string) r["Name"]; c.Surname = (string) r["Surname"]; c.Address = (string) r["Address"]; c.Email = (string) r["Email"]; c.PhoneNumber = r["PhoneNumber"].ToString(); string s = c.ToString(); if(m.IsMember(c)) s += "\n(Ya es miembro)"; info_label.Text = s; } else { info_label.Text = "Número de cliente (" + id + ") no encontrado"; this.TargetMember.InnerClient = null; } }; search_button.Clicked += (object sender, EventArgs args) => { info_label.Text = "No implementado"; }; this.ClientByIdButton.Click(); this.ContentVBox.ShowAll(); id_spin.HasFocus = true; } }
//step 3 private void MemberInfo() { //if the member's inner client is null and the user has reached this //step, the user has chosen a client id instead of creating one... //and here we are verifying the info given before if(this.TargetMember.InnerClient == null) { ClientModel cm = new ClientModel(); bool error = false; string msg = ""; Client c = new Client(); c.Id = this.ClientId; if(!cm.ExistsById(c.Id)) { msg = "No se puede encontrar al número de cliente " + this.ClientId; error = true; } else if(cm.IsMember(c)) { msg = "El cliente elegido ya es un miembro del gimnasio"; error = true; } if(error) { GuiHelper.ShowError(this, msg); this.Step -= 1; return; } } //ok, let's continue if everything as expected: //if InnerClient == null, this.ClientId should hold //an integer pointing to an existing client :) if(!this.MemberInitialized) { this.MemberInitialized = true; this.TargetMember.Height = 1.0; this.TargetMember.Weight = 40.0; this.TargetMember.Gender = 'm'; this.TargetMember.BirthDate = DateTime.Today; Contact ctc = new Contact(); ctc.Name = ""; ctc.PhoneNumber = ""; this.TargetMember.InnerContact = ctc; this.TargetMember.PaymentDay = DateTime.Today.Day; this.TargetMember.JoinDate = DateTime.Today; this.TargetMember.Pack = 0; } this.ClearContentBox(); this.Description = "Información requerida del nuevo miembro"; Label l1 = new Label("Peso (Kg)"); Label l2 = new Label("Estatura (Mts)"); Label l3 = new Label("Sexo"); Label l4 = new Label("Nacimiento"); Label l5 = new Label("\nEn caso de accidente, contactar a la siguiente persona:\n"); Label l6 = new Label("Nombre"); Label l7 = new Label("Teléfono"); SpinButton weight_spin = new SpinButton(40, 200, 0.01); SpinButton height_spin = new SpinButton(1, 2.5, 0.01); ComboBox gender_combo = new ComboBox(new string[] {"Masculino", "Femenino"}); DateWidget dw = new DateWidget(); Entry contact_name_entry = new Entry(); Entry contact_phone_entry = new Entry(); weight_spin.Changed += (s, a) => { float weight; this.TargetMember.Weight = (float.TryParse(weight_spin.Text, out weight) ? weight : weight_spin.Value); }; height_spin.Changed += (s, a) => { float height; this.TargetMember.Height = (float.TryParse(height_spin.Text, out height) ? height : height_spin.Value); }; gender_combo.Changed += (s, a) => this.TargetMember.Gender = (gender_combo.Active == 0 ? 'm' : 'f'); contact_name_entry.Changed += (s, a) => this.TargetMember.InnerContact.Name = contact_name_entry.Text.Trim(); contact_phone_entry.Changed += (s, a) => this.TargetMember.InnerContact.PhoneNumber = contact_phone_entry.Text.Trim(); dw.Changed += (s, a) => this.TargetMember.BirthDate = dw.Date; this.PackWidgetPair(l1, weight_spin); this.PackWidgetPair(l2, height_spin); this.PackWidgetPair(l3, gender_combo); this.PackWidgetPair(l4, dw.Box); this.PackWidgetSingle(l5); this.PackWidgetPair(l6, contact_name_entry); this.PackWidgetPair(l7, contact_phone_entry); weight_spin.Value = this.TargetMember.Weight; height_spin.Value = this.TargetMember.Height; gender_combo.Active = (this.TargetMember.Gender == 'm' ? 0 : 1); dw.Date = this.TargetMember.BirthDate; contact_name_entry.Text = this.TargetMember.InnerContact.Name; contact_phone_entry.Text = this.TargetMember.InnerContact.PhoneNumber; this.ContentVBox.ShowAll(); }