예제 #1
0
		public static Response<Infante> Post(this Infante request, Factory factory,IHttpRequest httpRequest)
		{  
            request.CheckId(Operaciones.Create);
            factory.Execute(proxy=>{

                if(request.IdTerceroFactura.HasValue && request.IdTerceroFactura.Value!=default(int))
                {
                    var tercero= proxy.FirstOrDefault<Tercero>(q=>q.Id==request.IdTerceroFactura.Value);
                    tercero.AssertExists(request.IdTerceroFactura.Value);
                    request.NombreTercero=tercero.Nombre;
                    request.DocumentoTercero=tercero.Documento;
                    request.DVTercero=tercero.DigitoVerificacion;
					request.TelefonoTercero= tercero.Telefono;
					request.MailTercero= tercero.Mail;
                }

                proxy.Create<Infante>(request);
            });
		
			List<Infante> data = new List<Infante>();
			data.Add(request);
			
			return new Response<Infante>(){
				Data=data
			};	
			
		}
         public static Response<PedidoItem> Get(this PedidoItem request,Factory factory,
                                           IAuthSession authSession)
        {
            try{
            var data = factory.Execute(proxy=>{
                var visitor = ReadExtensions.CreateExpression<PedidoItem>();
                visitor.Where(r=>r.IdPedido==request.IdPedido);
                return proxy.Get(visitor);
            });
                        
            return new Response<PedidoItem>(){
                Data=data

            };
            }
            catch(Exception e){
                ResponseStatus rs = new ResponseStatus(){
                    Message= e.Message,
                    StackTrace=e.StackTrace,
                    ErrorCode= e.ToString()
                };
                return new Response<PedidoItem>(){
                    ResponseStatus=rs
                };
            }
        }
예제 #3
0
        public static Response<Pedido> Get(this Pedido request,
		                                   Factory factory,
		                                   IHttpRequest httpRequest)
        {

            var paginador= new Paginador(httpRequest);
            var queryString= httpRequest.QueryString;
			long? totalCount=null;

			ResponseStatus rs=null;
            
            var data = factory.Execute(proxy=>{

				try
				{
					int id;
	                if(int.TryParse(queryString["Id"], out id)){
						if(id!=default(int)) return proxy.Get<Pedido>(r=>r.Id==id);
					}

					var predicate = PredicateBuilder.True<Pedido>();

					string compania= queryString["NombreCompania"];
	            	if(!compania.IsNullOrEmpty()) 
					{
						predicate= predicate.AndAlso(r=>r.NombreCompania.Contains(compania));
	                }

					var visitor = ReadExtensions.CreateExpression<Pedido>();
					visitor.Where(predicate);
					if(paginador.PageNumber.HasValue)
	                {
						visitor.Select(r=> Sql.Count(r.Id));
						totalCount= proxy.Count(visitor); //proxy.Count(predicate);
	                    int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
						visitor.Select();
	                    visitor.Limit(paginador.PageNumber.Value*rows, rows);
	                }
	               
					visitor.OrderByDescending(r=>r.Id); 
	                return proxy.Get(visitor);
				}
				catch(Exception e)
				{
					rs= new ResponseStatus(){ErrorCode="GetClienteError",Message=e.Message, StackTrace=e.StackTrace};
					return new List<Pedido>();
				}
            });
            
            return new Response<Pedido>(){
                Data=data,
                TotalCount=totalCount,
				ResponseStatus=rs==null? new ResponseStatus():rs
            };
        }
예제 #4
0
파일: Program.cs 프로젝트: asipe/Goul
 private static int Main(string[] args)
 {
     try {
     var app = new Factory(new DefaultModuleConfiguration()).Build<IApp>();
     app.Execute(args);
     return 0;
       } catch (Exception e) {
     System.Console.WriteLine(e);
     return 1;
       }
 }
예제 #5
0
        public static Response<Pedido> Get(this Pedido request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {

            return factory.Execute(proxy=>{

				long? totalCount=null;

				var paginador= new Paginador(httpRequest);
            	
				var visitor = ReadExtensions.CreateExpression<Pedido>();

                var predicate = PredicateBuilder.True<Pedido>();

				if(request.Consecutivo!=default(int))
				{
					predicate= q=>q.Consecutivo==request.Consecutivo;
				}
				else
				{
					visitor.OrderByDescending(f=>f.Consecutivo);

					if(!request.NombreCliente.IsNullOrEmpty()){
						predicate= q=>q.NombreCliente.StartsWith(request.NombreCliente);
						visitor.OrderBy(f=>f.NombreCliente);
					}

					if(!request.NitCliente.IsNullOrEmpty()){
						predicate= predicate.AndAlso(q=>q.NitCliente.StartsWith(request.NitCliente));
						visitor.OrderBy(f=>f.NitCliente);
					}
				}

                
				visitor.Where(predicate);
                if(paginador.PageNumber.HasValue)
                {
					visitor.Select(r=> Sql.Count(r.Id));
					totalCount= proxy.Count(visitor);
					visitor.Select();
                    int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.ResponsePageSize;
                    visitor.Limit(paginador.PageNumber.Value*rows, rows);
                }
                
				return new Response<Pedido>(){
                	Data=proxy.Get(visitor),
                	TotalCount=totalCount
            	};

            });
  
        }
예제 #6
0
        public static Response<Contacto> Get(this Contacto request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
            return factory.Execute(proxy=>{

				long? totalCount=null;

				var paginador= new Paginador(httpRequest);
            	var queryString= httpRequest.QueryString;

				var visitor = ReadExtensions.CreateExpression<Contacto>();
                var predicate = PredicateBuilder.True<Contacto>();

				if(request.IdCliente!=default(int))
					predicate= q=>q.IdCliente==request.IdCliente;

				else if(!request.Nombre.IsNullOrEmpty()) 
				{
	                predicate= q=>q.Nombre.StartsWith(request.Nombre) ;
					visitor.OrderBy(r=>r.Nombre);
				}


				var qs= queryString["Activo"];
				bool activo;
				if(bool.TryParse(qs,out activo)){
					predicate= predicate.AndAlso(q=>q.Activo==activo);
				}

                
				visitor.Where(predicate);
                if(paginador.PageNumber.HasValue)
                {
					visitor.Select(r=> Sql.Count(r.Id));
					totalCount= proxy.Count(visitor);
					visitor.Select();
                    int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.ResponsePageSize;
                    visitor.Limit(paginador.PageNumber.Value*rows, rows);
                }
                                
                
                
				return new Response<Contacto>(){
                	Data=proxy.Get(visitor),
                	TotalCount=totalCount
            	};
            });
  
        }
        public static AuthorizationResponse Get(this Authorization request, 
                                                   Factory factory, IRequestContext requestContext){
            
            var httpRequest = requestContext.Get<IHttpRequest>();   
            IAuthSession session = httpRequest.GetSession();
                        
            if (!session.HasRole(RoleNames.Admin))
            {
                request.UserId= int.Parse(session.UserAuthId);
            }
            
            List<AuthRole> roles = new List<AuthRole>();
            List<string> permissions= new List<string>();
            
            List<AuthRoleUser> aur= new List<AuthRoleUser>();
            List<AuthRole> rol = new List<AuthRole>();
            List<AuthPermission> per = new List<AuthPermission>();
            List<AuthRolePermission> rol_per = new List<AuthRolePermission>();
           
            factory.Execute(proxy=>
            {
                aur= proxy.Get<AuthRoleUser>(r=>r.IdUsuario==request.UserId );
                rol= proxy.Get<AuthRole>(); //DAL.GetFromCache<AuthRole>(proxy);
                per= proxy.Get<AuthPermission>(); //DAL.GetFromCache<AuthPermission >(proxy);
                rol_per= proxy.Get<AuthRolePermission>(); //DAL.GetFromCache<AuthRolePermission >(proxy);

            });
                        
            foreach( var r in aur)
            {
                AuthRole ar= rol.First(x=>x.Id== r.IdAuthRole);
                roles.Add(ar);
                rol_per.Where(q=>q.IdAuthRole==ar.Id).ToList().ForEach(y=>{
                    AuthPermission up=  per.First( p=> p.Id== y.IdAuthPermission);
                    if( permissions.IndexOf(up.Name) <0)
                        permissions.Add(up.Name);
                }) ;
            };
                               
            return new AuthorizationResponse(){
                Permissions= permissions,
                Roles= roles

            };
        }
예제 #8
0
		public static Response<Infante> Get(this Infante request, Factory factory, IHttpRequest httpRequest)
        {
			long? totalCount=null;

			var paginador= new Paginador(httpRequest);
            var queryString= httpRequest.QueryString;

            var predicate=PredicateBuilder.True<Infante>();

			var documento = queryString["Documento"];
			if(! documento.IsNullOrEmpty())
			{
				predicate= predicate.AndAlso(q=>q.Documento.StartsWith(documento));
			}

			var nombres= queryString["Nombres"];
			if(!nombres.IsNullOrEmpty())
				predicate= predicate.AndAlso(q=>q.Nombres.Contains(nombres));

			var apellidos= queryString["Apellidos"];
			if(!apellidos.IsNullOrEmpty())
				predicate= predicate.AndAlso(q=>q.Apellidos.Contains(apellidos));

			var visitor = ReadExtensions.CreateExpression<Infante>();
			visitor.Where(predicate);

			return factory.Execute(proxy=>{
				if(paginador.PageNumber.HasValue)
	            {
					visitor.Select(r=> Sql.Count(r.Id));
					totalCount= proxy.Count(visitor);
					visitor.Select();
	                int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
	                visitor.Limit(paginador.PageNumber.Value*rows, rows);
	            }
	                                
				visitor.OrderByDescending(r=> new { r.Nombres, r.Apellidos});

				return new Response<Infante>{
					Data=proxy.Get(visitor),
					TotalCount= totalCount
				};
			});
            
		}
예제 #9
0
		public static Response<Curso> Get(this Curso request, Factory factory, IHttpRequest httpRequest)
		{
			long? totalCount=null;

			var paginador= new Paginador(httpRequest);
            var queryString= httpRequest.QueryString;

            var predicate=PredicateBuilder.True<Curso>();

			var qv = queryString["Fecha"];
			if(! qv.IsNullOrEmpty())
			{
				DateTime fecha;
				if (DateTime.TryParse(qv, out fecha) )
				{
					var inicio= fecha.AddDays(-40);
					var fin = fecha.AddDays(40);
					predicate= predicate.AndAlso(q=>q.FechaInicio>=inicio &&
					                             q.FechaInicio<=fin);
				}
			}


			var visitor = ReadExtensions.CreateExpression<Curso>();
			visitor.Where(predicate);

			return factory.Execute(proxy=>{
				if(paginador.PageNumber.HasValue)
	            {
					visitor.Select(r=> Sql.Count(r.Id));
					totalCount= proxy.Count(visitor);
					visitor.Select();
	                int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
	                visitor.Limit(paginador.PageNumber.Value*rows, rows);
	            }
	                                
				visitor.OrderByDescending(r=> r.FechaInicio );

				return new Response<Curso>{
					Data=proxy.Get(visitor),
					TotalCount= totalCount
				};
			});
       
		}
예제 #10
0
		public static Response<Matricula> Post(this Matricula request, Factory factory,IHttpRequest httpRequest)
		{  
            request.CheckId(Operaciones.Create);

			if( request.IdIngreso.HasValue && request.IdIngreso.Value==default(int)) request.IdIngreso=null;
			if( request.IdClase.HasValue && request.IdClase.Value==default(int)) request.IdClase=null;

			var mr = new MatriculaResponse ();

			var queryString= httpRequest.QueryString;

            factory.Execute(proxy=>{

				proxy.Create<Matricula>(request);

				var data = proxy.Get<Matricula>(q=>	q.Id== request.Id);

				bool crearItems;
                if (bool.TryParse( queryString["CrearItems"], out crearItems) && crearItems){
					var tarifas = proxy.Get<Tarifa>(q=>q.IdSucursal== request.IdSucursal &&
					                                q.IdCentro==request.IdCentro && 
					                                q.Activo==true &&
					                                q.IncluirEnMatricula==true);


					foreach(Tarifa tarifa in tarifas){
						var mi = new MatriculaItem(){
							IdMatricula=request.Id,
							IdTarifa= tarifa.Id,
							Valor= tarifa.Valor,
							Descripcion= tarifa.Descripcion
						};

						proxy.Create<MatriculaItem>(mi);
						mr.MatriculaItemList.Add(mi);
					}
					mr.TarifaList= tarifas;
				}

				mr.Data=data;

            });
			return mr;
		}
예제 #11
0
        public static Response<Contacto> Post(this Contacto request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
			if(request.IdCliente==default(int))
				throw HttpError.Unauthorized("Debe Indicar el IdCliente");

			if(request.Nombre.IsNullOrEmpty() || request.Nombre.Trim()=="")
			throw HttpError.Unauthorized("Debe Indicar el Nombre del Contacto");

			factory.Execute(proxy=>{
				proxy.Create(request);
			});

			List<Contacto> data = new List<Contacto>();
			data.Add(request);
			
			return new Response<Contacto>(){
				Data=data
			};	
		}
예제 #12
0
		public static Response<Clase> Get(this Clase request, Factory factory, IHttpRequest httpRequest)
		{
			long? totalCount=null;

			var paginador= new Paginador(httpRequest);
            var queryString= httpRequest.QueryString;

            var predicate=PredicateBuilder.True<Clase>();

			var qv = queryString["Activo"];
			if(! qv.IsNullOrEmpty())
			{
				bool activo;
				if (bool.TryParse(qv, out activo) )
					predicate= predicate.AndAlso(q=>q.Activo==activo);
			}


			var visitor = ReadExtensions.CreateExpression<Clase>();
			visitor.Where(predicate);

			return factory.Execute(proxy=>{
				if(paginador.PageNumber.HasValue)
	            {
					visitor.Select(r=> Sql.Count(r.Id));
					totalCount= proxy.Count(visitor);
					visitor.Select();
	                int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
	                visitor.Limit(paginador.PageNumber.Value*rows, rows);
	            }
	                                
				visitor.OrderByDescending(r=> r.Nombre );

				return new Response<Clase>{
					Data=proxy.Get(visitor),
					TotalCount= totalCount
				};
			});
       
		}
예제 #13
0
        public static Response<Pedido> Post(this Pedido request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
			factory.Execute(proxy=>{

				var session = httpRequest.GetSession();

				request.IdCreadoPor= int.Parse(session.UserAuthId);
				request.Id=0;
				request.FechaAceptacion=null;
				request.FechaEnvio=null;
				request.FechaAnulado=null;
				request.FechaCreacion=DateTime.Today;
				request.FechaActualizacion=request.FechaCreacion;
				request.IdAceptadoPor=null;
				request.IdAnuladoPor=null;
				request.IdEnviadoPor=null;

				var fp = proxy.CheckExistAndActivo<FormaPago>(request.IdFormaPago, f=>f.Descripcion);
				request.DescripcionFormaPago= fp.Descripcion;

				var contacto = proxy.CheckExistAndActivo<Contacto>(request.IdContacto, f=>f.Nombre);
				request.NombreContacto= contacto.Nombre;

				var ciudad = CheckCiudad(proxy, request);
				request.NombreCiudad= ciudad.Nombre;
				request.CodigoCiudad= ciudad.Codigo;

				var cliente= proxy.CheckExistAndActivo<Cliente>(contacto.IdCliente, f=>f.Nombre);
				request.NitCliente=cliente.Nit;
				request.NombreCliente= cliente.Nombre;

				using (proxy.AcquireLock(Consecutivo.GetLockKey(BL.Cotizacion), BL.LockSeconds))
                {
					proxy.BeginDbTransaction();
					request.Consecutivo= proxy.GetNext(BL.Cotizacion).Valor;
					proxy.Create(request);
					proxy.CommitDbTransaction();
				}

			});

			List<Pedido> data = new List<Pedido>();
			data.Add(request);
			
			return new Response<Pedido>(){
				Data=data
			};	
		}
예제 #14
0
        public static Response<Pedido> Patch(this Pedido request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
			List<string> actions = new List<string>(new string[]{"ENVIAR","ACEPTAR","ANULAR"});

			var action= httpRequest.PathInfo.Substring(httpRequest.PathInfo.LastIndexOf("/")+1).ToUpper();

			if(actions.IndexOf(action)<0)
				throw HttpError.Unauthorized(string.Format("Operacion: '{0}' no autorizada en Ofertas", action));

			var session = httpRequest.GetSession();

			factory.Execute(proxy=>{

				using (proxy.AcquireLock(request.GetLockKey(), BL.LockSeconds))
                {

					var old = proxy.FirstOrDefaultById<Pedido>(request.Id);

					var userSesssion= httpRequest.GetSession();

					if(!(old.IdCreadoPor== int.Parse(userSesssion.UserAuthId)
					   || userSesssion.HasRole(BL.RoleCoordinador)))

						throw HttpError.Unauthorized(string.Format("Usuario '{0}' No puede  ejecutar '{1}' en las ofertas creadas por:'{2}' ",
						                                           userSesssion.UserName,action, old.NombreCreadoPor));


					if( old==default(Pedido)){
						throw HttpError.NotFound(string.Format("No existe Oferta con Id: '{0}'", request.Id));
					}

					if(old.FechaAnulado.HasValue){
						throw HttpError.Unauthorized(string.Format("Operacion:'{0}' No permitida. Oferta '{1}' Id:'{2} se encuentra anulada",action, request.Consecutivo, request.Id));
					}




					request.PopulateWith(old);

					if(action=="ENVIAR")
					{
						if(old.FechaEnvio.HasValue)
							throw HttpError.Conflict("Oferta ya se encuentra en estado Enviada");
						request.FechaEnvio=DateTime.Today;
						request.IdEnviadoPor= int.Parse(session.UserAuthId);
					}
					else if (action=="ACEPTAR")
					{
						if(old.FechaAceptacion.HasValue)
							throw HttpError.Conflict("Oferta ya se encuentra en estado Aceptada");

						if(!old.FechaEnvio.HasValue)
							throw HttpError.Conflict("La Oferta primero debe ser enviada");

						request.FechaAceptacion=DateTime.Today;
						request.IdAceptadoPor= int.Parse(session.UserAuthId);
					}
					else
					{
						request.FechaAnulado= DateTime.Today;
						request.IdAnuladoPor= int.Parse(session.UserAuthId);
					}

					proxy.Update(request, ev=>ev.Update(
						f=> new {
						f.FechaEnvio,f.FechaAceptacion,f.FechaAnulado, f.VigenteHasta,
						f.IdAceptadoPor, f.IdAnuladoPor, f.IdEnviadoPor
					}).Where(q=>q.Id==request.Id));
				}

			});

			List<Pedido> data = new List<Pedido>();
			data.Add(request);
			
			return new Response<Pedido>(){
				Data=data
			};	
		}
예제 #15
0
        public static Response<Egreso> Put(this Egreso request,
                                              Factory factory,
                                              IAuthSession authSession)                                
        {

            // TODO :  si cambio cambiar el Tercero y si el  Nro. Dto viene vacio traer Numero del nuevo Tercero...

            request.ValidateAndThrowHttpError(Definiciones.CheckRequestBeforeUpdate);
            var idUsuario = int.Parse(authSession.UserAuthId);

            factory.Execute(proxy=>{
                using(proxy.AcquireLock(request.GetLockKey(), Definiciones.LockSeconds))
                {
                    Egreso oldData= DAL.GetEgresoById(proxy, request.Id);
                    oldData.AssertExists(request.Id);
                    CheckOldAndNew(oldData, request, proxy, idUsuario );
                    request.Update(proxy);

                    //Action<DALProxy> action=(p)=>request.Update(p);
                    //Action<DALProxy> action= request.Update;
                    //proxy.ExecuteUpdate(action,request,oldData); // me permite ejecutar con  o sin triggers
                }
            });

            List<Egreso> data = new List<Egreso>();
            data.Add(request);
            
            return new Response<Egreso>(){
                Data=data
            };  
            
        }
예제 #16
0
        public static Response<Pedido> Put(this Pedido request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
			factory.Execute(proxy=>{
				using (proxy.AcquireLock(request.GetLockKey(), BL.LockSeconds))
                {
					var old = proxy.FirstOrDefaultById<Pedido>(request.Id);

					if( old==default(Pedido)){
						throw HttpError.NotFound(string.Format("No existe Oferta con Id: '{0}'", request.Id));
					}

					if(old.FechaEnvio.HasValue){
						throw HttpError.Unauthorized(string.Format("Oferta '{0}' Id:'{1} No puede ser Actualizada. Estado:Enviado ", request.Consecutivo, request.Id));
					}

					if(old.FechaAnulado.HasValue){
						throw HttpError.Unauthorized(string.Format("Oferta '{0}' Id:'{1} No puede ser Actualizada. Estado:Anulado ", request.Consecutivo, request.Id));
					}

					var userSesssion= httpRequest.GetSession();

					if(!(old.IdCreadoPor== int.Parse(userSesssion.UserAuthId)
					   || userSesssion.HasRole(BL.RoleCoordinador)))

						throw HttpError.Unauthorized(string.Format("Usuario '{0}' No puede actualizar las ofertas creadas por:'{1}' ",
						                                           userSesssion.UserName, old.NombreCreadoPor));

					request.FechaActualizacion= DateTime.Today;

					if(request.IdCiudadDestinatario!=default(int) &&
						request.IdCiudadDestinatario!=old.IdCiudadDestinatario){

						var ciudad = CheckCiudad(proxy, request);
						request.NombreCiudad= ciudad.Nombre;
						request.CodigoCiudad= ciudad.Codigo;
					}


					if(request.IdFormaPago!=default(int) &&
					   request.IdFormaPago!=old.IdFormaPago)
					{
						var fp = proxy.CheckExistAndActivo<FormaPago>(request.IdFormaPago, f=>f.Descripcion);
						request.DescripcionFormaPago= fp.Descripcion;
					}

					if(request.IdContacto!=default(int) &&
					   request.IdContacto!=old.IdContacto)
					{
						var contacto = proxy.CheckExistAndActivo<Contacto>(request.IdContacto, f=>f.Nombre);
						request.NombreContacto= contacto.Nombre;

						var cliente= proxy.CheckExistAndActivo<Cliente>(contacto.IdCliente, f=>f.Nombre);
						request.NitCliente=cliente.Nit;
						request.NombreCliente= cliente.Nombre;
					}

					proxy.Update(request,ev=>ev.Update(f=> 
					    new {
							f.IncluyeGastosEnvio, f.Observacion,
							f.CargoDestinatario, f.CelularDestinatario, f.DiasDeVigencia,
							f.DireccionDestinatario, f.FaxDestinatario, f.IdCiudadDestinatario,f.IdContacto,
							f.IdFormaPago,f.MailDestinatario, f.NitCliente, f.NombreDestinatario,f.TelefonoDestinatario,
							f.FechaActualizacion
						}).Where(q=>q.Id==request.Id)
					);

				}
			});

			List<Pedido> data = new List<Pedido>();
			data.Add(request);
			
			return new Response<Pedido>(){
				Data=data
			};	
		}
예제 #17
0
        // TODO:   No permitir Valor < 0 ??? confirmar .... seria una devolucion ?
        #region Post        
        public static Response<ComprobanteEgreso> Post(this ComprobanteEgreso request,
                                            Factory factory,
                                            IAuthSession authSession)
        {
			if(request.IdTerceroReceptor==default(int)){
				request.IdTerceroReceptor= request.IdTercero;
			}

            request.ValidateAndThrowHttpError(Operaciones.Create);
            var idUsuario = int.Parse(authSession.UserAuthId);
            request.Periodo= request.Fecha.ObtenerPeriodo();

            factory.Execute(proxy=>{

                var sucursal= request.CheckSucursal(proxy,idUsuario);
                var tercero =request.CheckTercero(proxy);
				Tercero tr = default(Tercero);
				if( request.IdTercero!=request.IdTerceroReceptor)
                	tr= request.CheckTerceroReceptor(proxy);
				else
					tr=tercero;

                request.CheckPeriodo(proxy);
                var pi = request.CheckUsuarioGiradora(proxy,int.Parse(authSession.UserAuthId)); 

                using (proxy.AcquireLock(request.GetLockKeyConsecutivo(), Definiciones.LockSeconds))
                {
                    proxy.BeginDbTransaction();
                    request.AsignarConsecutivo(proxy);
                    request.Create(proxy);
                    proxy.CommitDbTransaction();
                }

				request.NombreSucursal=sucursal.Nombre;

                request.NombreTercero=tercero.Nombre;
                request.DocumentoTercero= tercero.Documento;
                request.NombreDocumentoTercero= tercero.NombreDocumento;
                request.DVTercero= tercero.DigitoVerificacion;

                request.DocumentoReceptor= tr.Documento;
                request.NombreDocumentoReceptor= tr.NombreDocumento;
                request.NombreReceptor=tr.Nombre;
                request.DVReceptor= tr.DigitoVerificacion;

				request.CodigoItem= pi.Codigo;
				request.NombreItem = pi.Nombre;

            });
        
            var data = new List<ComprobanteEgreso>();
            data.Add(request);
            
            return new Response<ComprobanteEgreso>(){
                Data=data
            };  
            
        }
예제 #18
0
		void ConfigureApp(Container container){

			var appSettings = new ConfigurationResourceManager();
                    
            double se= appSettings.Get("DefaultSessionExpiry", 480);
            AuthProvider.DefaultSessionExpiry=TimeSpan.FromMinutes(se);         
                                   
            string cacheHost= appSettings.Get("REDISTOGO_URL","localhost:6379").Replace("redis://redistogo-appharbor:","").Replace("/","");

            var redisClientManager = new BasicRedisClientManager(new string[]{cacheHost});
            
			OrmLiteConfig.DialectProvider= MySqlDialectProvider.Instance;
            
            IDbConnectionFactory dbFactory = new OrmLiteConnectionFactory(
                ConfigUtils.GetConnectionString("ApplicationDb"));
            
			var factory = new Factory(){
                DbFactory=dbFactory,
                RedisClientsManager = redisClientManager
			};

			var empresa = factory.Execute(proxy=>{
				return proxy.GetEmpresa();
			});

			var mailer = new Mailer(empresa);

			Channel channel = new Channel(empresa.PublishKey,
			                              empresa.SubscribeKey, empresa.SecretKey,"",false);

				
			container.Register(channel);
            container.Register(new AppConfig(appSettings){MailLogToken=empresa.MailLogToken});
            container.Register<Factory>(factory);
			container.Register(mailer);
            //container.Register<ICacheClient>(new MemoryCacheClient { FlushOnDispose = false });
            container.Register<IRedisClientsManager>(c => redisClientManager);
                        
            Plugins.Add(new AuthFeature(
                 () => new AuthUserSession(), // or Use your own typed Custom AuthUserSession type
                new IAuthProvider[]
            {
                new AuthenticationProvider(){SessionExpiry=TimeSpan.FromMinutes(se)}

            })
            {
                IncludeAssignRoleServices=false, 
            });
                            
            
            OrmLiteAuthRepository authRepo = new OrmLiteAuthRepository(
                dbFactory
            );
            
            container.Register<IUserAuthRepository>(
                c => authRepo
            ); 

            
            if(appSettings.Get("EnableRegistrationFeature", false))
                Plugins.Add( new  RegistrationFeature());
						
		}
예제 #19
0
		public static Response<Egreso> Post(this Egreso request,
                                            Factory factory,
                                            IAuthSession authSession)
		{
            request.ValidateAndThrowHttpError(Operaciones.Create);
            var idUsuario = int.Parse(authSession.UserAuthId);
            request.Periodo= request.Fecha.ObtenerPeriodo();
            if(request.IdTerceroReceptor.HasValue && request.IdTerceroReceptor.Value==default(int))
                request.IdTerceroReceptor=null;

            factory.Execute(proxy=>{

                var sucursal=request.CheckSucursal(proxy,idUsuario);

                var tercero=request.CheckTercero(proxy);
                Tercero tr= default(Tercero);
                if(request.IdTerceroReceptor.HasValue)
                {

                    if(request.IdTerceroReceptor!=request.IdTercero)
                        tr= request.CheckTerceroReceptor(proxy);
                    else
                        tr= tercero;
                }


                request.CheckCodigoDocumento(proxy);
                request.CheckPeriodo(proxy);

                request.NombreSucursal=sucursal.Nombre;

                request.NombreTercero=tercero.Nombre;
                request.DocumentoTercero= tercero.Documento;
                request.NombreDocumentoTercero= tercero.NombreDocumento;
                request.DVTercero= tercero.DigitoVerificacion;

                if(tr!=default(Tercero))
                {
                    request.DocumentoReceptor= tr.Documento;
                    request.NombreDocumentoReceptor= tr.NombreDocumento;
                    request.NombreReceptor=tr.Nombre;
                    request.DVReceptor= tr.DigitoVerificacion;
                }

                using (proxy.AcquireLock(request.GetLockKeyConsecutivo(), Definiciones.LockSeconds))
                {
                    // TODO : Revisar documento si es vacio y CC traer numero de Tercero
                    proxy.BeginDbTransaction();
                    request.AsignarConsecutivo(proxy);
                    request.Create(proxy);
                    proxy.CommitDbTransaction();
                }
            });
		
			List<Egreso> data = new List<Egreso>();
			data.Add(request);
			
			return new Response<Egreso>(){
				Data=data
			};	
			
		}
예제 #20
0
        public static Response<ComprobanteEgreso> Put(this ComprobanteEgreso request,
                                              Factory factory,
                                              IAuthSession authSession)                                
        {

            // TODO :  si cambio cambiar el Tercero y si el  Nro. Dto viene vacio traer Numero del nuevo Tercero...

            request.ValidateAndThrowHttpError(Definiciones.CheckRequestBeforeUpdate);
            var idUsuario = int.Parse(authSession.UserAuthId);

            factory.Execute(proxy=>{
                using(proxy.AcquireLock(request.GetLockKey(), Definiciones.LockSeconds))
                {
                    ComprobanteEgreso oldData= DAL.GetComprobanteEgreso(proxy, request.Id);
                    oldData.AssertExists(request.Id);
                    CheckOldAndNew(oldData, request, proxy, idUsuario );
                    request.Actualizar(proxy);
                }
            });

            var data = new List<ComprobanteEgreso>();
            data.Add(request);
            
            return new Response<ComprobanteEgreso>(){
                Data=data
            };  
            
        }
예제 #21
0
		public static AuthorizationResponse GetAuthorizations(this Authorization request, 
		                                           Factory factory, IRequestContext requestContext){
			
			var httpRequest = requestContext.Get<IHttpRequest>();	
			IAuthSession session = httpRequest.GetSession();
						
			if (!session.HasRole(RoleNames.Admin))
			{
				request.UserId= int.Parse(session.UserAuthId);
			}
			
			List<AuthRole> roles = new List<AuthRole>();
			List<string> permissions= new List<string>();
			
            List<AuthRoleUser> aur= new List<AuthRoleUser>();
            List<AuthRole> rol = new List<AuthRole>();
            List<AuthPermission> per = new List<AuthPermission>();
            List<AuthRolePermission> rol_per = new List<AuthRolePermission>();
            List<UsuarioSucursalCentro> usc= new List<UsuarioSucursalCentro>();
            List<Sucursal> sucursales = new List<Sucursal>();
            List<Centro> centros = new List<Centro>(); 

            List<SucursalAutorizada> sa = new List<SucursalAutorizada>();
            List<CentroAutorizado> ca = new List<CentroAutorizado>();

            List<CodigoDocumento> cd = new List<CodigoDocumento>();
            List<Rubro> rubros = new List<Rubro>();
			List<Ciudad> ciudades = new List<Ciudad>();
			List<TipoDocumento> tipos = new List<TipoDocumento>();

            factory.Execute(proxy=>
            {
                aur= proxy.GetByIdUsuarioFromCache<AuthRoleUser>(request.UserId);
                rol= proxy.GetFromCache<AuthRole>();
                per= proxy.GetFromCache<AuthPermission>();
                rol_per= proxy.GetFromCache<AuthRolePermission>();
                usc= proxy.GetByIdUsuarioFromCache<UsuarioSucursalCentro>(request.UserId);
                sucursales= proxy.GetFromCache<Sucursal>();
                centros= proxy.GetFromCache<Centro>();
                cd= proxy.Get<CodigoDocumento>();

                foreach( var r in aur)
                {
                    AuthRole ar= rol.First(x=>x.Id== r.IdAuthRole);
                    roles.Add(ar);
                    rol_per.Where(q=>q.IdAuthRole==ar.Id).ToList().ForEach(y=>{
                        AuthPermission up=  per.First( p=> p.Id== y.IdAuthPermission);
                        if( permissions.IndexOf(up.Name) <0)
                            permissions.Add(up.Name);
                    }) ;
                };
                                    
                foreach(UsuarioSucursalCentro item in usc){
                    
                    Sucursal s= sucursales.FirstOrDefault(r=> r.Id== item.IdSucursal && r.Activo);
                    
                    if(s!=default(Sucursal) && sa.FirstOrDefault(x=>x.Id==s.Id)== default(SucursalAutorizada))
                        sa.Add(new SucursalAutorizada(){Id=s.Id, Codigo=s.Codigo, Nombre=s.Nombre});
                    
                    Centro c= centros.FirstOrDefault(r=> r.Id== item.IdCentro && r.Activo);
                    
                    if(c!=default(Centro))
                        ca.Add(new CentroAutorizado(){Id=c.Id, Codigo=c.Codigo, Nombre=c.Nombre, IdSucursal=item.IdSucursal});
                }

                var predicate = PredicateBuilder.False<Rubro>();
                foreach( var rca in ca){
                    int c= rca.Id;
                    int s = rca.IdSucursal;
                    predicate= predicate.OrElse(r=>r.IdSucursal==s && r.IdCentro==c);
                }

                Expression<Func<Rubro, bool>> predicate2= r=>r.Activo && r.PresupuestoActivo && r.Codigo.Contains(".");
                predicate= predicate.AndAlso(predicate2);

                rubros= proxy.Get<Rubro>(predicate);

				ciudades = proxy.Get<Ciudad>();
				tipos = proxy.Get<TipoDocumento>();

            });
			
			return new AuthorizationResponse(){
				Permissions= permissions,
				Roles= roles,
				Sucursales= sa,
				Centros= ca,
                CodigosDocumento=cd,
                Rubros=rubros,
				Ciudades=ciudades,
				TiposDocumento= tipos
			};
		}			
예제 #22
0
        public static Response<Ingreso> Get(this Ingreso request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
            return factory.Execute(proxy=>{

				long? totalCount=null;

				var paginador= new Paginador(httpRequest);
            	var queryString= httpRequest.QueryString;

                var predicate=PredicateBuilder.True<Ingreso>();

                var periodo= queryString["Periodo"];
				if(! periodo.IsNullOrEmpty()) //periodo= DateTime.Today.ObtenerPeriodo();
				{
	                if (periodo.Length==6)
	                    predicate= q=>q.Periodo==periodo;
	                else
	                    predicate= q=>q.Periodo.StartsWith(periodo) ;
				}

				var p =queryString["IdSucursal"];
				if(!p.IsNullOrEmpty())
				{
					int idSucursal;
					if(int.TryParse(p,out idSucursal) && idSucursal!=default(int))
						predicate= predicate.AndAlso(q=>q.IdSucursal==idSucursal);
				}

				p=queryString["IdTercero"];
				if(!p.IsNullOrEmpty())
				{
					int idTercero;
					if(int.TryParse(p,out idTercero) && idTercero!=default(int))
						predicate= predicate.AndAlso(q=>q.IdTercero==idTercero);
				}

                var nombre= queryString["NombreTercero"];
                if(!nombre.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.NombreTercero.Contains(nombre));

				var sucursal= queryString["NombreSucursal"];
                if(!sucursal.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.NombreSucursal.Contains(sucursal));

				p= queryString["Asentado"];
            	if(!p.IsNullOrEmpty())
           		{
                	bool asentado;
	                if( bool.TryParse(p,out asentado))
	                {
						if(asentado)
							predicate= predicate.AndAlso(q=>q.FechaAsentado!=null);
						else
							predicate= predicate.AndAlso(q=>q.FechaAsentado==null);
	                }
	            }

				p= queryString["ConSaldo"];
            	if(!p.IsNullOrEmpty())
           		{
                	bool saldo;
	                if( bool.TryParse(p,out saldo))
	                {
						if (saldo) predicate= predicate.AndAlso(q=>q.Saldo!=0);
						else predicate= predicate.AndAlso(q=>q.Saldo==0);
	                }
	            }

                var visitor = ReadExtensions.CreateExpression<Ingreso>();
				visitor.Where(predicate);
                if(paginador.PageNumber.HasValue)
                {
					visitor.Select(r=> Sql.Count(r.Id));
					totalCount= proxy.Count(visitor);
					visitor.Select();
                    int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
                    visitor.Limit(paginador.PageNumber.Value*rows, rows);
                }
                                
                visitor.OrderByDescending(r=>r.Numero);
                
				return new Response<Ingreso>(){
                	Data=proxy.Get(visitor),
                	TotalCount=totalCount
            	};
            });  
        }
예제 #23
0
        public static Response<Ingreso> Put(this Ingreso request,
                                              Factory factory,
                                              IAuthSession authSession)                                
        {

            request.ValidateAndThrowHttpError(Definiciones.CheckRequestBeforeUpdate);
            var idUsuario = int.Parse(authSession.UserAuthId);

            factory.Execute(proxy=>{
                using(proxy.AcquireLock(request.GetLockKey(), Definiciones.LockSeconds))
                {
                    Ingreso oldData=proxy.FirstOrDefaultById<Ingreso>( request.Id);
                    oldData.AssertExists(request.Id);
                    CheckOldAndNew(oldData, request, proxy, idUsuario );
                    request.Update(proxy);
                }
            });

            List<Ingreso> data = new List<Ingreso>();
            data.Add(request);
            
            return new Response<Ingreso>(){
                Data=data
            };  
            
        }
예제 #24
0
		public static Response<Ingreso> Post(this Ingreso request,
                                            Factory factory,
                                            IAuthSession authSession)
		{
            request.ValidateAndThrowHttpError(Operaciones.Create);
            var idUsuario = int.Parse(authSession.UserAuthId);
            request.Periodo= request.Fecha.ObtenerPeriodo();
         
            factory.Execute(proxy=>{

                var sucursal=request.CheckSucursal(proxy,idUsuario);

                var tercero=request.CheckTercero(proxy);
                
                request.CheckCodigoDocumento(proxy);
                request.CheckPeriodo(proxy);

                request.NombreSucursal=sucursal.Nombre;

                request.NombreTercero=tercero.Nombre;
                request.DocumentoTercero= tercero.Documento;
                request.NombreDocumentoTercero= tercero.NombreDocumento;
                request.DVTercero= tercero.DigitoVerificacion;

                using (proxy.AcquireLock(request.GetLockKeyConsecutivo(), Definiciones.LockSeconds))
                {
                    proxy.BeginDbTransaction();
                    request.AsignarConsecutivo(proxy);
					request.AsignarDocumento(proxy);
                    request.Create(proxy);
                    proxy.CommitDbTransaction();
                }
            });
		
			List<Ingreso> data = new List<Ingreso>();
			data.Add(request);
			
			return new Response<Ingreso>(){
				Data=data
			};	
			
		}
예제 #25
0
        public static Response<Tercero> Get(this Tercero request,
                                           Factory factory,
                                           IHttpRequest httpRequest)
        {
            return factory.Execute(proxy=>{

				var paginador= new Paginador(httpRequest);
            	var queryString= httpRequest.QueryString;

            	long? totalCount=null;

                Expression<Func<Tercero, bool>> predicate;

                int id;
                if(int.TryParse(queryString["Id"], out id))
                    predicate=q=>q.Id== id;                          
                else
                    predicate= PredicateBuilder.True<Tercero>();

                bool activo;
                if (bool.TryParse( queryString["Activo"], out activo))
                    predicate= predicate.AndAlso( q=>q.Activo== activo);                          

                var documento= queryString["Documento"];
                if(!documento.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.Documento.StartsWith(documento));

                var nombre= queryString["Nombre"];
                if(!nombre.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.Nombre.Contains(nombre));

                bool esAuto;
                if(bool.TryParse(queryString["EsAutoRetenedor"],out esAuto))
                    predicate=predicate.AndAlso( q=>q.EsAutoRetenedor==esAuto);

                Expression<Func<Tercero, bool>> predicate2=null;

                bool esCliente;
                if(bool.TryParse(queryString["EsCliente"],out esCliente))
                    predicate2= q=>q.EsCliente==esCliente;

                bool esEmpleado;
                if(bool.TryParse(queryString["EsEmpleado"],out esEmpleado))
                {
                    if(predicate2==null) predicate2= q=>q.EsEmpleado==esEmpleado;
                    else predicate2= predicate2.OrElse(q=>q.EsEmpleado==esEmpleado);
                }

                bool esEps;
                if(bool.TryParse(queryString["EsEps"],out esEps))
                {
                    if(predicate2==null) predicate2= q=>q.EsEps==esEps;
                    else predicate2= predicate2.OrElse(q=>q.EsEps==esEps);
                }

                bool esFp;
                if(bool.TryParse(queryString["EsFp"],out esFp))
                {
                    if(predicate2==null) predicate2= q=>q.EsFp==esFp;
                    else predicate2= predicate2.OrElse(q=>q.EsFp==esFp);
                }

                bool esPF;
                if(bool.TryParse(queryString["EsParafiscal"],out esPF))
                {
                    if(predicate2==null) predicate2= q=>q.EsParafiscal==esPF;
                    else predicate2= predicate2.OrElse(q=>q.EsParafiscal==esPF);
                }

                bool esPr;
                if(bool.TryParse(queryString["EsProveedor"],out esPr))
                {
                    if(predicate2==null) predicate2= q=>q.EsProveedor==esPr;
                    else predicate2= predicate2.OrElse(q=>q.EsProveedor==esPr);
                }

                if(predicate2!=null) 
                    predicate= predicate.AndAlso(predicate2);

                var visitor = ReadExtensions.CreateExpression<Tercero>();
				visitor.Where(predicate);

                if(paginador.PageNumber.HasValue)
                {
					visitor.Select(r=> Sql.Count(r.Id));
                    totalCount= proxy.Count(visitor);
					visitor.Select();
                    int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
                    visitor.Limit(paginador.PageNumber.Value*rows, rows);
                }
                                
                visitor.OrderBy(r=>r.Nombre);
                
				return new Response<Tercero>(){
                	Data=proxy.Get(visitor),
                	TotalCount=totalCount
            	};

            });

                        
            

        }
예제 #26
0
        public static Response<ComprobanteEgreso> Patch(this ComprobanteEgreso request,
                                             Factory factory,
                                             IAuthSession authSession,
                                             string action)
        {
            int factor;
            string operacion;
            string rule;
            Action<DALProxy> toDo=null;

            if(action=="asentar")
            {
                rule=Definiciones.CheckRequestBeforeAsentar;
                operacion= Operaciones.Asentar;
                factor=1;
                toDo= request.Asentar;
            }
            else if(action=="reversar")
            {
                rule=Definiciones.CheckRequestBeforeReversar;
                operacion= Operaciones.Reversar;
                factor=-1;
                toDo=request.Reversar;
            }
            else if(action=="anular")
            {
                 rule= Definiciones.CheckRequestBeforeAnular;
                 operacion= Operaciones.Anular;
                 factor=0;
            }
            else
                throw new HttpError(string.Format("Operacion:'{0}' NO implementada para ComprobanteEgreso",
                                                      action ));            
            
            var idUsuario = int.Parse(authSession.UserAuthId);

            factory.Execute(proxy=>{
                using(proxy.AcquireLock(request.GetLockKey(), Definiciones.LockSeconds))
                {
                    ComprobanteEgreso oldData= DAL.GetComprobanteEgreso(proxy, request.Id);
					oldData.ValidateAndThrowHttpError(rule);
                    oldData.AssertExists(request.Id);
                    CheckBeforePatch(oldData, request, proxy, idUsuario, operacion);

                    if(factor==0)
                    {
                        proxy.BeginDbTransaction();
                        request.Anular(proxy,"Anulado por Usuario");
                        proxy.CommitDbTransaction();
                        return;
                    }

                    List<ComprobanteEgresoItem> items = request.GetItems(proxy);

                    proxy.BeginDbTransaction();
                    #region ActualizarCuentaPorPagar
                    foreach(ComprobanteEgresoItem cei in items)
                    {
                        using (proxy.AcquireLock(cei.IdEgreso.GetLockKey<Egreso>(), Definiciones.LockSeconds))
                        {
                            var egreso = DAL.GetEgresoById(proxy, cei.IdEgreso);

							if(operacion=="asentar")
							{
                            	var ece= new EgresoCE(){Egreso=egreso, Cei= cei};
                            	var ecv= new EgresoCEValidator();
                            	ecv.ValidateAndThrowHttpError(ece, Operaciones.ActualizarValorEgresoAlAsentarCE);
							}

                            egreso.Saldo= egreso.Saldo-( cei.Abono*factor);
                            egreso.ActualizarValorSaldo(proxy);

                            var  prs= DAL.GetPresupuestoActivo(proxy,request.IdSucursal,Definiciones.IdCentroGeneral);
                            prs.AssertExistsActivo(request.IdSucursal, Definiciones.IdCentroGeneral);

                            CodigoDocumento cd = proxy.GetCodigoDocumento(egreso.CodigoDocumento);
                            cd.AssertExists(egreso.CodigoDocumento);
                            cd.AssertEstaActivo();

                            //urn:PresupuestoItem:IdPresupuesto:{0}:Codigo:{1}"
                            using(proxy.AcquireLock(prs.GetLockKey(cd.CodigoPresupuesto), Definiciones.LockSeconds))
                            {
                                var pi= prs.GetPresupuestoItem(proxy,cd.CodigoPresupuesto);
                                pi.AssertExists(prs.Id,cd.CodigoPresupuesto );
                                pi.UpdatePresupuesto(proxy,request.IdSucursal,Definiciones.IdCentroGeneral,
                                                     request.Periodo,
                                                     (cei.Abono>0?(short)1:(short)2),
                                                     Math.Abs(cei.Abono)*factor,request.IdTercero);
                            }

                            var retList = cei.GetRetenciones(proxy);
                            foreach(ComprobanteEgresoRetencion ret in retList)
                            {
                                using(proxy.AcquireLock(ret.IdPresupuestoItem.GetLockKey<PresupuestoItem>(), Definiciones.LockSeconds))
                                {
                                    var pi= DAL.GetPresupuestoItem(proxy,ret.IdPresupuestoItem);
                                    pi.AssertExists(ret.IdPresupuestoItem);
                                    pi.UpdatePresupuesto(proxy, request.IdSucursal,
                                                         Definiciones.IdCentroGeneral,request.Periodo,
                                                         (ret.Valor>0?(short)2:(short)1), 
                                                         Math.Abs(ret.Valor)*factor, null);
                                }
                            }
                        }

                    }
                    //Actualizar Valor en Comprobante Egreso  NO
                    // Actualizar el presupuesto_item  de la cuenta giradora....

                    using(proxy.AcquireLock(request.IdCuentaGiradora.GetLockKey<PresupuestoItem>(), Definiciones.LockSeconds))
                    {
                        var pi= DAL.GetPresupuestoItem(proxy,request.IdCuentaGiradora);
                        pi.AssertExists(request.IdCuentaGiradora);

                        pi.UpdatePresupuesto(proxy, request.IdSucursal,
                                             Definiciones.IdCentroGeneral,request.Periodo,
                                             (request.Valor>0?(short)2:(short)1),
                                             request.Valor*factor, request.IdTerceroGiradora);
                    }

                    //}
                    #endregion ActualizarCuentaPorPagar

                    toDo(proxy);
                    proxy.CommitDbTransaction();

                }
            });


                    
            List<ComprobanteEgreso> data = new List<ComprobanteEgreso>();
            data.Add(request);
            
            return new Response<ComprobanteEgreso>(){
                Data=data
            };  
            
        }
예제 #27
0
        public static Response<Contacto> Delete(this Contacto request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
			factory.Execute(proxy=>{
				proxy.Delete<Contacto>(q=>q.Id==request.Id);
			});

			List<Contacto> data = new List<Contacto>();
			data.Add(request);
			
			return new Response<Contacto>(){
				Data=data
			};	
		}
예제 #28
0
        public static Response<ComprobanteEgreso> Get(this ComprobanteEgreso request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
            return factory.Execute(proxy=>{

				long? totalCount=null;

				var paginador= new Paginador(httpRequest);
            	var queryString= httpRequest.QueryString;

                Expression<Func<ComprobanteEgreso, bool>> predicate;

				var periodo= queryString["Periodo"];
				if(periodo.IsNullOrEmpty()) periodo= DateTime.Today.ObtenerPeriodo();
                if (periodo.Length==6)
                    predicate= q=>q.Periodo==periodo;
                else
                    predicate= q=>q.Periodo.StartsWith(periodo) ;

				var nombre= queryString["NombreTercero"];
                if(!nombre.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.NombreTercero.Contains(nombre));

				var sucursal= queryString["NombreSucursal"];
                if(!sucursal.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.NombreSucursal.Contains(sucursal));

				string asentado= queryString["Asentado"];
            	if(!asentado.IsNullOrEmpty())
           		{
                	bool tomarSoloAsentado;
	                if( bool.TryParse(asentado,out tomarSoloAsentado))
	                {
						if(tomarSoloAsentado)
							predicate= predicate.AndAlso(q=>q.FechaAsentado!=null);
						else
							predicate= predicate.AndAlso(q=>q.FechaAsentado==null);
	                }
	            }

                var visitor = ReadExtensions.CreateExpression<ComprobanteEgreso>();
				visitor.Where(predicate);

                if(paginador.PageNumber.HasValue)
                {
					visitor.Select(r=> Sql.Count(r.Id));
                    totalCount= proxy.Count(visitor);
					visitor.Select();
                    int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
                    visitor.Limit(paginador.PageNumber.Value*rows, rows);
                }
                                
                visitor.OrderByDescending(r=>r.Numero);      

				return new Response<ComprobanteEgreso>(){
                	Data=proxy.Get(visitor),
                	TotalCount=totalCount
            	};

            });

        }
예제 #29
0
        public static Response<Ingreso> Patch(this Ingreso request,
                                             Factory factory,
                                             IAuthSession authSession,
                                             string action)
        {
            int factor;
            string operacion;
            string rule;

            if(action=="asentar")
            {
                rule=Definiciones.CheckRequestBeforeAsentar;
                operacion= Operaciones.Asentar;
                factor=1;
            }
            else if(action=="reversar")
            {
                rule=Definiciones.CheckRequestBeforeReversar;
                operacion= Operaciones.Reversar;
                factor=-1;
            }
            else if(action=="anular")
            {
                 rule= Definiciones.CheckRequestBeforeAnular;
                 operacion= Operaciones.Anular;
                 factor=0;
            }
            else
                throw new HttpError(string.Format("Operacion:'{0}' NO implementada para Ingreso",
                                                      action ));            
             
            var idUsuario = int.Parse(authSession.UserAuthId);

            factory.Execute(proxy=>{
                using(proxy.AcquireLock(request.GetLockKey(), Definiciones.LockSeconds))
                {
                    var oldData= proxy.FirstOrDefaultById<Ingreso>(request.Id);
                    oldData.AssertExists(request.Id);
					oldData.ValidateAndThrowHttpError(rule);
                    CheckBeforePatch(oldData, request, proxy, idUsuario, operacion);

                    if(factor==0)
                    {
                        proxy.BeginDbTransaction();
                        proxy.ExecuteBeforePatch(request, oldData, operacion);
                        request.Anular(proxy);
                        proxy.ExecuteAfterPatch(request, oldData, operacion);
                        proxy.CommitDbTransaction();
                        return;
                    }

                    List<IngresoItem> items =  proxy.Get<IngresoItem>(q=> q.IdIngreso==request.Id);
                    decimal saldo=0; // si queremos reversar debe coincidir con request.Saldo

                    proxy.BeginDbTransaction();
                    #region ActualizarCuentaPorPagar
                    if(request.Saldo>0)
                    {
                        saldo = 
                            (from r in items 
                             select r.Valor*(r.TipoPartida==1?-1:1)).Sum();

                        var  prs= DAL.GetPresupuestoActivo(proxy,request.IdSucursal,Definiciones.IdCentroGeneral);
                        prs.AssertExistsActivo(request.IdSucursal, Definiciones.IdCentroGeneral);
                        CodigoDocumento cd = proxy.GetCodigoDocumento(request.CodigoDocumento);
                        cd.AssertExists(request.CodigoDocumento);
                        cd.AssertEstaActivo();
                        using(proxy.AcquireLock(prs.GetLockKey(cd.CodigoPresupuesto), Definiciones.LockSeconds))
                        {
                            var pi= prs.GetPresupuestoItem(proxy,cd.CodigoPresupuesto);
                            pi.AssertExists(prs.Id,cd.CodigoPresupuesto );
                            pi.UpdatePresupuesto(proxy,request.IdSucursal,Definiciones.IdCentroGeneral,
                                                 request.Periodo,
                                                 (saldo>0?(short)1:(short)2),
                                                 Math.Abs(saldo)*factor,request.IdTercero);
                        }

                    }
                    #endregion ActualizarCuentaPorPagar

                    List<IngresoItem> itemsCajaBancos= new List<IngresoItem>();
                    #region ActualizarSaldoItems
                    foreach(var item in items)
                    {
                        var  prs= DAL.GetPresupuestoActivo(proxy,request.IdSucursal, item.IdCentro);
                        prs.AssertExistsActivo(request.IdSucursal, item.IdCentro);

                        using(proxy.AcquireLock(item.IdPresupuestoItem.GetLockKey<PresupuestoItem>(), Definiciones.LockSeconds))
                        {
                            var pi= DAL.GetPresupuestoItem(proxy,item.IdPresupuestoItem);
                            pi.AssertExists(item.IdPresupuestoItem);
                            pi.UpdatePresupuesto(proxy, request.IdSucursal,item.IdCentro,request.Periodo,item.TipoPartida,item.Valor*factor, null);
                            if (pi.Codigo.StartsWith(Definiciones.GrupoCajaBancos)) itemsCajaBancos.Add(item);
                        }
                    }
                    #endregion ActualizarSaldoItems
                    #region CrearComprobanteIngresos
                    // solo es crear el comprobante y un detalle, los saldos ya estan actualizados...
                    // el centro de costo no interesa...

                    if(factor==1) // asentar --Generar el comprobante de egreso por cuenta y sus items
                    {
                        var valorPorCuentaGiradora=
                            (from r in itemsCajaBancos  group r by r.IdPresupuestoItem into g
                             select new { IdPresupuestoItem=g.Key, Valor=g.Sum(p => p.Valor*(p.TipoPartida==1?1:-1))*factor}).
                                ToList(); 
                        foreach(var cg in valorPorCuentaGiradora)
                        {
                            string descripcion=string.Format("Cancelacion {0}:{1} ${2}",request.CodigoDocumento,
                                                             request.Numero, cg.Valor); 
                            ComprobanteIngreso ce= DAL.CreateComprobanteIngreso(proxy,request.IdSucursal,
                                                                              cg.IdPresupuestoItem,
                                                                              request.IdTercero,
                                                                              cg.Valor,
                                                                              descripcion,
                                                                              DateTime.Today,true);
                            ce.CreateItem(proxy,request.Id,cg.Valor);
                        }
                        request.Asentar(proxy);
                    }
                    else if(factor==-1)  // Reversar= anular todos los comprobantes de este egreso!!
                    {
                        if( itemsCajaBancos.Count!=0)
                        {
                            CheckSaldo(request,saldo);
                            var ei= proxy.Get<ComprobanteIngresoItem>(q=> q.IdIngreso==request.Id); 
                            foreach(var cei in ei){
                                using(proxy.AcquireLock(cei.IdComprobanteIngreso.GetLockKey<ComprobanteIngreso>(),Definiciones.LockSeconds))
                                {
                                    ComprobanteIngreso ce =proxy.FirstOrDefaultById<ComprobanteIngreso>(cei.IdComprobanteIngreso);
                                    ce.Anular(proxy,string.Format("Anulado. Ingreso:'{0}' reversado",request.Numero));
                                }
                            }
                        }
                        proxy.ExecuteBeforePatch(request, oldData, operacion);
                        request.Reversar(proxy);
                        proxy.ExecuteAfterPatch(request, oldData, operacion);
                    }
                    #endregion CrearComprobanteIngresos

                    proxy.CommitDbTransaction();

                }
            });

                    
            List<Ingreso> data = new List<Ingreso>();
            data.Add(request);
            
            return new Response<Ingreso>(){
                Data=data
            };  
            
        }
예제 #30
0
        public static Response<SaldoTercero> Get(this SaldoTercero request,
		                                              Factory factory,
		                                              IHttpRequest httpRequest)
        {
            return factory.Execute(proxy=>{

				long? totalCount=null;

				var paginador= new Paginador(httpRequest);
            	var queryString= httpRequest.QueryString;

                var predicate = PredicateBuilder.True<SaldoTercero>();

				var nombre= queryString["Nombre"];
                if(!nombre.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.Nombre.Contains(nombre));

				var sucursal= queryString["NombreSucursal"];
                if(!sucursal.IsNullOrEmpty())
                    predicate= predicate.AndAlso(q=>q.NombreSucursal.Contains(sucursal));

				string p= queryString["IdSucursal"];
            	if(!p.IsNullOrEmpty())
           		{
					int idSucursal;
	                if( int.TryParse(p,out idSucursal))
	                {
						if(idSucursal!=default(int))
							predicate= predicate.AndAlso(q=>q.IdSucursal==idSucursal);
	                }
	            }


				p= queryString["IdTercero"];
            	if(!p.IsNullOrEmpty())
           		{
					int idTercero;
	                if( int.TryParse(p,out idTercero))
	                {
						if(idTercero!=default(int))
							predicate= predicate.AndAlso(q=>q.IdTercero==idTercero);
	                }
	            }

				p= queryString["Grupo"];
				if(!p.IsNullOrEmpty())
           		{
					if(p=="CuentasPorPagar" || p=="CxP")
						predicate=predicate.AndAlso(q=>q.CodigoItem.StartsWith(Definiciones.GrupoCuentasPorPagar));
					else if(p=="CuentasPorCobrar" || p=="CxC")
						predicate=predicate.AndAlso(q=>q.CodigoItem.StartsWith(Definiciones.GrupoCuentasPorCobrar));						
	            }


				predicate= predicate.AndAlso(q=> (q.SaldoInicial+q.Debitos-q.Creditos)!=0);

                var visitor = ReadExtensions.CreateExpression<SaldoTercero>();
				visitor.Where(predicate);

                if(paginador.PageNumber.HasValue)
                {
					visitor.Select(r=> Sql.Count(r.Id));
                    totalCount= proxy.Count(visitor);
					visitor.Select();
                    int rows= paginador.PageSize.HasValue? paginador.PageSize.Value:BL.PageSize;
                    visitor.Limit(paginador.PageNumber.Value*rows, rows);
                }
                                
                visitor.OrderBy(r=>r.Nombre);      

				return new Response<SaldoTercero>(){
                	Data=proxy.Get(visitor),
                	TotalCount=totalCount
            	};

            });

        }