VoteRollBack() публичный Метод

Votes to roll back the transaction
public VoteRollBack ( ) : void
Результат void
Пример #1
0
		public void VoteRollBack()
		{
			if (mode == TransactionMode.Inherits && parentTransactionScope != null)
			{
				parentTransactionScope.VoteRollBack();
			}
			_rollbackOnly = true;
		}
		public void ActiveRecordUsingTransactionScopeWithRollback()
		{
			InitModel();
			using (TransactionScope scope = new TransactionScope())
			{
				new SSAFEntity("example").Save();
				//Assert.AreEqual(1, SSAFEntity.FindAll().Length);
				scope.VoteRollBack();
			}
			Assert.AreEqual(0, SSAFEntity.FindAll().Length);
		}
        public static void Registro()
        {
            foreach (var archivo in ActiveRecordBase<ConsumoDto>.FindAllByProperty("Procesado", false))
            {
                var documento = HelperPersona.GetPersona(
                    archivo.Cuit, archivo.TipoCliente,
                    archivo.RazonSocial, archivo.NombrePersona,
                    archivo.NroDocumento, archivo.Empresa);

                    var cliente = HelperCuenta.GetCuenta(
                        archivo.Cuit, archivo.NroDocumento, archivo.Empresa);

                    using (var transac = new TransactionScope())
                        try
                        {
                            var puntos = HelperPuntos.GetPuntos(archivo.Empresa, archivo.FechaHoraComprobante,
                                                            archivo.ImportePesosNetoImpuestos);

                            double acelerador = Double.Parse(archivo.Coeficiente) / 100;
                            puntos = acelerador > 0 ? acelerador * puntos : puntos;

                            var cuenta = new CuentaCorrienteDto
                            {
                                FechaCompra = archivo.FechaHoraComprobante.Date,
                                HoraCompra = DateTime.Now,
                                Key = new KeyCuenta
                                {
                                    CodEmpresa = archivo.Empresa,
                                    NumeroComprobante = archivo.NroComprobante
                                },
                                MontoCompra = archivo.ImportePesosNetoImpuestos,
                                Movimiento = puntos >= 0 ? HelperMovimiento.FindMovimiento("Suma De Puntos") : HelperMovimiento.FindMovimiento("Anulación Carga"),
                                NumeroDocumento = documento,
                                NumeroCuenta = cliente,
                                Puntos = puntos,
                                Sucursal = HelperSucursal.GetSucursal(),
                                Usuario = "web",
                                Programa = archivo.Programa,
                                Secretaria = archivo.Secretaria,
                                Coeficiente = archivo.Coeficiente
                            };
                            cuenta.Save();
                            transac.VoteCommit();
                        }
                        catch (Exception ex)
                        {
                            archivo.Error = ex.Message;
                            Log.Fatal(ex);
                            transac.VoteRollBack();
                        }
                    archivo.Procesado = true;
                    archivo.Save();
                } 
            }
Пример #4
0
 public ActionResult Edit(int id, FormCollection form)
 {
     using (var transaction = new TransactionScope(TransactionMode.Inherits))
     {
         var original = Document.Find(id);
         if (TryUpdateModel(original))
         {
             original.Save();
             return RedirectToAction("Details", new { Id = id });
         }
         transaction.VoteRollBack();
         return View("Edit");
     }
 }
        /// <summary>
        /// evento disparado pelo botão salvar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSalvar_Click1(object sender, EventArgs e)
        {
            //bisca a lista de moradores selecionados
            List<int> lista = (List<int>)ViewState["moradores"];

            
            if (lista.Count > 0)
            {
                //abre a transação
                using (TransactionScope trans = new TransactionScope())
                {
                    try
                    {
                        //cria o template da mensagem
                        Domain.Model.Mensagem mensagem = new Domain.Model.Mensagem();
                        mensagem.Usuario = txtUsuario.Text;
                        mensagem.Detalhe = txtMensagem.Text;
                        mensagem.CreateAndFlush();


                        Usuario user = new Usuario();
                        MensagensDosUsuarios mensagemRelacionada;
                        //envia a mensagem para casa usuário selecionado
                        foreach (var item in lista)
                        {
                            user.Id = item;
                            mensagemRelacionada = new MensagensDosUsuarios();
                            mensagemRelacionada.Mensagem = mensagem;
                            mensagemRelacionada.Usuario = user;
                            mensagemRelacionada.CreateAndFlush();
                        }
                        //commit da transação
                        trans.VoteCommit();
                    }
                    catch (Exception ex)
                    {
                        //rollback da transação
                        trans.VoteRollBack();
                        //grava o erro em um log
                        Logger.Error(ex.Message);
                        base.ExibirMensagemErro();
                    }
                }
                base.ExibirMensagemSucesso(Funcionalidade.Mensagem, Operacao.Inclusao);
            }
            else
            {
                pnlMensagem.ExibirMensagem("Selecione os usuários para quem você vai enviar a mensagem");
            }
        }
Пример #6
0
        public ActionResult Create(Document document)
        {
            using(var transaction = new TransactionScope(TransactionMode.New))
            {
                try
                {
                    var user = _user.UserName();
                    var author = Models.User.FindByUsername(user);
                    author.Documents.Add(document);
                    author.Save();
                    return RedirectToAction("Index");
                }
                catch (NotFoundException ex)
                {
                    transaction.VoteRollBack();
                    ViewBag.ErrorMessage = String.Format("{0}. Please add the user first.", ex.Message);

                }
            }
            return View("Create");
        }
        /// <summary>
        /// funcionalidade de edição de um registro de funcionario
        /// </summary>
        /// <param name="id"></param>
        private void EditarFuncionario(int id)
        {
            //abre a transação
            using (TransactionScope trans = new TransactionScope())
            {

                try
                {
                    //consulta o funcionário pelo ID
                    Funcionario funcionario = Funcionario.FindByPrimaryKey(id);
                    //atribui os dados que estão na página
                    funcionario.Nome = Request.Form["ctl00$ContentPlaceHolder1$txtNome"]; //txtNome.Text.Trim();
                    funcionario.Endereco = Request.Form["ctl00$ContentPlaceHolder1$txtEndereco"]; //txtEndereco.Text.Trim();
                    funcionario.CPF = Request.Form["ctl00$ContentPlaceHolder1$txtCpf"]; //txtCpf.Text.Trim();
                    funcionario.RG = Request.Form["ctl00$ContentPlaceHolder1$txtRG"]; //txtRG.Text.Trim();
                    funcionario.Telefone = Request.Form["ctl00$ContentPlaceHolder1$txtTelefone"]; //txtTelefone.Text.Trim();
                    funcionario.DataNascimento = DateTime.Parse(Request.Form["ctl00$ContentPlaceHolder1$txtDataNascimento"]);
                    funcionario.DataAdmissao = DateTime.Parse(Request.Form["ctl00$ContentPlaceHolder1$txtDataContratacao"]);
                    funcionario.NumeroCarteiraTrabalho = Request.Form["ctl00$ContentPlaceHolder1$txtCarteiratrabalho"];// txtCarteiratrabalho.Text.Trim();
                    funcionario.Cargo = Request.Form["ctl00$ContentPlaceHolder1$txtCargo"];// txtCargo.Text.Trim();
                    //atualiza o funcionário
                    funcionario.UpdateAndFlush();
                    if (Request.Form["ctl00$ContentPlaceHolder1$txtSalario"].Trim() != string.Empty)
                    {
                        //verifica se tem salário e se houve alteração do valor
                        decimal valor = decimal.Parse(Request.Form["ctl00$ContentPlaceHolder1$txtSalario"]);

                        if (funcionario.SalarioVigente != null)
                        {
                            if (funcionario.SalarioVigente.Valor != valor)
                            {
                                //atribui o valor da salário
                                funcionario.SalarioVigente.FinalVigencia = DateTime.Today;
                                funcionario.SalarioVigente.Vigente = false;
                                //atualiza o registro
                                funcionario.SalarioVigente.UpdateAndFlush();

                                if (valor != 0)
                                {
                                    Salario salario = new Salario();
                                    salario.InicioVigencia = DateTime.Today;
                                    salario.Vigente = true;
                                    salario.Valor = valor;
                                    salario.FuncionarioDoSalario = funcionario;
                                    salario.CreateAndFlush();
                                }
                            }
                        }
                    }
                    else
                    {
                        if (funcionario.SalarioVigente != null)
                        {
                            funcionario.SalarioVigente.FinalVigencia = DateTime.Today;
                            funcionario.SalarioVigente.Vigente = false;
                            funcionario.SalarioVigente.UpdateAndFlush();
                        }
                    }
                    //commit da transação
                    trans.VoteCommit();
                }
                catch (Exception ex)
                {
                    //rollback da transação
                    trans.VoteRollBack();
                    throw ex;
                }
                finally
                {
                    trans.Flush();
                }
            }
        }
        /// <summary>
        /// grava um novo registro de funcionário
        /// </summary>
        private void CadastrarNovoFuncionario()
        {
            //abre a transação
            using (TransactionScope trans = new TransactionScope())
            {
                try
                {
                    //atribui os dados da página para o registro de funcionário e salva no banco
                    Funcionario funcionario = new Funcionario();
                    funcionario.Nome = txtNome.Text.Trim();
                    funcionario.Endereco = txtEndereco.Text.Trim();
                    funcionario.CPF = txtCpf.Text.Trim();
                    funcionario.RG = txtRG.Text.Trim();
                    funcionario.Telefone = txtTelefone.Text.Trim();
                    funcionario.DataNascimento = DateTime.Parse(txtDataNascimento.Text.Trim());
                    funcionario.DataAdmissao = DateTime.Parse(txtDataContratacao.Text.Trim());
                    funcionario.NumeroCarteiraTrabalho = txtCarteiratrabalho.Text.Trim();
                    funcionario.Cargo = txtCargo.Text.Trim();
                    funcionario.CreateAndFlush();

                    if (txtSalario.Text.Trim() != string.Empty)
                    {
                        decimal valor = decimal.Parse(txtSalario.Text.Trim());
                        if (valor != 0)
                        {
                            //cria o registro do salário
                            Salario salario = new Salario();
                            salario.InicioVigencia = DateTime.Parse(txtDataContratacao.Text.Trim());
                            salario.Vigente = true;
                            salario.Valor = valor;
                            salario.FuncionarioDoSalario = funcionario;
                            salario.CreateAndFlush();
                        }
                    }
                    //commit da transação
                    trans.VoteCommit();
                }
                catch (Exception ex)
                {
                    //rollback da transação
                    trans.VoteRollBack();
                    //sobe o erro para o método que o chamou, onde será gravado em um arquivo de texto
                    throw ex;
                }
                finally
                {
                    //fecha a transasção
                    trans.Flush();
                }
            }
        }
    private void MakeRendicion(int idSolOrg)
    {
        TransactionScope _transaction = new TransactionScope();
        Solicitud  sol = Solicitud.GetById(idSolOrg);
        DateTime fechanula = DateTime.Parse("01/01/1900");
        Solicitud  reporte ;
        try {
            reporte = Solicitud.FindOne(Expression.Eq("IdSolicitudInicial", idSolOrg));

            if (reporte == null)
            {

                reporte = new Solicitud();
                reporte.IdSolicitudInicial = sol.Id_Solicitud;
                reporte.IdCliente = sol.IdCliente;
                reporte.IdTipoSolicitud =  sol.IdTipoSolicitud;
                reporte.IdUsuarioCreador = BiFactory.User.IdUsuario;
                reporte.Reporte = "SI";
                reporte.Status = eEstados.Pendiente.ToString();
                reporte.NroOrdenCte = sol.NroOrdenCte;
                reporte.Contacto = sol.Contacto;
                reporte.ContactoMail = sol.ContactoMail;
                reporte.ContactoTel = sol.ContactoTel;
                reporte.Descripcion = sol.Descripcion;

                reporte.FechaCreacion = DateTime.Now;
                reporte.FechaAprobacionCalidad = fechanula;
                reporte.FechaAprobacionTecnica = fechanula;
                reporte.FechaReprogramacion = fechanula;
                reporte.FechaSuspencion = fechanula;
                reporte.ProximaFechaInicio = fechanula;
                reporte.ProximaFechaFin = fechanula;
                reporte.Save();

                TipoSolicitud tipo = sol.Tipo;

                if (tipo.IdTiposolicitud == 1) ///Mantenimiento Preventivo
                {
                    SolicitudPreventivo Sol_Prev = SolicitudPreventivo.FindOne(Expression.Eq("IdSolicitud", idSolOrg));
                    Sol_Prev.Id = 0;
                    Sol_Prev.IdSolicitud = reporte.Id_Solicitud;
                    Sol_Prev.SaveCopyAndFlush();

                    //copio las tareas
                    SolicitudTareas[] tt = SolicitudTareas.FindAll(Expression.Eq("IdSolicitud", idSolOrg));
                    foreach (SolicitudTareas t in tt)
                    {
                        t.Id = 0; //para que guarde una copia
                        t.IdSolicitud = reporte.Id_Solicitud;
                        t.SaveCopyAndFlush();
                    }

                }

                if (tipo.IdTiposolicitud == 2) ///Mantenimiento Correctivo
                {
                    SolicitudCorrectivo Sol_Corr_original= SolicitudCorrectivo.FindOne(Expression.Eq("IdSolicitud", idSolOrg));
                    Sol_Corr_original.Id = 0;
                    Sol_Corr_original.IdSolicitud = reporte.Id_Solicitud;
                    Sol_Corr_original.FechaResolucion = DateTime.Parse("1900-01-01");
                    Sol_Corr_original.SaveCopyAndFlush();

                }

                if (tipo.IdTiposolicitud == 6) ///Obras e Instalaciones
                {

                        SolicitudObra Sol_Obra = SolicitudObra.FindOne(Expression.Eq("IdSolicitud",idSolOrg));
                        Sol_Obra.Id = 0;
                        Sol_Obra.IdSolicitud = reporte.Id_Solicitud;
                        Sol_Obra.SaveCopy();

                }

                //copio las PErsonas
                SolicitudRecursosEmpleados[] ee = SolicitudRecursosEmpleados.FindAll(Expression.Eq("IdSolicitud", idSolOrg));
                foreach (SolicitudRecursosEmpleados e in ee)
                {
                    e.Id = 0;
                    e.IdSolicitud = reporte.Id_Solicitud;
                    e.SaveCopy();
                }

                //copio los vehiculos
                SolicitudRecursosVehiculos[] vv = SolicitudRecursosVehiculos.FindAll(Expression.Eq("IdSolicitud", idSolOrg));
                foreach (SolicitudRecursosVehiculos v in vv)
                {
                    v.Id = 0;
                    v.IdSolicitud = reporte.Id_Solicitud;
                    v.Horas = 0;
                    v.Km = 0;
                    v.SaveCopy();

                }
            }
            reporte.Save();
            //BiFactory.Sol = reporte;
        }
        catch (Exception)
        {
            _transaction.VoteRollBack();
            throw;
        }
        finally
        {
            _transaction.Dispose();

            switch (sol.IdTipoSolicitud)
            {
                case 1:
                    Response.Redirect("MantPreventivoRendicion.aspx");
                    break;
                case 2:
                    Response.Redirect("MantCorrectivoRendicion.aspx");
                    break;
                case 6:
                    Response.Redirect("Reporte_Obras.aspx");
                    break;
            }
        }
    }
    private void CrearClone(int idSolOrg)
    {
        TransactionScope _transaction = new TransactionScope();
        try
        {
            //guarda la solicitud con la relacion
            Solicitud_Relacion SolRel = new Solicitud_Relacion();
            Solicitud sol;
            // antes de crear una copia verifico que no exista ya una
            SolRel = Solicitud_Relacion.FindOne(Expression.Eq("IdSolicitud_Relacionada", idSolOrg));
            if (SolRel == null)
            {
                SolRel = new Solicitud_Relacion();
                sol = Solicitud.GetById(idSolOrg);
                sol.Status = "Rendicion";
                sol.Id_Solicitud = 0;
                sol.SaveCopy();
                BiFactory.Sol = sol;
            }
            else
            {
                sol = Solicitud.GetById(SolRel.IdSolicitud);

                BiFactory.Sol = sol;
            }

            SolRel.IdSolicitud = sol.Id_Solicitud;
            SolRel.IdSolicitud_Relacionada = idSolOrg;
            SolRel.Save();

            //copio las tareas
            SolicitudTareas[] tt = SolicitudTareas.FindAll(Expression.Eq("IdSolicitud", idSolOrg));
            foreach (SolicitudTareas t in tt)
            {
                t.Id = 0; //para que guarde una copia
                t.IdSolicitud = sol.Id_Solicitud;
                t.SaveCopy();
            }

            //copio los agentes
            SolicitudRecursosEmpleados[] ee = SolicitudRecursosEmpleados.FindAll(Expression.Eq("IdSolicitud", idSolOrg));
            foreach (SolicitudRecursosEmpleados e in ee)
            {
                e.Id = 0;
                e.IdSolicitud = sol.Id_Solicitud;
                e.SaveCopy();
            }

            //copio los vehiculos
            SolicitudRecursosVehiculos[] vv = SolicitudRecursosVehiculos.FindAll(Expression.Eq("IdSolicitud", idSolOrg));
            foreach (SolicitudRecursosVehiculos v in vv)
            {
                v.Id = 0;
                v.IdSolicitud = sol.Id_Solicitud;
                v.SaveCopy();
            }

        }
        catch (Exception oEx)
        {
            _transaction.VoteRollBack();
            throw;
        }
        finally
        {
            _transaction.Dispose();

            Response.Redirect("./MantPreventivoRendicion.aspx");
        }
    }
Пример #11
0
        public void ToRender([ARDataBind("purchase",AutoLoadBehavior.Always)] Purchase purchase, string comment)
        {
            PurchaseStatusChange psc = new PurchaseStatusChange();
            psc.Created = DateTime.Now;
            psc.Purchase = purchase;
            psc.StatusOld =  purchase.Status;

            psc.StatusNew =Purchase.StatusPurchase.Entregado;
            psc.author = Context.CurrentUser.Identity.Name.ToLower ();

            purchase.DateDelivery = System.DateTime.Now;
            purchase.Status = Purchase.StatusPurchase.Entregado;

            using (TransactionScope t1 = new TransactionScope())
            {
                try {
                    purchase.Save ();
                    psc.Save ();

                    if (!string.IsNullOrEmpty(comment)) {
                        PurchaseComment pc = new PurchaseComment();
                        pc.Comment = comment;
                        pc.Created = DateTime.Now;
                        pc.Purchase = purchase;
                        pc.UserComment = Context.CurrentUser.Identity.Name.ToLower ();
                        pc.Save ();
                    }
                    t1.VoteCommit();
                    Flash["TypeMsg"] = "alert alert-success";
                    Flash["Msg"] = "<b>Ok, Solicitud " + purchase.Status +" entregada conforme...</b> ";
                } catch (Exception ex) {
                    t1.VoteRollBack();
                    if (!purchase.IsValid()) {
                        Flash["Msg"] = Utilities.GetValidationErrorText(purchase.ValidationErrorMessages);
                    } else {
                        Flash["Msg"] = "Error :" + ex.Message + " " + comment.Length.ToString();
                    }
                    RedirectToReferrer ();
                    return;
                }
            }

            PropertyBag["to"] = ConfigurationManager.AppSettings["mailadmin"];
            PropertyBag["cc"] = purchase.UserRequest + "@" + ConfigurationManager.AppSettings["defaultdomain"];
            PropertyBag["from"] = ConfigurationManager.AppSettings["mailadmin"];
            PropertyBag["subject"] = "[compras] Compra recepcionada "+ purchase.Status +" ID:" + purchase.Id.ToString ();
            PropertyBag["purchase"] = purchase;
            PropertyBag["purchaseproducts"] = purchase.PurchaseProducts;
            DeliverEmail(RenderMailMessage ("close",null,PropertyBag));

            RenderView ("approval");
        }
Пример #12
0
        public void ToApprove([ARDataBind("purchase",AutoLoadBehavior.Always)] Purchase purchase, string response, string comment)
        {
            PurchaseStatusChange psc = new PurchaseStatusChange();
            psc.Created = DateTime.Now;
            psc.Purchase = purchase;
            psc.StatusOld =  purchase.Status;

            switch (response) {
                case "approval" : {
                    purchase.Status = Purchase.StatusPurchase.Aprobada;
                    break;
                }
                case "reject" : {
                    purchase.Status = Purchase.StatusPurchase.Rechazada;
                    break;
                }
                default : {
                    Flash["TypeMsg"] = "alert alert-error";
                    Flash["Msg"] = "Error :" + response;
                    RedirectToReferrer ();
                    return;
                }
            }

            psc.StatusNew = purchase.Status;
            psc.author = Context.CurrentUser.Identity.Name.ToLower ();

            purchase.DateApproval = System.DateTime.Now;

            using (TransactionScope t1 = new TransactionScope())
            {
                try {

                    purchase.Save ();
                    psc.Save ();

                    if (!string.IsNullOrEmpty(comment)) {
                        PurchaseComment pc = new PurchaseComment();
                        pc.Comment = comment;
                        pc.Created = DateTime.Now;
                        pc.Purchase = purchase;
                        pc.UserComment = Context.CurrentUser.Identity.Name.ToLower ();
                        pc.Save ();
                    }
                    t1.VoteCommit();
                    Flash["TypeMsg"] = "alert alert-success";
                    Flash["Msg"] = "<b>Ok, Solicitud " + purchase.Status +" enviada a Compras</b> ";
                } catch (Exception ex) {
                    t1.VoteRollBack();
                    Flash["TypeMsg"] = "alert alert-error";
                    Flash["Msg"] = "Error :" + ex.Message;
                    RedirectToReferrer ();
                    return;
                }
            }

            PropertyBag["to"] = ConfigurationManager.AppSettings["mailadmin"];
            PropertyBag["cc"] = purchase.UserRequest + "@" + ConfigurationManager.AppSettings["defaultdomain"];
            PropertyBag["from"] = ConfigurationManager.AppSettings["mailadmin"];
            PropertyBag["subject"] = "[compras] Compra "+ purchase.Status +" ID:" + purchase.Id.ToString ();
            PropertyBag["purchase"] = purchase;
            PropertyBag["purchaseproducts"] = purchase.PurchaseProducts;
            DeliverEmail(RenderMailMessage ("toapprove",null,PropertyBag));

            if (purchase.Status == Purchase.StatusPurchase.Aprobada)
                RenderView ("approval");
            else
                RenderView ("reject");
        }
Пример #13
0
        public void submit([ARDataBind("purchaseproducts")] PurchaseProduct[] purchaseproducts, int companyid, int userapproval, int familyproductid, string comment, HttpPostedFile uploadedFile)
        {
            Purchase purchase = new Purchase();
            purchase.UserRequest = Context.CurrentUser.Identity.Name.ToLower ();
            purchase.DateRequest = System.DateTime.Now;

            User user = (User) Context.Session["user"];
            purchase.MailRequest = user.Mail;
            purchase.NameUserRequest = user.Cn;

            if (companyid > 0)
                purchase.Company = Company.FindById(companyid);
            else {
                Flash["TypeMsg"] = "alert alert-error";
                Flash["Msg"] = "Seleccionar Compañia";
                RedirectToAction("new");
                return;
            }

            CompanyApprover ca = new CompanyApprover();
            if (userapproval > 0) {
                ca = CompanyApprover.FindById(userapproval);
                purchase.UserApproval = ca;
            } else {
                Flash["TypeMsg"] = "alert alert-error";
                Flash["Msg"] = "Seleccionar Aprobador";
                RedirectToAction("new");
                return;
            }

            if (familyproductid < 1) {
                Flash["TypeMsg"] = "alert alert-error";
                Flash["Msg"] = "Seleccionar Familia de Productos";
                RedirectToAction("new");
                return;
            }

            purchase.Status = Purchase.StatusPurchase.En_Aprobacion;

            using (TransactionScope t1 = new TransactionScope())
            {
                try {
                    //purchase.BudgetValue = Budget.FindByCompanyFamilyProduct(Company.FindById(companyid), FamilyProduct.FindById(familyproductid)).Value;
                    purchase.familyproduct = FamilyProduct.FindById(familyproductid);
                    purchase.Save ();
                    int cont = 0;
                    foreach(PurchaseProduct pp in purchaseproducts)
                    {
                        if (pp.Checked) {
                            pp.Purchase = purchase;
                            //pp.Product = Product.FindById(1);

                            if (!pp.IsValid()) {
                                Flash["TypeMsg"] = "alert alert-error";
                                Flash["Msg"] = Utilities.GetValidationErrorText(pp.ValidationErrorMessages);
                                t1.VoteRollBack ();
                                RedirectToAction("new");
                                return;
                            }
                            pp.Save();
                            cont++;
                        }
                    }

                    if (cont == 0) {
                        t1.VoteRollBack ();
                        Flash["TypeMsg"] = "alert alert-error";
                        Flash["Msg"] = "Seleccionar Productos";
                        RedirectToAction("new");
                        return;
                    }

                    if (!string.IsNullOrEmpty(comment)) {
                        PurchaseComment pc = new PurchaseComment();
                        pc.Comment = comment;
                        pc.Created = DateTime.Now;
                        pc.Purchase = purchase;
                        pc.UserComment = Context.CurrentUser.Identity.Name.ToLower ();

                        pc.Save ();
                    }

                    if (uploadedFile != null) {
                        PurchaseAttachment pa = new PurchaseAttachment();
                        pa.Purchase = purchase;
                        pa.Name = uploadedFile.FileName;
                        pa.Created = DateTime.Now;
                        pa.Path = Guid.NewGuid().ToString("N") + uploadedFile.FileName;
                        pa.Save ();
                        uploadedFile.SaveAs("../upload_compras/"+pa.Path);
                    }
                    t1.VoteCommit ();
                    Flash["TypeMsg"] = "alert alert-success";
                    Flash["Msg"] = "Solicitud generada con ID :<b>" + purchase.Id.ToString() + "</b>";
                }
                catch (Exception ex) {
                    t1.VoteRollBack ();
                    Flash["TypeMsg"] = "alert alert-error";
                    if (!purchase.IsValid()) {
                        Flash["Msg"] = Utilities.GetValidationErrorText(purchase.ValidationErrorMessages);
                    } else {
                        Flash["Msg"] = "Error :" + ex.Message;
                    }
                    RedirectToAction("new");
                    return;
                }
            }
            PropertyBag["to"] = ca.Login + "@" + ca.Domain;
            PropertyBag["from"] = ConfigurationManager.AppSettings["mailadmin"];
            PropertyBag["subject"] = "[compras] Solicitud Aprobacion ID:" + purchase.Id.ToString ();
            PropertyBag["idpurchase"] = purchase.Id;
            PropertyBag["username"] = purchase.NameUserRequest;
            PropertyBag["datepurchase"] = purchase.DateRequest.ToString ();
            DeliverEmail(RenderMailMessage ("approver",null,PropertyBag));
        }