private ControlDetalleServicio DuplicarControl(ControlDetalleServicio detalle) { CountDetalles = CountDetalles + 1; var detalleCiclo = DAOFactory.DetalleCicloDAO.FindById(detalle.IdDetalleCiclo); var control = new ControlDetalleServicio { ID = "_" + CountDetalles, ParentControls = ParentControls }; var found = false; var interval = TimeSpan.Zero; ControlDetalleServicio prev = null; for (var i = 0; i < panelEstados.Controls.Count; i++) { var current = panelEstados.Controls[i] as ControlDetalleServicio; if (current == null) { continue; } if (!found && current != detalle) { continue; } var next = (i + 1 < panelEstados.Controls.Count ? panelEstados.Controls[i + 1] : null) as ControlDetalleServicio; var tmp = next != null?next.GetFirstDate().Subtract(current.GetLastDate()) : TimeSpan.Zero; if (panelEstados.Controls[i] == detalle) { panelEstados.Controls.AddAt(i + 1, control); control.CreateFromDetalleCiclo(detalleCiclo); control.PanelAddVisible = detalle.PanelAddVisible; detalle.PanelAddVisible = false; control.SetDate(detalle.GetNextDate()); i++; current = control; found = true; } else { current.SetDate(prev.GetLastDate().Add(interval)); } interval = tmp; prev = current; } UpdateOrders(); // Reseteo los Id de los controles para que mantengan el orden correcto var allControls = GetControls(); for (var i = 0; i < allControls.Count; i++) { allControls[i].ID = "_" + i; } return(control); }
public void LoadDetalles() { var count = CountDetalles; if (count == 0) { return; } ClearControls(); //Hack para que me tome el primer elemento (?) AddControl(new LiteralControl()); for (var i = 0; i < count; i++) { var control = new ControlDetalleServicio { ID = "_" + i, ParentControls = ParentControls }; AddControl(control); control.Duplicating += control_Duplicar; control.DateChanged += control_DateChanged; control.LoadDetalles(); } AddControl(new LiteralControl()); }
public void SetDetalles(List <DetalleServicio> detalles) { if (!EsCiclo) { return; } var controls = GetControls(); var c = 0; ControlDetalleServicio lastControl = null; var subDetalles = new List <DetalleServicio>(); foreach (var detalleServicio in detalles) { var control = c < controls.Count ? controls[c] : lastControl; if (!control.EsCiclo && control != lastControl && control.IdDetalleCiclo == detalleServicio.DetalleCiclo.Id) { control.SetDetalle(detalleServicio); lastControl = control; c++; } else if (lastControl != null && !lastControl.EsCiclo && lastControl.IdDetalleCiclo == detalleServicio.DetalleCiclo.Id) { var dControl = DuplicarControl(lastControl); dControl.SetDetalle(detalleServicio); lastControl = dControl; } if (control.EsCiclo && control != lastControl && control.IdCiclo == detalleServicio.DetalleCiclo.CicloLogistico.Id) { subDetalles.Add(detalleServicio); if (control.CountDetalles == subDetalles.Count) { control.SetDetalles(subDetalles); lastControl = control; c++; subDetalles = new List <DetalleServicio>(); } } else if (lastControl != null && lastControl.EsCiclo && lastControl.IdCiclo == detalleServicio.DetalleCiclo.CicloLogistico.Id) { subDetalles.Add(detalleServicio); if (lastControl.CountDetalles == subDetalles.Count) { var dControl = DuplicarControl(lastControl); dControl.SetDetalles(subDetalles); lastControl = dControl; subDetalles = new List <DetalleServicio>(); } } } }