// GET: TipoPieza/Crear
        public ActionResult Crear(Guid? id, bool principal = false)
        {
            if (id == null)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

            TipoPieza tp = new TipoPieza();

            if (principal)
            {
                //id = TipoObraID
                TipoObra tipoObra = db.TipoObras.Find(id);
                if (tipoObra == null)
                    return HttpNotFound();

                tp.TipoObraID = tipoObra.TipoObraID;
                tp.Orden = tipoObra.TipoPiezas.Where(a => a.EsPrincipal).Count() + 1;
                tp.Status = true;
                tp.EsPrincipal = true;
            }
            else
            {
                //id = TipoPiezaPadreID
                TipoPieza tipoPiezaPadre = db.TipoPiezas.Find(id);
                if (tipoPiezaPadre == null)
                    return HttpNotFound();

                tp.TipoObraID = tipoPiezaPadre.TipoObraID;
                tp.Orden = tipoPiezaPadre.TipoPiezasHijas.Count + 1;
                tp.TipoPiezaPadreID = tipoPiezaPadre.TipoPiezaID;
                tp.Status = true;
                tp.EsPrincipal = false;
            }

            return PartialView("_Crear", tp);
        }
        public ActionResult Crear(Guid? id, bool principal = false)
        {
            if (id == null)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

            TipoPieza tp = new TipoPieza();

            if (principal)
            {
                //id = TipoObraID
                TipoObra tipoObra = db.TipoObras.Find(id);
                if (tipoObra == null)
                    return HttpNotFound();
                tp.Prefijo = "A";
                tp.TipoObraID = tipoObra.TipoObraID;
                tp.Orden = tipoObra.TipoPiezas.Where(a => a.EsPrincipal).Count() + 1;
                tp.Status = true;
                tp.EsPrincipal = true;
            }
            else
            {
                //id = TipoPiezaPadreID
                TipoPieza tipoPiezaPadre = db.TipoPiezas.Find(id);
                if (tipoPiezaPadre == null)
                    return HttpNotFound();

                tp.Orden = tipoPiezaPadre.TipoPiezasHijas.Count;

                if  (tp.Orden > 0)
                {
                    string ultimaLetra = tipoPiezaPadre.TipoPiezasHijas.Select(a => a.Prefijo).OrderByDescending(a => a).FirstOrDefault();
                    tp.Prefijo = IncrementarLetra(ultimaLetra);
                    tp.Orden++;
                }
                else
                {
                    tp.Orden = 1;
                    tp.Prefijo = "A";
                }

                tp.TipoObraID = tipoPiezaPadre.TipoObraID;
                tp.TipoPiezaPadreID = tipoPiezaPadre.TipoPiezaID;
                tp.Status = true;
                tp.EsPrincipal = false;
            }

            return PartialView("_Crear", tp);
        }
        public ActionResult Crear([Bind(Include = "TipoObraID,Nombre,Descripcion,Status,Temp")] TipoObra tipoObra)
        {
            //revalidar el nombre
            if (db.TipoObras.FirstOrDefault(a => a.Nombre == tipoObra.Nombre) != null)
                ModelState.AddModelError("Nombre", "Nombre ya existe.");

            if (ModelState.IsValid)
            {
                tipoObra.TipoObraID = Guid.NewGuid();
                db.TipoObras.Add(tipoObra);
                db.SaveChanges();

                AlertaSuccess(string.Format("Tipo de Obra: <b>{0}</b> creada.", tipoObra.Nombre), true);

                //Crear la pieza Maestra

                TipoPieza tipoPieza = new TipoPieza()
                {
                    TipoPiezaID = Guid.NewGuid(),
                    TipoObraID = tipoObra.TipoObraID,
                    Nombre = "Principal",
                    Prefijo = "A",
                    Orden = 1,
                    Descripcion = "Pieza principal de la Obra",
                    EsPrincipal = true,
                    Status = true
                };

                db.TipoPiezas.Add(tipoPieza);
                db.SaveChanges();

                AlertaSuccess(string.Format("Tipo de Pieza : <b>{0}</b> creada.", tipoPieza.Nombre), true);

                string url = Url.Action("Lista", "TipoObra");
                return Json(new { success = true, url = url });
            }

            return PartialView("_Crear", tipoObra);
        }