public static Response<Asiento> Post(this Asiento request, Factory factory, IRequestContext requestContext, bool checkSucursal=true, bool checkPeriodo=true, Action<IDbCommand,Asiento> runBeforePostDbCommandsFn=null, Action<IDbCommand,Asiento> runAfterPostDbCommandsFn=null) { var httpRequest = requestContext.Get<IHttpRequest>(); request.ValidateAndThrowHttpError(Operaciones.Create,httpRequest, factory); if(checkSucursal) request.CheckSucursal(factory, httpRequest); request.Periodo= request.Fecha.ObtenerPeriodo(); if(checkPeriodo) request.CheckPeriodo(factory,httpRequest); try { SqlExpressionVisitor<Asiento> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<Asiento>(); ev.Insert( f=> new { f.Id, f.Descripcion, f.Fecha , f.Periodo, f.IdSucursal,f.Numero,f.CodigoDocumento,f.Documento }); var data = factory.Post<Asiento>(request,ev, dbCmd=> { request.Numero= dbCmd.GetConsecutivo(request.IdSucursal,Definiciones.ComprobranteContable, httpRequest).Numero; if(request.Documento.IsNullOrEmpty()) request.Documento=request.Numero.ToString(); if(runBeforePostDbCommandsFn!=null) runBeforePostDbCommandsFn(dbCmd,request); }, (dbCmd,result)=> { httpRequest.CacheClientExec( cache=> cache.Set(result.GetCacheKey(), result, TimeSpan.FromDays(Definiciones.DiasEnCache)) ); if(runAfterPostDbCommandsFn!=null) runAfterPostDbCommandsFn(dbCmd,result); }); return new Response<Asiento>(){ Data= data }; } catch(Exception e ){ throw new HttpError(e.Message); } }
public static Response<Asiento> Delete(this Asiento request, Factory factory, IRequestContext requestContext, bool checkSucursal=true, bool checkPeriodo=false, Action<IDbCommand,Asiento> runBeforeDeleteDbCommandsFn=null, Action<IDbCommand,Asiento> runAfterDeleteDbCommandsFn=null) { request.CheckId(Operaciones.Destroy); var httpRequest = requestContext.Get<IHttpRequest>(); string lockKey=request.GetLockKey(); Action block=()=>{ factory.Delete(request,(dbCmd)=> { httpRequest.CacheClientExec(cache=> { var id = request.Id; var cacheKey=request.GetCacheKey(); request= cache.Get<Asiento>(cacheKey); if(request== default(Asiento)) { request= dbCmd.FirstOrDefault<Asiento>(q=> q.Id==id); AssertExists(request, id); } else { cache.Remove(cacheKey); } request.ValidateAndThrowHttpError(Operaciones.Destroy); if(checkSucursal) request.CheckSucursal(factory, httpRequest); if(checkPeriodo) request.CheckPeriodo(factory,httpRequest); if(runBeforeDeleteDbCommandsFn!=null) runBeforeDeleteDbCommandsFn(dbCmd, request); }); },(dbCmd)=> { if(runAfterDeleteDbCommandsFn!=null) runAfterDeleteDbCommandsFn(dbCmd,request); }); }; IRedisClientsManager cm = httpRequest.GetCacheClient() as IRedisClientsManager; try { if( cm != null) { cm.Exec(redisClient=> { using (redisClient.AcquireLock(lockKey, TimeSpan.FromSeconds(Definiciones.LockSeconds))) { block(); } }); } else block(); return new Response<Asiento>(){}; } catch(Exception e) { throw new HttpError(e.Message); } }
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 }; }
// 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 }; }
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 }; }