# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.contrib.auth.decorators import login_required,permission_required
from django.contrib.auth.models import User
from django.db.models import Sum,Q,Count
from django.db  import  IntegrityError ,  transaction 
from django.http import HttpResponseRedirect
from django.http import HttpResponse
import json
import sys
import decimal
import math
from django.core import serializers
from Main.models import *
from Process.models import *
from Consult.models import *
from Maintenance.models import *
from datetime import date,datetime,timedelta,time
import time
import datetime as dtime_
#socket
import string
import random

#factura
import requests
import base64
import os

def getStringDateTimeTZ():
	now = dtime_.datetime.today()
	cstTimeDelta = dtime_.timedelta(hours=-5)
	tzObject = dtime_.timezone(cstTimeDelta, name="CST")
	cstTimeNow = now.replace(tzinfo=tzObject)
	return str(cstTimeNow.isoformat("T","seconds"))

def getSerie8Digits(num):
	an = "00000000"+str(num)
	return an[-8:]

def puerto_socket_io():
	return 5000
def host_socket_io():
	return "192.168.1.112"
#endsocket
def cta_conf(str_banco):#return id
	conf_cta = {'ban':-1,'bcp':-1,'con':-1,'otr':-1}
	id_cta = -1
	if str_banco in conf_cta:
		id_cta = conf_cta[str_banco]
	return id_cta
#modulos adicionales 
def QuitarEspacios(texto):
	a=str(texto)
	return " ".join(a.split())
def ConvertirDecimal(numtext):#convierte un estring en float incluyendo los q contengan ,
	a=str(numtext)
	return float(a.replace(',','.'))

def QuitarEspacios_texto(texto):# remove espacios en blanco asi como trimetea
	return " ".join(texto.split())

def desnormalizar(cadena):
	aux=str(cadena)
	return aux.replace(',','')


@login_required
def Venta_view(request):
	idCliente=request.POST.get('IdCliente','')
	DniRucCliente=request.POST.get('dni','')
	NombreCliente=request.POST.get('nom','')
	A_paternoCliente=request.POST.get('ap','')
	A_maternoCliente=request.POST.get('am','')
	TipoPersona=request.POST.get('TipoPersona')
	moneda=request.POST.get('moneda')
	peso=request.POST.get('peso','')
	presio=request.POST.get('precio','')
	total=request.POST.get('total','')
	transac_= request.POST.get('transac')
	obs=request.POST.get('obs','')
	data=''
	exito=''
	r_nr=''
	r_ade=''
	r_importe=''
	r_fecha=''
	r_hora=''
	transac=''
	usr = request.user.username
	u= Personal.objects.get(usuario=usr)
	C=Cajas.objects.get(id_usuario=u.pk)
	if peso != '' and presio !='':
		try:
			with transaction.atomic():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					p=QuitarEspacios(peso)
					pr=QuitarEspacios(presio)
					t=QuitarEspacios(total)
					if(p!='' and pr!='' and t!=''):
						p=ConvertirDecimal(p)
						pr=ConvertirDecimal(pr)
						t=ConvertirDecimal(t)
						peso,presio,total=p,pr,t
						
						saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
						saldoDisMat= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
						saldomaterial=ConvertirDecimal(saldoDisMat.saldo_material)
						saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
						saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
						if (ConvertirDecimal(peso)<=saldomaterial):
							Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
							numeroREM = int(Nrecibo.nroREM)+1
							numeroRI=int(Nrecibo.nroRI)+1
							r_nr=numeroRI
							NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRI=numeroRI,nroREM=numeroREM)

							if moneda=='soles':
								aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldosoles+total),saldo_material=(saldomaterial-peso))
							else:
								aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldodolares+total),saldo_material=(saldomaterial-peso))

							C1= Cajas.objects.get(pk=C.pk)#origen
							O1= Oficina.objects.get(pk= C.id_oficina.pk)

							Chabermaterial= TCajaMaterialHaber(id_personal=u,tablaRelacional="TVentaMaterial",conceptoDetalle="venta de oro ",tipoDocumento="R/EM",estadoTransaccion="vendido",pesoGramos=peso,precioxGramo=pr,nroRecibo=numeroREM,id_oficina=O1,id_caja=C1)
							Chabermaterial.save()

							Cdebe=TCajaDebeM(id_personal=u,tablaRelacional="TVentaMaterial",conceptoDetalle="cobro por venta de oro ",tipoDocumento="R/I",cantidadDinero=total,moneda=moneda,estadoTransaccion="cobrado",nroRecibo=numeroRI,id_oficina=O1,id_caja=C1)
							Cdebe.save()
							idcli=0
							r_importe = total
							r_fecha= datetime.now().strftime('%Y-%m-%d')
							r_hora= datetime.now().strftime('%I:%M %p')
							if QuitarEspacios(NombreCliente) != '' and QuitarEspacios(NombreCliente) != None:
								if idCliente == '' or idCliente== None:
									sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
									if sq.count()==0:
										cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
										cln.save()
										idCliente = str(cln.pk)
									else:
										lista5= list(sq)
										idCliente= str(lista5[0]['pk'])
								idcli=idCliente
							Venta= TVentaMaterial(idCajaMaterialHaber=Chabermaterial,idCajaDebe=Cdebe,id_cliente=idcli,observaciones=obs,moneda=moneda,Peso_gramos=peso,Precio_gramo=presio,Total_cobrar=total)
							Venta.save()
							exito='exito'
						else:
							exito='saldo insuficiente'
					else:
						exito='Complete todos los campos'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'

		except:
			if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
				CTG.save()
				transac='1'
			else:
				cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
				transac='1'
			exito='fail'+str(sys.exc_info()[1])
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	return render(request,"VentaMaterial.html",{"transac":transac,'resultado':exito,'nre':r_nr,'importe':r_importe,'fecha':r_fecha,'hora':r_hora,'dni':DniRucCliente,'nom':NombreCliente,'ap':A_paternoCliente,'am':A_maternoCliente,'precio':presio,'peso':peso,'total':total})


@login_required
@transaction.atomic
def guardar_Venta_ajax_view(request):
	data=''
	if request.is_ajax:
		try:
			with transaction.atomic():
				idCliente=''
				usr = request.user.username
				u= Personal.objects.get(usuario=usr)
				idCliente=request.GET.get('IdCliente','')
				DniRucCliente=request.GET.get('dni','')
				NombreCliente=request.GET.get('nom','')
				A_paternoCliente=request.GET.get('ap','')
				A_maternoCliente=request.GET.get('am','')
				moneda=request.GET.get('moneda')
				peso=request.GET.get('peso','')
				presio=request.GET.get('presio','')
				total=request.GET.get('total','')
				obs=request.GET.get('obs','')
				p=QuitarEspacios(peso)
				pr=QuitarEspacios(presio)
				t=QuitarEspacios(total)
				if(p!='' and pr!='' and t!=''):
					p=ConvertirDecimal(p)
					pr=ConvertirDecimal(pr)
					t=ConvertirDecimal(t)
					peso,presio,total=p,pr,t
					C=Cajas.objects.get(id_usuario=u.pk)
					saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
					saldoDisMat= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
					saldomaterial=ConvertirDecimal(saldoDisMat.saldo_material)
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
					if (ConvertirDecimal(peso)<=saldomaterial):
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
						numeroREM = int(Nrecibo.nroREM)+1
						numeroRI=int(Nrecibo.nroRI)+1
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRI=numeroRI,nroREM=numeroREM)

						if moneda=='soles':
							aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldosoles+total),saldo_material=(saldomaterial-peso))
						else:
							aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldodolares+total),saldo_material=(saldomaterial-peso))

						C1= Cajas.objects.get(pk=C.pk)#origen
						O1= Oficina.objects.get(pk= C.id_oficina.pk)

						Chabermaterial= TCajaMaterialHaber(id_personal=u,tablaRelacional="TVentaMaterial",conceptoDetalle="venta de oro ",tipoDocumento="R/EM",estadoTransaccion="vendido",pesoGramos=peso,precioxGramo=pr,nroRecibo=numeroREM,id_oficina=O1,id_caja=C1)
						Chabermaterial.save()

						Cdebe=TCajaDebeM(id_personal=u,tablaRelacional="TVentaMaterial",conceptoDetalle="cobro por venta de oro ",tipoDocumento="R/I",cantidadDinero=total,moneda=moneda,estadoTransaccion="cobrado",nroRecibo=numeroRI,id_oficina=O1,id_caja=C1)
						Cdebe.save()
						idcli=0
						if QuitarEspacios(NombreCliente) != '' and QuitarEspacios(NombreCliente) != None:
							if idCliente == '' or idCliente== None:
								sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
								if sq.count()==0:
									cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
									cln.save()
									idCliente = str(cln.pk)
								else:
									lista5= list(sq)
									idCliente= str(lista5[0]['pk'])
							idcli=idCliente
						Venta= TVentaMaterial(idCajaMaterialHaber=Chabermaterial,idCajaDebe=Cdebe,id_cliente=idcli,observaciones=obs,moneda=moneda,Peso_gramos=peso,Precio_gramo=presio,Total_cobrar=total)
						Venta.save()
						data='exito'
					else:
						data='saldo insuficiente'
				else:
					data='Complete todos los campos'
		except IntegrityError:
			data='fail'+str(sys.exc_info()[1])
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
def Compra_view(request):
	idCliente=request.POST.get('IdCliente','')
	DniRucCliente=request.POST.get('dni','')
	NombreCliente=request.POST.get('nom','')
	A_paternoCliente=request.POST.get('ap','')
	A_maternoCliente=request.POST.get('am','')
	TipoPersona=request.POST.get('TipoPersona')
	moneda=request.POST.get('moneda')
	peso=request.POST.get('peso','')
	presio=request.POST.get('precio','')
	total=request.POST.get('total','')
	transac_= request.POST.get('transac')
	data=''
	exito=''
	r_nr=''
	r_ade=''
	r_importe=''
	r_fecha=''
	r_hora=''
	transac=''
	usr = request.user.username
	u= Personal.objects.get(usuario=usr)
	C=Cajas.objects.get(id_usuario=u.pk)
	if peso != '' and presio !='':
		try:
			with transaction.atomic():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					p=QuitarEspacios(peso)
					pr=QuitarEspacios(presio)
					t=QuitarEspacios(total)
					if(p!='' and pr!='' and t!=''):
						p=ConvertirDecimal(p)
						pr=ConvertirDecimal(pr)
						t=ConvertirDecimal(t)
						peso,presio,total=p,pr,t
						obs=request.POST.get('obs','')
						#_adelantos=eval(request.GET.get('adelantos'))
						l_adelantos=[]
						
						saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
						saldoDisMat= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
						saldomaterial=ConvertirDecimal(saldoDisMat.saldo_material)
						saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
						saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
						#if (moneda=='soles' and ConvertirDecimal(total)<=saldosoles) or (moneda=='dolares' and ConvertirDecimal(total)<=saldodolares):
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
						numeroRIM = int(Nrecibo.nroRIM)+1
						numeroRE=int(Nrecibo.nroRE)+1
						r_nr=numeroRE
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRE=numeroRE,nroRIM=numeroRIM)
						C1= Cajas.objects.get(pk=C.pk)#origen
						O1= Oficina.objects.get(pk= C.id_oficina.pk)
						Cdebematerial= TCajaMaterialDebe(id_personal=u,tablaRelacional="TCompraMaterial",conceptoDetalle="compra de oro ",tipoDocumento="R/IM",estadoTransaccion="comprado",pesoGramos=peso,precioxGramo=pr,nroRecibo=numeroRIM,id_oficina=O1,id_caja=C1)
						Cdebematerial.save()
						m_ade=0
						for apk in l_adelantos:
							adelanto = AdelantoCompraM.objects.get(pk=apk)
							m_ade+=float(adelanto.monto)
						Chaber=TCajaHaberM(id_personal=u,tablaRelacional="TCompraMaterial",conceptoDetalle="pago por compra de oro",tipoDocumento="R/E",cantidadDinero=(total-m_ade),moneda=moneda,estadoTransaccion="pagado",nroRecibo=numeroRE,id_oficina=O1,id_caja=C1)
						Chaber.save()
						idcli=0
						if QuitarEspacios(NombreCliente) != '' and QuitarEspacios(NombreCliente) != None:
							if idCliente == '' or idCliente== None:
								sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
								if sq.count()==0:
									cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
									cln.save()
									idCliente = str(cln.pk)
								else:
									lista5= list(sq)
									idCliente= str(lista5[0]['pk'])
							idcli=idCliente
						Compra= TCompraMaterial(idCajaMaterialDebe=Cdebematerial,idCajaHaber=Chaber,id_cliente=idcli,observaciones=obs,moneda=moneda,Peso_gramos=peso,Precio_gramo=presio,Total_pagar=total,adelanto=m_ade)
						Compra.save()
						tsoles = total - m_ade
						#---
						r_ade= m_ade
						r_importe = tsoles
						r_fecha= datetime.now().strftime('%Y-%m-%d')
						r_hora= datetime.now().strftime('%I:%M %p')
						#----
						if moneda=='soles':
							aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldosoles-tsoles),saldo_material=(saldomaterial+peso))
							for apk in l_adelantos:
								adelanto = AdelantoCompraM.objects.get(pk=apk)
								adelanto.id_compra=Compra.pk
								adelanto.estado = 'utilizado'
								adelanto.save()
						else:
							aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldodolares-total),saldo_material=(saldomaterial+peso))
						
						exito='exito'
						#else:
						#	exito='saldo insuficiente'
					else:
						exito='Complete todos los campos'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except:
			if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
				CTG.save()
				transac='1'
			else:
				cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
				transac='1'
			exito='fail'+str(sys.exc_info()[1])
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	return render(request,"CompraMaterial.html",{"transac":transac,'resultado':exito,'nre':r_nr,'adelanto':r_ade,'importe':r_importe,'fecha':r_fecha,'hora':r_hora,'dni':DniRucCliente,'nom':NombreCliente,'ap':A_paternoCliente,'am':A_maternoCliente,'precio':presio,'peso':peso,'total':total} )

@login_required
def Compra_tactil_view(request):

	return render(request,"CompraMaterialTactil.html" )


@login_required
@transaction.atomic
def guardar_Compra_ajax_view(request):
	data=''
	exito=''
	r_nr=''
	r_ade=''
	r_importe=''
	r_fecha=''
	r_hora=''
	if request.is_ajax:
		try:
			with transaction.atomic():
				usr = request.user.username
				u= Personal.objects.get(usuario=usr)
				idCliente=request.GET.get('IdCliente','')
				DniRucCliente=request.GET.get('dni','')
				NombreCliente=request.GET.get('nom','')
				A_paternoCliente=request.GET.get('ap','')
				A_maternoCliente=request.GET.get('am','')
				moneda=request.GET.get('moneda')
				peso=request.GET.get('peso','')
				presio=request.GET.get('presio','')
				total=request.GET.get('total','')
				p=QuitarEspacios(peso)
				pr=QuitarEspacios(presio)
				t=QuitarEspacios(total)
				if(p!='' and pr!='' and t!=''):
					p=ConvertirDecimal(p)
					pr=ConvertirDecimal(pr)
					t=ConvertirDecimal(t)
					peso,presio,total=p,pr,t
					obs=request.GET.get('obs','')
					l_adelantos=eval(request.GET.get('adelantos'))
					C=Cajas.objects.get(id_usuario=u.pk)
					saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
					saldoDisMat= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
					saldomaterial=ConvertirDecimal(saldoDisMat.saldo_material)
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
					#if (moneda=='soles' and ConvertirDecimal(total)<=saldosoles) or (moneda=='dolares' and ConvertirDecimal(total)<=saldodolares):
					Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
					numeroRIM = int(Nrecibo.nroRIM)+1
					numeroRE=int(Nrecibo.nroRE)+1
					r_nr=numeroRE
					NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRE=numeroRE,nroRIM=numeroRIM)
					C1= Cajas.objects.get(pk=C.pk)#origen
					O1= Oficina.objects.get(pk= C.id_oficina.pk)
					Cdebematerial= TCajaMaterialDebe(id_personal=u,tablaRelacional="TCompraMaterial",conceptoDetalle="compra de oro ",tipoDocumento="R/IM",estadoTransaccion="comprado",pesoGramos=peso,precioxGramo=pr,nroRecibo=numeroRIM,id_oficina=O1,id_caja=C1)
					Cdebematerial.save()
					m_ade=0
					for apk in l_adelantos:
						adelanto = AdelantoCompraM.objects.get(pk=apk)
						m_ade+=float(adelanto.monto)
					Chaber=TCajaHaberM(id_personal=u,tablaRelacional="TCompraMaterial",conceptoDetalle="pago por compra de oro",tipoDocumento="R/E",cantidadDinero=(total-m_ade),moneda=moneda,estadoTransaccion="pagado",nroRecibo=numeroRE,id_oficina=O1,id_caja=C1)
					Chaber.save()
					idcli=0
					if QuitarEspacios(NombreCliente) != '' and QuitarEspacios(NombreCliente) != None:
						if idCliente == '' or idCliente== None:
							sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
							if sq.count()==0:
								cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
						idcli=idCliente
					Compra= TCompraMaterial(idCajaMaterialDebe=Cdebematerial,idCajaHaber=Chaber,id_cliente=idcli,observaciones=obs,moneda=moneda,Peso_gramos=peso,Precio_gramo=presio,Total_pagar=total,adelanto=m_ade)
					Compra.save()
					tsoles = total - m_ade
					#---
					r_ade= m_ade
					r_importe = tsoles
					r_fecha= datetime.now().strftime('%Y-%m-%d')
					r_hora= datetime.now().strftime('%I:%M %p')
					#----
					if moneda=='soles':
						aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldosoles-tsoles),saldo_material=(saldomaterial+peso))
						for apk in l_adelantos:
							adelanto = AdelantoCompraM.objects.get(pk=apk)
							adelanto.id_compra=Compra.pk
							adelanto.estado = 'utilizado'
							adelanto.save()
					else:
						aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldodolares-total),saldo_material=(saldomaterial+peso))
					
					exito='exito'
					#else:
					#	exito='saldo insuficiente'
				else:
					exito='Complete todos los campos'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'
	data= json.dumps({'exito':exito,'nre':r_nr,'adelanto':r_ade,'importe':r_importe,'fecha':r_fecha,'hora':r_hora})
	mimetype="application/json"
	return HttpResponse(data,mimetype)



# Create your views here.
@transaction.atomic
def CrearTransferencia_ajax_view(request):
	data='fail'
	if request.is_ajax:
		""""
		idCaja=request.GET.get('idCaja')
		idCliente=request.GET.get('IdCliente','')
		TipoPersona=request.GET.get('TipoPersona')
		DniRucCliente= request.GET.get('DniRucCln','')
		NombreCliente= request.GET.get('NombreCln')
		A_paternoCliente= request.GET.get('PaternoCln')
		A_maternoCliente= request.GET.get('MaternoCln')
		DireccionCliente= request.GET.get('DireccionCln')
		NombreBenef= request.GET.get('NombreBnf')
		A_paternoBenef= request.GET.get('PaternoBnf')
		A_maternoBenef = request.GET.get('MaternoBnf')
		OficinaDestino = request.GET.get('OficinaDst')
		Moneda= request.GET.get('moneda')
		Monto= request.GET.get('Monto')
		Comicion = request.GET.get('comicion')
		Observaciones = request.GET.get('obs','')
		montoconcepto= request.GET.get('MontoConcepto')
		conceptoDetalle= request.GET.get('conceptoDet','')
		fechaActual = datetime.now().strftime("%Y-%m-%d")
		horaActual = datetime.now().strftime("%H:%M:%S")
		ODes= ''
		ODir=''
		soli=''
		bene=''
		nroReci=''
		cargo =''
		canti=0
		exito='' 
		if NombreBenef != None:
			if DniRucCliente == None:
				DniRucCliente=''
			if montoconcepto ==''or montoconcepto == None:
				montoconcepto=0
			else:
				montoconcepto = ConvertirDecimal(montoconcepto)

			if TipoPersona ==''or TipoPersona == None:
				TipoPersona='Natural'
			try:
				with transaction.atomic():
					C= Cajas.objects.get(pk=idCaja)
					bene=NombreBenef+' '+A_paternoBenef+' '+A_maternoBenef
					soli=NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente
					sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,dni=DniRucCliente).values('pk')
					if idCliente == '' or idCliente== None:
						if sq.count()==0:
							cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona)
							cln.save()
							idCliente = str(cln.pk)
						else:
							lista5= list(sq)
							idCliente= str(lista5[0]['pk'])
					Comi= ConvertirDecimal(Comicion)
					TM= MontoTope_ComisionMinima.objects.get(id_oficina=C.id_oficina.pk)
					if Comi >= TM.comision_minima:
						Cantidad= ConvertirDecimal(Monto)
						Ingres= Cantidad+Comi+montoconcepto
						canti=Ingres
						Fo = FechaOperacion.objects.get(id_caja=C.pk)#ultimo dia operacion
						if date.today() >Fo.fecha_operacion:
							FechaOperacion.objects.filter(pk=Fo.pk).update(fecha_operacion=date.today())
							Fo = FechaOperacion.objects.get(id_caja=C.pk)
						fecha= Fo.fecha_operacion
						fechahora= datetime.combine(fecha,datetime.now().time())
								#end manejo de fechas
						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
						idSaldo= str(cons_saldo.pk)
						SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
						SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
						Nrecibo= NroReciboOficina.objects.get(id_oficina=C.id_oficina.pk)
						numeroR = int(Nrecibo.nroST)+1
						nroReci=numeroR
						NroReciboOficina.objects.filter(id_oficina=C.id_oficina.pk).update(nroST=numeroR)
						if Moneda=='dolares':
							C1= Cajas.objects.get(pk=C.pk)#origen
							O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
							Cli= Cliente.objects.get(pk=idCliente)
							OD= Oficina.objects.get(pk=OficinaDestino)#destino
							ODes=OD.nombre_oficina
							ODir=OD.direccion
							saldo= SaldoDolares+Ingres
							SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_dolares=saldo)
							transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',fecha=fechahora,conceptoDetalle='transferencias',tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
							transferencia.save()
							idCajaD=transferencia.pk
							Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto)
							Stransferencia.save()
							data='exito'
						elif Moneda=='soles':
							C1= Cajas.objects.get(pk=C.pk)#origen
							O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
							Cli= Cliente.objects.get(pk=idCliente)
							OD= Oficina.objects.get(pk=OficinaDestino)#destino
							ODes=OD.nombre_oficina
							ODir=OD.direccion
							saldo= SaldoSoles+Ingres
							SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_soles=saldo)
							transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',fecha=fechahora,conceptoDetalle='transferencias',tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
							transferencia.save()
							idCajaD=transferencia.pk
							Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto)
							Stransferencia.save()
							data='exito'
						else:
							data='fail'
					else:
						data='comision demasiado bajo ... comuniquese con el gerente'
			except IntegrityError:
				data='fail'
			except:
				data='fail'+ str(sys.exc_info()[0])"""
		data="eror"
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@transaction.atomic
def log_ajax_view(request):
	data='fail'
	if request.is_ajax:
		"""
		usua=request.GET.get('user')
		contra=request.GET.get('pass')
		if usua!=None and contra!=None:
			try:
				with transaction.atomic():
					P= Personal.objects.get(usuario=usua,password=contra)
					C= Cajas.objects.get(id_usuario=P.pk)
					#lista=[]
					dato={}
					dato['idCaja']=C.pk
					dato['nombreCaja']= C.nombre
					dato['idOficina']=C.id_oficina.pk
					dato['nombreOficina']= C.id_oficina.nombre_oficina
					dato['idUsuario']=C.id_usuario.pk
					lista1=[]
					consulta=list(Oficina.objects.exclude(pk=C.id_oficina.pk).exclude(nombre_oficina="Gerencia").values('pk','nombre_oficina'))
					for obj in consulta:
						lista1.append(obj)
					dato['oficinas']=lista1
					#lista.append(dato)
					data= json.dumps(dato)
			except IntegrityError:
				data='fail'
			except:
				data='fail1'+ str(sys.exc_info()[1])
		else:
			data='eres haker'
		"""
		data="error"
	else:
		data="fail"
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#egreso
@transaction.atomic
def Registro_Ingreso__ajax_view(request):
	data='' 
	"""
	idCaja=request.GET.get('idCaja')
	Concepto=request.GET.get('concepto')
	recibid=request.GET.get('recibid')
	Monto=request.GET.get('monto')
	Moneda=request.GET.get('moneda')
	Obs=request.GET.get('obs')
	cta=request.GET.get('cuenta')
	des=request.GET.get('des')
	obsc=request.GET.get('obsC')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	cargo =''
	if Monto != None:
		try:
			C= Cajas.objects.get(pk=idCaja)
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboOficina.objects.get(id_oficina=C.id_oficina.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboOficina.objects.filter(id_oficina=C.id_oficina.pk).update(nroRI=numeroRI)
				TCajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle="Recibi de "+recibid+" por consepto de "+Concepto,tipoDocumento="R/I",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C,aux1=cta)
				TCajaD.save()
				if not CuentasElementos.objects.filter(pk=int(cta)).exists():
					CE= CuentasElementos(pk=int(cta),descripcion=des,observaciones=obsc)
					CE.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+Cantidad
					SaldoDisponibleCajas.objects.filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+Cantidad
					SaldoDisponibleCajas.objects.filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	"""
	data="error"
	mimetype="text"
	return HttpResponse(data,mimetype)
# sssssssssssssssssssssssssss
def saldo_disponible_asociado(pkC):
	est=''
	msj=''
	ss=''
	sd=''
	mt=''
	C= Cajas.objects.get(pk=pkC)
	if oficinas_por_asociado.objects.filter(id_caja=C.pk,estado='activo').exists() or asociado.objects.filter(id_caja=C.pk).exists():
		Asoc=None
		asoc=None
		s1=None
		TM=None
		if asociado.objects.filter(id_caja=C.pk).exists():
			Asoc=asociado.objects.get(id_caja=C.pk)
			asoc= oficinas_por_asociado.objects.filter(id_asociado=Asoc.pk,estado='activo').values('pk','id_caja')
			s1= SaldoDisponibleCajas.objects.get(id_caja=Asoc.id_caja.pk)
			TM= ConfiguracionExtra_caja.objects.get(id_caja=Asoc.id_caja.pk)
		else:
			ofiAsoc=oficinas_por_asociado.objects.get(id_caja=C.pk,estado='activo')
			asoc= oficinas_por_asociado.objects.filter(id_asociado=ofiAsoc.id_asociado.pk,estado='activo').values('pk','id_caja')
			s1= SaldoDisponibleCajas.objects.get(id_caja=ofiAsoc.id_asociado.id_caja.pk)
			TM= ConfiguracionExtra_caja.objects.get(id_caja=ofiAsoc.id_asociado.id_caja.pk)
		saldos = s1.saldo_soles
		saldod = s1.saldo_dolares
		for obj in asoc:
			s= SaldoDisponibleCajas.objects.get(id_caja=obj['id_caja'])
			saldos= saldos +s.saldo_soles
			saldod= saldod +s.saldo_dolares
		
		ss=saldos
		sd=saldod
		mt=TM.monto_tope
		if (saldos > TM.monto_tope) or (saldod>TM.monto_tope):
			est='danger'
			msj='ESTE ASOCIADO YA PASO EL MONTO TOPE  EN TRANSFERENCIAS.'
		elif (saldos >= (TM.monto_tope-2000)) or (saldod >= (TM.monto_tope-2000)):
			est='warning'
			msj='ESTE ASOCIADO ESTA CERCA DE ALCANZAR EL MONTO TOPE EN TRANSFERENCIAS'
		else:
			est='success'
			msj='ASOCIADO'
	dato={'e':est,'me':msj,'ss':ss,'sd':sd,'mt':mt}
	return dato


def envio_pendiente(pk):
	r='success'
	f=datetime.now()-timedelta(hours=2)
	#eo = EnvioOficinaOficina.objects.filter(idCajaHaber__id_caja= pk,fecha__lt=f,moneda='soles',estado='enviado').aggregate(Sum('monto'))
	ec = EnvioCajaCaja.objects.filter(idCajaHaber__id_caja= pk,fecha__lt=f,moneda='soles',estado='enviado').aggregate(Sum('monto'))

	if ec['monto__sum']==None:
		ec=0
	else:
		ec=round(float(ec['monto__sum']),2)
	ts= ec
	if ts>0:
		TM= ConfiguracionExtra_caja.objects.get(id_caja=pk)
		S= SaldoDisponibleCajas.objects.get(id_caja=pk)
		if (float(S.saldo_soles)+ts  > TM.monto_tope):
			r='danger'
	return r


def calcular_neto_igv(n):
	vn = round(n/1.18,4)
	i = round(vn*18/100,4)
	return vn, i, (vn+ i)# valor_neto, inpuesto, total==n

@login_required
@transaction.atomic
def CrearTransferencia_view(request):#encargado de crear transferencias
	#dniM=request.POST.get('valorCHB','')
	dniM=request.POST.get('menor','no')
	nroCtaBanco=request.POST.get('NroCta','')
	idCliente=request.POST.get('IdCliente','')#capturamos los atributos del formulario
	idBeneficiado=request.POST.get('IdBeneficiado','')#capturamos los atributos del formulario
	TipoPersona=request.POST.get('TipoPersona')
	DniRucCliente= request.POST.get('DniRucCln','')
	NombreCliente= request.POST.get('NombreCln')
	A_paternoCliente= request.POST.get('PaternoCln')
	A_maternoCliente= request.POST.get('MaternoCln')
	#DireccionCliente= request.POST.get('DireccionCln')
	TipoPersonaBen=request.POST.get('TipoPersonaB')
	DniRucBen= request.POST.get('DniRucB','')
	NombreBenef= request.POST.get('NombreBnf')
	A_paternoBenef= request.POST.get('PaternoBnf')
	A_maternoBenef = request.POST.get('MaternoBnf')
	celular = request.POST.get('CelularBnf','')
	celularCli = request.POST.get('CelularCli','')
	OficinaDestino = request.POST.get('OficinaDst')
	Moneda= request.POST.get('moneda')
	Monto= request.POST.get('Monto')
	Comicion = request.POST.get('comicion')
	CodigoA = request.POST.get('CodigoAut')
	Observaciones = request.POST.get('obs','')
	banco = request.POST.get('banco','')
	clave = request.POST.get('clave','')
	celularRef = request.POST.get('CelularRef','')
	montoconcepto= request.POST.get('MontoConcepto')
	conceptoDetalle= request.POST.get('conceptoDet','')
	transac_= request.POST.get('transac')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	#---fact
	tipo_ope=request.POST.get('tipo_ope','')
	n_letras= 'SON '+request.POST.get('n_letras','')
	#--
	usr=request.user.username
	recibo_obs=''
	recibo_det=conceptoDetalle
	ODes= ''
	txtbanco= ''
	ODir=''
	idSTRecibo=''
	soliAp=''
	soli=''
	beneAp=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	transac=''
	canti=0
	obsvino=''
	aux_sms = ''
	exito='' 
	#-- factura
	uri=''
	es_sunat=''
	re_serie=''
	re_correlativo =''
	re_fecha_tz=''
	re_nletras=''
	re_tipo=''
	re_ruc=''
	#-----
	re_su_total='0'
	re_su_sub='0'
	re_su_igv='0'
	re_su_mo='S/.'
	#--------
	re_e_ruc = ''
	re_e_razon = ''
	re_e_depa = ''
	re_e_pro = ''
	re_e_dis = ''
	re_e_dir = ''
	#---

	C= Cajas.objects.get(id_usuario__usuario=usr)
	asociado= saldo_disponible_asociado(C.pk)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	check_fe ='no'
	if CajaSunat.objects.filter(id_caja=C.pk,estado=True).exists():
		check_fe ='si'

	if NombreBenef != None:
		if DniRucBen == None:
			DniRucBen=''
		if DniRucCliente == None:
			DniRucCliente=''
		if montoconcepto ==''or montoconcepto == None:
			montoconcepto=0
		else:
			montoconcepto = ConvertirDecimal(montoconcepto)

		if TipoPersona ==''or TipoPersona == None:
			TipoPersona='Natural'
		bnc = 'si'
		txtbanco = banco
		Observaciones=txtbanco
		recibo_obs=txtbanco
		try:
			with transaction.atomic():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					bene=NombreBenef
					beneAp=A_paternoBenef+' '+A_maternoBenef
					soli=NombreCliente
					soliAp=A_paternoCliente+' '+A_maternoCliente
					#*********
					cod_aut=False
					if CodigoA!=None and CodigoA != '':
						if Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).exists():
							cod_aut=True
					ver_st=True
					if OficinaDestino.isdigit():
						if not cod_aut:
							if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,id_caja=0).exists():
								confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,id_caja=0).values('comision')
								if float(confco[0]['comision'])<1:
									comi_ing=int(float(confco[0]['comision'])*float(Monto))
									if comi_ing<=float(Comicion):
										ver_st=True
									else:
										ver_st=False
								else:
									if float(confco[0]['comision'])<=float(Comicion):
										ver_st=True
									else:
										ver_st=False
					else:
						if not cod_aut:
							if OficinaDestino[0]=='b':
								if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=OficinaDestino[1:]).exists():
									confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=OficinaDestino[1:]).values('comision')
									if float(confco[0]['comision'])<1:
										comi_ing=int(float(confco[0]['comision'])*float(Monto))
										if comi_ing<=float(Comicion):
											ver_st=True
										else:
											ver_st=False
									else:
										if float(confco[0]['comision'])<=float(Comicion):
											ver_st=True
										else:
											ver_st=False
							else:
								if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_caja=OficinaDestino[1:]).exists():
									confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_caja=OficinaDestino[1:]).values('comision')
									if float(confco[0]['comision'])<1:
										comi_ing=int(float(confco[0]['comision'])*float(Monto))
										if comi_ing<=float(Comicion):
											ver_st=True
										else:
											ver_st=False
									else:
										if float(confco[0]['comision'])<=float(Comicion):
											ver_st=True
										else:
											ver_st=False
					ver_st= True
					if ver_st:
						#sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,dni=DniRucCliente).values('pk')
						#sqb=Cliente.objects.filter(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,dni=DniRucBen).values('pk')

						if idCliente == '' or idCliente== None:
							sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
							if sq.count()==0:
								cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
						#else:
						#Cliente.objects.select_for_update().filter(id=idCliente).update(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona)

						if idBeneficiado == '' or idBeneficiado== None:
							sqb=Cliente.objects.filter(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef).values('pk')
							if sqb.count()==0:
								cln = Cliente(dni=DniRucBen,nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,tipo_persona=TipoPersonaBen,idCaja=C.pk)
								cln.save()
								idBeneficiado = str(cln.pk)
							else:
								lista5= list(sqb)
								idBeneficiado= str(lista5[0]['pk'])
						#else:
						#	Cliente.objects.select_for_update().filter(id=idBeneficiado).update(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef)

						Comi= ConvertirDecimal(Comicion)
						
						if asociado['e'] != 'danger':
							CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							if Comi >= CE.comision_minima and montoconcepto >= CE.otros_conceptos_minimo:
								ci=None
								bDes=''
								if str(OficinaDestino)[0]=='b':
									bDes=OficinaDestino[1:]
									bx=Base_Ext.objects.get(pk=OficinaDestino[1:])
									OficinaDestino= bx.id_confSis.id_oficina.pk
									ci=bx.id_confSis.id_caja
								if str(OficinaDestino)[0]=='c':
									ci= Cajas.objects.get(pk=OficinaDestino[1:])
									#bx=Base_Ext.objects.get(pk=OficinaDestino[1:])
									obsvino=ci.nombre+' /'
									OficinaDestino= ci.id_oficina.pk 
								#configuraciones de montos altos en ST
								bnd_mt_st=True
								if ci == None:
									of_de=Oficina.objects.get(pk=OficinaDestino)
									ci=Cajas.objects.get(id_usuario=of_de.id_usuario.pk)
								CE_D= ConfiguracionExtra_caja.objects.get(id_oficina=OficinaDestino,id_caja=ci.pk)
								if  float(CE_D.monto_tope_st)>0 and  float(Monto)>float(CE_D.monto_tope_st):
									bnd_mt_st=False

								vali_sunat = True
								if tipo_ope == 'F' and len(DniRucCliente)!=11:
									vali_sunat = False
								if vali_sunat:
									if bnd_mt_st:
										comi1=str(Comicion)
										Cantidad= ConvertirDecimal(Monto)
										capi1=str(Monto)
										otros1=str(montoconcepto)
										Ingres= Cantidad+Comi+montoconcepto
										canti=str(Ingres)
										C = Cajas.objects.get(id_usuario__usuario=usr)
										cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
										idSaldo= str(cons_saldo.pk)
										SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
										SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroST)+1
										nroReci=numeroR
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroST=numeroR)
										if Moneda=='dolares':
											C1= Cajas.objects.get(pk=C.pk)#origen
											O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
											Cli= Cliente.objects.get(pk=idCliente)
											OD= Oficina.objects.get(pk=OficinaDestino)#destino
											ODes=OD.nombre_oficina
											if bDes!='':
												bxd=Base_Ext.objects.get(pk=bDes)
												ODes=bxd.nombre_base
											ODir=OD.direccion
											saldo= SaldoDolares+Ingres
											SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldo)
											transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='transferencias',tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
											transferencia.save()
											idCajaD=transferencia.pk
											tipo_ope_='giro'
											if len(nroCtaBanco)>8:
												tipo_ope_='deposito'
											Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,nombre_solicitante=NombreCliente,Apellido_paterno_solicitante=A_paternoCliente,Apellido_materno_solicitante=A_maternoCliente,dni_solicitante=DniRucCliente,observaciones=obsvino+ Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,id_beneficiario=idBeneficiado,aux1=idBeneficiado,dniMenor=dniM,nroCta=nroCtaBanco,banco=banco,tipo_operacion=tipo_ope_,cel_referencia=celularRef,clave=clave)
											Stransferencia.save()
											idSTRecibo=Stransferencia.pk

											if bDes!='':
												stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_des=bDes)
												stbe.save()
											if cod_aut:
												Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())

											exito='exito'
										elif Moneda=='soles':
											C1= Cajas.objects.get(pk=C.pk)#origen
											O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
											Cli= Cliente.objects.get(pk=idCliente)
											OD= Oficina.objects.get(pk=OficinaDestino)#destino
											ODes=OD.nombre_oficina
											if bDes!='':
												bxd=Base_Ext.objects.get(pk=bDes)
												ODes=bxd.nombre_base
											ODir=OD.direccion
											saldo= SaldoSoles+Ingres
											SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo)
											transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='transferencias',tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
											transferencia.save()
											idCajaD=transferencia.pk
											tipo_ope_='giro'
											if len(nroCtaBanco)>8:
												tipo_ope_='deposito'
											Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,nombre_solicitante=NombreCliente,Apellido_paterno_solicitante=A_paternoCliente,Apellido_materno_solicitante=A_maternoCliente,dni_solicitante=DniRucCliente,observaciones=obsvino + Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,id_beneficiario=idBeneficiado,aux1=idBeneficiado,dniMenor=dniM,nroCta=nroCtaBanco,banco=banco,tipo_operacion=tipo_ope_,cel_referencia=celularRef,clave=clave)
											Stransferencia.save()
											idSTRecibo=Stransferencia.pk
											if bDes!='':
												stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_des=bDes)
												stbe.save()
											if cod_aut:
												Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())
											# si es para bancos
											if banco !='':
												ODes = banco
											
											if banco!='':
												tipo_ope_='giro'
												if len(nroCtaBanco)>8:
													tipo_ope_='deposito'
												if len(nroCtaBanco)>0:
													CliB= Cliente.objects.get(pk=idBeneficiado)
													if not cta_bancos.objects.filter(id_cliente=idBeneficiado,cta_dni=nroCtaBanco).exists():
														cbanco = cta_bancos(id_cliente=CliB,banco=banco,cel_referencia=celularRef,cta_dni=nroCtaBanco,tipo_operacion=tipo_ope_)
														cbanco.save()
											#socket
											if celular != None and celular!="":
												Cliente.objects.filter(pk=idBeneficiado).update(telefono=celular)

											if celularCli != None and celularCli!="":
												Cliente.objects.filter(pk=idCliente).update(telefono=celularCli)

											#endsocket
											#exito='exito'
											if CajaSunat.objects.filter(id_caja=C.pk,estado=True).exists():
												conf_fa = CajaSunat.objects.get(id_caja=C.pk,estado=True)
												re_e_ruc = conf_fa.id_serie.id_empresa.ruc
												re_e_razon = conf_fa.id_serie.id_empresa.razon
												re_e_depa = conf_fa.id_serie.id_empresa.departamento.capitalize()
												re_e_pro = conf_fa.id_serie.id_empresa.provincia.capitalize()
												re_e_dis = conf_fa.id_serie.id_empresa.distrito.capitalize()
												re_e_dir = conf_fa.id_serie.id_empresa.direccion
												emision = getStringDateTimeTZ()
												if tipo_ope=='R':
													es_sunat ='no'
													exito ='exito'
												elif tipo_ope == 'B':
													b_co = conf_fa.id_serie.correlativo_b + 1
													#----
													dni_boleta = DniRucCliente.strip()
													if len(dni_boleta) != 8:
														dni_boleta = '00000000'
													#--
													inv_moneda = ''
													if Moneda=='dolares':
														inv_moneda= 'USD'
														re_su_mo='$.'
													elif Moneda=='soles':
														inv_moneda ='PEN'
														re_su_mo='S/.'
													su_neto =0
													su_igv=0
													su_total=0
													if conf_fa.es_selva:
														su_neto =round(Comi,2)
														su_igv=0.00
														su_total=round(Comi,2)
													else:
														vn,i, t=calcular_neto_igv(Comi) 
														su_neto =round(vn,2)
														su_igv=round(i,2)
														su_total=round(t,2)

													re_su_total=str(su_total)
													re_su_sub=str(su_neto)
													re_su_igv=str(su_igv)
													#invoice
													invoice = FacturacionOperacionV1(tipo="B",
														serie=conf_fa.id_serie.serie_b,
														correlativo=b_co,
														fecha_emision=datetime.now(),
														nro_doc=dni_boleta,
														razon=NombreCliente.strip()+" "+A_paternoCliente.strip()+" "+A_maternoCliente.strip(),
														codigo_pro="P00001",
														descripcion="SERVICIO DE TRANSFERENCIA DE DINERO",
														m_neto=su_neto,
														m_igv = su_igv,
														m_total= su_total,
														monto_letras = n_letras,
														idOperacion = Stransferencia.pk,
														tabla ="SolicitudTransferencia",
														estado_sunat ='activo',
														fecha_tz_letras =emision,
														id_caja= C.pk,
														id_empresa = conf_fa.id_serie.id_empresa.pk,
														moneda= inv_moneda)

													invoice.save()
													#-
													#conf_fa.correlativo_b = b_co
													#conf_fa.save()
													#QR
													PARAMS = {'token':"Fe1245dock.Dex"}
													todo = {"ruc": conf_fa.id_serie.id_empresa.ruc,
															"tipo": "03",
															"serie": conf_fa.id_serie.serie_b,
															"numero": b_co,
															"emision": emision,
															"igv": su_igv,
															"total": su_total,
															"clienteTipo": "1",
															"clienteNumero": dni_boleta}#dni

													api_url = "http://localhost:8000/api/v1/sale/qr"
													r = requests.post(url = api_url,params =PARAMS, data = json.dumps(todo))
													uri = ("data:" + r.headers['Content-Type'] + ";" +"base64," + base64.b64encode(r.content).decode("utf-8"))
													es_sunat ='si'
													re_serie = conf_fa.id_serie.serie_b
													re_correlativo = getSerie8Digits(b_co)
													re_fecha_tz = emision
													re_nletras = n_letras
													re_tipo="BOLETA"
													re_ruc=dni_boleta
													serie = SerieSunat.objects.filter(pk=conf_fa.id_serie.pk).update(correlativo_b=b_co)
													exito ='exito'
												elif tipo_ope == 'F':
													f_co = conf_fa.id_serie.correlativo_f + 1
													#--
													inv_moneda = ''
													if Moneda=='dolares':
														inv_moneda= 'USD'
														re_su_mo='$.'
													elif Moneda=='soles':
														inv_moneda ='PEN'
														re_su_mo='S/.'
													su_neto =0
													su_igv=0
													su_total=0
													if conf_fa.es_selva:
														su_neto =round(Comi,2)
														su_igv=0.00
														su_total=round(Comi,2)
													else:
														vn,i, t=calcular_neto_igv(Comi) 
														su_neto =round(vn,2)
														su_igv=round(i,2)
														su_total=round(t,2)

													re_su_sub=str(su_neto)
													re_su_igv=str(su_igv)
													re_su_total=str(su_total)
													#invoice
													invoice =FacturacionOperacionV1(tipo="F",
														serie=conf_fa.id_serie.serie_f,
														correlativo=f_co,
														fecha_emision=datetime.now(),
														nro_doc=DniRucCliente,#ruc
														razon=NombreCliente,
														codigo_pro="P00001",
														descripcion="SERVICIO DE TRANSFERENCIA DE DINERO",
														m_neto=su_neto,
														m_igv = su_igv,
														m_total= su_total,
														monto_letras = n_letras,
														idOperacion = Stransferencia.pk,
														tabla ="SolicitudTransferencia",
														estado_sunat ='activo',
														fecha_tz_letras =emision,
														id_caja= C.pk,
														id_empresa = conf_fa.id_serie.id_empresa.pk,
														moneda= inv_moneda)
													invoice.save()
													#-
													#conf_fa.correlativo_f = f_co
													#conf_fa.save()
													PARAMS = {'token':"Fe1245dock.Dex"}
													todo = {"ruc": conf_fa.id_serie.id_empresa.ruc,
															"tipo": "01",
															"serie": conf_fa.id_serie.serie_f,
															"numero": f_co,
															"emision": emision,
															"igv": su_igv,
															"total": su_total,
															"clienteTipo": "6",
															"clienteNumero": DniRucCliente}#ruc

													api_url = "http://localhost:8000/api/v1/sale/qr"
													r = requests.post(url = api_url,params =PARAMS, data = json.dumps(todo))
													uri = ("data:" + r.headers['Content-Type'] + ";" +"base64," + base64.b64encode(r.content).decode("utf-8"))
													es_sunat ='si'
													re_serie = conf_fa.id_serie.serie_f
													re_correlativo = getSerie8Digits(f_co)
													re_fecha_tz = emision
													re_nletras = n_letras
													re_tipo="FACTURA"
													re_ruc=DniRucCliente
													serie = SerieSunat.objects.filter(pk=conf_fa.id_serie.pk).update(correlativo_f = f_co)
													exito ='exito'
												else:
													es_sunat ='no'
													exito ='exito'
											else:
												es_sunat ='no'
												exito ='exito'

										else:
											exito='fail'
									else:
										exito='El monto que esta enviando es muy alto para: '+ci.id_oficina.nombre_oficina+'. Solo puede enviar hasta '+str(CE_D.monto_tope_st)
								else:
									exito= 'No puede emitir boleta o factura, verifique el numero de documento'
							else:
								exito=' Comision u Otros Conceptos demasiado bajo... comuniquese con el gerente'
							
						else:
							exito='Usted ya sobrepaso el monto tope en transferencias'
					else:
						exito='Comision no permitida'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	env_p=envio_pendiente(C.pk)
	return render(request,"CrearTrans.html",{"aso_e":asociado['e'],"aso_me":asociado['me'],"aso_ss":asociado['ss'],"aso_sd":asociado['sd'],"aso_mt":asociado['mt'],"env":env_p,"transac":transac,"resultado":exito,"cargo":cargo,"idST":idSTRecibo,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":canti,"comisionRecibo":comi1,"capitalRecibo":capi1,"otrosRecibo":otros1,"monedaRecibo":Moneda,"oficinadestino":ODes,"direccionofi":ODir,"nrorecibo":nroReci,"bene":bene,"beneAp":beneAp,"soli":soli,"soliAp":soliAp,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'recibo_obs':recibo_obs,'recibo_det':recibo_det,'celular':celular,'uri_qr':uri,'es_sunat':es_sunat,'re_serie':re_serie,'re_correlativo':re_correlativo,'re_fecha_tz':re_fecha_tz,'re_nletras':re_nletras,'re_tipo':re_tipo,'re_ruc':re_ruc,'re_e_ruc':re_e_ruc,'re_e_razon':re_e_razon,'re_e_depa':re_e_depa,'re_e_pro':re_e_pro,'re_e_dis':re_e_dis,'re_e_dir':re_e_dir,'check_fe':check_fe,'re_su_total':re_su_total, 're_su_sub':re_su_sub ,'re_su_igv': re_su_igv,'re_su_mo':re_su_mo} )

#*************** intercambios *******************
def cod_generator(size=4, chars=string.digits):
	return ''.join(random.choice(chars) for _ in range(size))

@login_required
@transaction.atomic
def CrearIntercambio_view(request):#encargado de crear transferencias
	idCliente=request.POST.get('IdCliente','')
	idBeneficiado=request.POST.get('IdBeneficiado','')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','TipoPersona','DniRucCln','NombreCln','PaternoCln','MaternoCln','DireccionCln','NombreBnf','PaternoBnf','MaternoBnf','OficinaDst','SucursalDst','moneda','txtCantidad','txtComicion','obs',)
	DniRucCliente= request.POST.get('DniRucCln','')
	NombreCliente= request.POST.get('NombreCln')
	A_paternoCliente= request.POST.get('PaternoCln')
	A_maternoCliente= request.POST.get('MaternoCln')
	TipoPersonaBen=request.POST.get('TipoPersonaB')
	DniRucBen= request.POST.get('DniRucB','')
	NombreBenef= request.POST.get('NombreBnf')
	A_paternoBenef= request.POST.get('PaternoBnf')
	A_maternoBenef = request.POST.get('MaternoBnf')
	celular = request.POST.get('CelularBnf','')
	OficinaDestino = request.POST.get('OficinaDst')
	CajaDestino = request.POST.get('CajaDes')
	Moneda= request.POST.get('moneda')
	Monto= request.POST.get('Monto')
	Comicion = request.POST.get('comicion')
	Observaciones = request.POST.get('obs','')
	montoconcepto= request.POST.get('MontoConcepto')
	conceptoDetalle= request.POST.get('conceptoDet','')
	transac_= request.POST.get('transac')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	usr=request.user.username
	recibo_obs=Observaciones
	recibo_det=conceptoDetalle
	ODes= ''
	ODir=''
	soli=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	transac=''
	canti=0
	aux_codigo=''
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if NombreBenef != None:
		if DniRucCliente == None:
			DniRucCliente=''
		if montoconcepto ==''or montoconcepto == None:
			montoconcepto=0
		else:
			montoconcepto = ConvertirDecimal(montoconcepto)

		if TipoPersona ==''or TipoPersona == None:
			TipoPersona='Natural'
		try:
			with transaction.atomic():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					bene=NombreBenef+', '+A_paternoBenef+' '+A_maternoBenef
					soli=NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente

					if idCliente == '' or idCliente== None:
						sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
						if sq.count()==0:
							cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
							cln.save()
							idCliente = str(cln.pk)
						else:
							lista5= list(sq)
							idCliente= str(lista5[0]['pk'])
					
					if idBeneficiado == '' or idBeneficiado== None:
						sqb=Cliente.objects.filter(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef).values('pk')
						if sqb.count()==0:
							cln = Cliente(dni=DniRucBen,nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,tipo_persona=TipoPersonaBen,idCaja=C.pk)
							cln.save()
							idBeneficiado = str(cln.pk)
						else:
							lista5= list(sqb)
							idBeneficiado= str(lista5[0]['pk'])
					Comi= ConvertirDecimal(Comicion)
					#CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					#if Comi >= CE.comision_minima and montoconcepto >= CE.otros_conceptos_minimo:
					comi1=str(Comicion)
					Cantidad= ConvertirDecimal(Monto)
					capi1=str(Monto)
					otros1=str(montoconcepto)
					Ingres= Cantidad+Comi+montoconcepto
					canti=str(Ingres)
					C = Cajas.objects.get(id_usuario__usuario=usr)
					cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
					idSaldo= str(cons_saldo.pk)
					SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
					SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroR = int(Nrecibo.nroSI)+1
					nroReci=numeroR
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroSI=numeroR)
					aux_codigo=cod_generator()
					if Moneda=='dolares':
						C1= Cajas.objects.get(pk=C.pk)#origen
						O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
						Cli= Cliente.objects.get(pk=idCliente)
						OD= Oficina.objects.get(pk=OficinaDestino)#destino
						ODes=OD.nombre_oficina
						ODir=OD.direccion
						
						transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='Intercambio',conceptoDetalle='Intercambio para: '+bene,tipoDocumento='S/I',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
						transferencia.save()
						idCajaD=transferencia.pk
						Stransferencia= Intercambio(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,id_beneficiario=idBeneficiado,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,codigo=aux_codigo)
						Stransferencia.save()
						if CajaDestino != None and CajaDestino !='':
							cajad= Cajas.objects.get(pk=CajaDestino)
							interD=Intercambios_dirigido(id_intercambio=Stransferencia,id_caja_destino=cajad)
							interD.save()
						saldo= SaldoDolares+Ingres
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldo)
						#socket
						""""
						if celular != None and celular!="":
							Cliente.objects.filter(pk=idCliente).update(telefono=celular)
							aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a la "+OD.direccion +"\nAtte. Consorcio Imperial"
							sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
							sms.save()
							aux_host= host_socket_io();
							aux_puerto= puerto_socket_io();
							mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
							with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
								socketIO.emit('mensaje_imperial',mensaje)
						"""
						#endsocket
						exito='exito'
					elif Moneda=='soles':
						C1= Cajas.objects.get(pk=C.pk)#origen
						O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
						Cli= Cliente.objects.get(pk=idCliente)
						OD= Oficina.objects.get(pk=OficinaDestino)#destino
						ODes=OD.nombre_oficina
						ODir=OD.direccion
						transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='Intercambio',conceptoDetalle='Intercambio oara '+bene,tipoDocumento='S/I',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
						transferencia.save()
						idCajaD=transferencia.pk
						Stransferencia= Intercambio(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,id_beneficiario=idBeneficiado,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,codigo=aux_codigo)
						Stransferencia.save()
						if CajaDestino != None and CajaDestino !='':
							cajad= Cajas.objects.get(pk=CajaDestino)
							interD=Intercambios_dirigido(id_intercambio=Stransferencia,id_caja_destino=cajad)
							interD.save()
						saldo= SaldoSoles+Ingres
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo)
						#socket
						"""
						if celular != None and celular!="":
							aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a "+OD.direccion +"\nAtte. Consorcio Imperial"
							sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
							sms.save()
							aux_host= host_socket_io();
							aux_puerto= puerto_socket_io();
							mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
							with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
								socketIO.emit('mensaje_imperial',mensaje)
						"""
						#endsocket
						exito='exito'
					else:
						exito='fail'
					#else:
					#	exito=' comision u Otros Comceptos demasiado bajo... comuniquese con el gerente'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	env_p=envio_pendiente(C.pk)
	return render(request,"CrearIntercambio.html",{"env":env_p,"transac":transac,"resultado":exito,"cargo":cargo,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":canti,"comisionRecibo":comi1,"capitalRecibo":capi1,"otrosRecibo":otros1,"monedaRecibo":Moneda,"oficinadestino":ODes,"direccionofi":ODir,"nrorecibo":nroReci,"bene":bene,"soli":soli,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'recibo_obs':recibo_obs,'recibo_det':recibo_det,'celular':celular,'codigo':aux_codigo} )

@login_required
@transaction.atomic
def extornarInterc_ajax_view(request):
	data=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		obsp=request.GET.get('obs','')
		dnib=request.GET.get('dni','')
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				con_st= Intercambio.objects.get(pk=idTr,idCajaDebe__id_caja=C.pk)
				idTcajaD= str(con_st.idCajaDebe.pk)
				conceptoDetall= 'Extornado a ' + con_st.id_cliente.nombre + ' ' + con_st.id_cliente.Apellido_paterno + ' ' + con_st.id_cliente.Apellido_materno
				Moneda= str(con_st.idCajaDebe.moneda)
				Csaldo= SaldoDisponibleCajas.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
				cons_saldo= list(Csaldo)
				idSaldo= str(cons_saldo[0]['pk'])
				SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
				SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
				MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero) - ConvertirDecimal(con_st.comision)- ConvertirDecimal(con_st.monto_conceptos)
				CE=ConfiguracionExtra_caja.objects.get(id_caja=C.pk)
				if CE.extorno_total=='si':
					MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero)
					TCajaDebe.objects.select_for_update().filter(pk=idTcajaD).update(aux1='todo')
				if Moneda=='soles':
					#if SaldoSoles >= MontoEgreso:
					if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
						TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
						
						CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoIntercambio',conceptoDetalle='Intercambio '+conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
						CajaH.save()
						auxx=Intercambio.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

						OST= Intercambio.objects.get(pk=idTr)
						EST=ExtornoIntercambio(idCajaHaber=CajaH,id_intercambio=OST,observaciones=obsp)
						EST.save()
						saldoEgreso=SaldoSoles-MontoEgreso
						Csaldo.update(saldo_soles=saldoEgreso)
						#CDebe.update(estadoTransaccion='pagado')
						#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
						data="exito"
					else:
						data = "error en la operacion"
					#else:
					#	data="saldo insuficiente"
				elif Moneda=='dolares':
					#if SaldoDolares>=MontoEgreso:
					if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
						TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
						
						CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoIntercambio',conceptoDetalle='Intercambio '+conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
						CajaH.save()
						auxx=Intercambio.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

						OST= Intercambio.objects.get(pk=idTr)
						EST=ExtornoIntercambio(idCajaHaber=CajaH,id_intercambio=OST,observaciones=obsp)
						EST.save()
						saldoEgreso=SaldoDolares-MontoEgreso
						Csaldo.update(saldo_dolares=saldoEgreso)
						#CDebe.update(estadoTransaccion='pagado')
						#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
						data="exito"
					else:
						data = "error en la operacion"
					#else:
					#	data="saldo insuficiente"
				else:
					exito='fail'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)
#-------------------
def completar(n):
	if len(str(n))<2:
		ax='0'+str(n)
		return ax[-2:]
	else:
		return str(n)
#-------------------
 
@login_required
@transaction.atomic
def PagoInterc_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		obsp=request.GET.get('obs','')
		dnib=request.GET.get('dni','')
		egreso_pago=request.GET.get('egreso','')
		cod_aut=request.GET.get('cod_aut','')
		cod_in=request.GET.get('cod_in','')
		cod_in1=request.GET.get('cod_in1','')
		ade=request.GET.get('adelanto','')
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				veri_cod= Intercambio.objects.get(pk=idTr,id_oficina=C.id_oficina.pk)
				verifi_cod=True
				if str(veri_cod.codigo).isdigit():
					verifi_cod= str(veri_cod.codigo)==cod_in or str(veri_cod.codigo)==cod_in1
				if verifi_cod:
					if ade !='' or PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).exists():
						monto_egreso_pago=0
						st= Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos')
						con_st= list(st)
						idTcajaD= str(con_st[0]['idCajaDebe'])
						CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
						con_CajaDebe= list(CDebe)
						moneda= str(con_CajaDebe[0]['moneda'])
						Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
						cons_saldo= list(Csaldo)
						idSaldo= str(cons_saldo[0]['pk'])
						SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
						SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
						MontoIn=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
						MontoEgreso=0
						val=True
						todo='si'
						ui=None
						if ade !='':
							MontoEgreso= float(ade)
							if PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).exists():
								ui=PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).latest("pk")
								if MontoEgreso< float(ui.saldo):
									todo='no'
								val= MontoEgreso<= float(ui.saldo)
							else:
								val= MontoEgreso < MontoIn
								todo='no'

						else:
							ui=PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).latest("pk")
							MontoEgreso= float(ui.saldo)
							

						#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
						#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
						if egreso_pago !='':
							monto_egreso_pago=float(egreso_pago)
						SolTr= Intercambio.objects.get(pk=idTr)
						if moneda=='soles':
							#if SaldoSoles >= (MontoEgreso+monto_egreso_pago) and val:
							if val:
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									bandera=True
									if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
										in_dir= Intercambios_dirigido.objects.get(id_intercambio=idTr)
										if not in_dir.id_caja_destino.pk== C.pk:
											if cod_aut !='':
												if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
											else:
												bandera=False
									if bandera:
										numeroR=0
										nra=0
										saldoAd=MontoIn
										if ui != None:
											nra= ui.nroAdelanto
											saldoAd=float(ui.saldo)
											numeroR=int(ui.nroReciboPI)
										else:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR = int(Nrecibo.nroPI)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPI=numeroR)
										nr=str(numeroR)+'- A'+completar(nra+1)
										idST = Intercambio.objects.get(pk=idTr)
										bene= idST.nombre_beneficiado + ' '+idST.Apellido_paterno_beneficiado +' '+idST.Apellido_materno_beneficiado
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoAdelantoIntercambio',conceptoDetalle='PI Adelanto a: '+bene,tipoDocumento='P/I',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR)+'- A'+completar(nra+1))
										CajaH.save()
										idCajaH= CajaH.pk
										PagoT= PagoAdelantoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp,nroAdelanto=nra+1,nroReciboPI=numeroR,saldo=saldoAd - MontoEgreso )
										PagoT.save()
										idST.pago_adelanto = True
										idST.save()
										if todo=='si':
											CDebe.update(estadoTransaccion='pagado')
										if monto_egreso_pago>0:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR_e=int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
											TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio P/I-'+str(numeroR)+' - A'+completar(nra+1),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
											TCajaH.save()
											eex= EgresoExtraIntercambioAdelanto(idCajaHaber=TCajaH,id_pago_intercambio_a=PagoT,monto=monto_egreso_pago)
											eex.save()
										saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago
										Csaldo.update(saldo_soles=saldoEgreso)
										st.update(dni_beneficiado=dnib)
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										data="exito"
									else:
										data="Error: Accion no autorizada"
								else:
									data ="error en operacion"
							else:
								data="operacion incorrecto verfique monto de adelanto"
							#	data="saldo insuficiente"
						elif moneda=='dolares':
							#if SaldoDolares>=(MontoEgreso+monto_egreso_pago) and val:
							if val:
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									bandera=True
									if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
										in_dir= Intercambios_dirigido.objects.get(id_intercambio=idTr)
										if not in_dir.id_caja_destino.pk== C.pk:
											if cod_aut !='':
												if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
											else:
												bandera=False
									if bandera:
										numeroR=0
										nra=0
										saldoAd=MontoIn
										if ui != None:
											nra= ui.nroAdelanto
											saldoAd=float(ui.saldo)
											numeroR=int(ui.nroReciboPI)
										else:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR = int(Nrecibo.nroPI)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPI=numeroR)
										nr=str(numeroR)+'- A'+completar(nra+1)
										idST = Intercambio.objects.get(pk=idTr)
										bene= idST.nombre_beneficiado + ' '+idST.Apellido_paterno_beneficiado +' '+idST.Apellido_materno_beneficiado
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoAdelantoIntercambio',conceptoDetalle='PI Adelanto a: '+bene,tipoDocumento='P/I',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR)+' - A'+completar(nra+1))
										CajaH.save()
										idCajaH= CajaH.pk

										PagoT= PagoAdelantoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp,nroAdelanto=nra+1,nroReciboPI=numeroR,saldo=saldoAd - MontoEgreso )
										PagoT.save()
										if todo=='si':
											CDebe.update(estadoTransaccion='pagado')
										if monto_egreso_pago>0:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR_e=int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
											TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio P/I-'+str(numeroR)+' - A'+completar(nra+1),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
											TCajaH.save()
											eex= EgresoExtraIntercambioAdelanto(idCajaHaber=TCajaH,id_pago_intercambio_a=PagoT,monto=monto_egreso_pago)
											eex.save()
										saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago
										Csaldo.update(saldo_dolares=saldoEgreso)
										st.update(dni_beneficiado=dnib)
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										data="exito"
									else:
										data="Error: Accion no autorizada"
								else:
									data ="error en operacion"
							else:
								data="operacion incorrecto verfique monto de adelanto"
							#else:
							#	data="saldo insuficiente"
						else:
							data='fail'
					else:
						monto_egreso_pago=0
						st= Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos')
						con_st= list(st)
						idTcajaD= str(con_st[0]['idCajaDebe'])
						CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
						con_CajaDebe= list(CDebe)
						moneda= str(con_CajaDebe[0]['moneda'])
						Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
						cons_saldo= list(Csaldo)
						idSaldo= str(cons_saldo[0]['pk'])
						SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
						SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
						MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
						#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
						if egreso_pago !='':
							monto_egreso_pago=float(egreso_pago)
						SolTr= Intercambio.objects.get(pk=idTr)
						delta= datetime.now() - SolTr.idCajaDebe.fecha
						if moneda=='soles':
							#if SaldoSoles >= (MontoEgreso+monto_egreso_pago):
							if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
								bandera=True
								if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
									in_dir= Intercambios_dirigido.objects.get(id_intercambio=idTr)
									if not in_dir.id_caja_destino.pk== C.pk:
										if cod_aut !='':
											if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
												bandera =True
												soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
											else:
												bandera=False
										else:
											bandera=False
								if bandera:
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroPI)+1
									NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPI=numeroR)
									nr=numeroR
									idST = Intercambio.objects.get(pk=idTr)
									bene= idST.nombre_beneficiado + ' '+idST.Apellido_paterno_beneficiado +' '+idST.Apellido_materno_beneficiado
									CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoIntercambio',conceptoDetalle='PI a: '+bene,tipoDocumento='P/I',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
									CajaH.save()
									idCajaH= CajaH.pk

									PagoT= PagoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp)
									PagoT.save()
									CDebe.update(estadoTransaccion='pagado')
									if monto_egreso_pago>0:
										numeroR_e=int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
										TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio P/I-'+str(numeroR),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
										TCajaH.save()
										eex= EgresoExtraIntercambio(idCajaHaber=TCajaH,id_pago_intercambio=PagoT,monto=monto_egreso_pago)
										eex.save()
									saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago
									Csaldo.update(saldo_soles=saldoEgreso)
									st.update(dni_beneficiado=dnib)
									#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
									data="exito"
								else:
									data="Error: Accion no autorizada"
							else:
								data ="error en operacion"
							#else:
							#	data="saldo insuficiente"
						elif moneda=='dolares':
							#if SaldoDolares>=(MontoEgreso+monto_egreso_pago):
							if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
								bandera=True
								if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
									in_dir= Intercambios_dirigido.objects.get(id_intercambio=idTr)
									if not in_dir.id_caja_destino.pk== C.pk:
										if cod_aut !='':
											if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
												bandera =True
												soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
											else:
												bandera=False
										else:
											bandera=False
								if bandera:
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroPI)+1
									NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPI=numeroR)
									nr=numeroR
									idST = Intercambio.objects.get(pk=idTr)
									bene= idST.nombre_beneficiado + ' '+idST.Apellido_paterno_beneficiado +' '+idST.Apellido_materno_beneficiado
									CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoIntercambio',conceptoDetalle='PI a: '+bene,tipoDocumento='P/I',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
									CajaH.save()
									idCajaH= CajaH.pk
									
									PagoT= PagoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp)
									PagoT.save()
									CDebe.update(estadoTransaccion='pagado')
									if monto_egreso_pago>0:
										numeroR_e=int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
										TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio P/I-'+str(numeroR),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
										TCajaH.save()
										eex= EgresoExtraIntercambio(idCajaHaber=TCajaH,id_pago_intercambio=PagoT,monto=monto_egreso_pago)
										eex.save()
									saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago
									Csaldo.update(saldo_dolares=saldoEgreso)
									st.update(dni_beneficiado=dnib)
									#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
									data="exito"
								else:
									data="Error: Accion no autorizada"
							else:
								data ="error en operacion"
							#else:
							#	data="saldo insuficiente"
						else:
							data='fail'
				else:
					data='Codigo no valido; este intercambio requiere codigo'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	d= {'exito':data,'nr':nr}
	d= json.dumps(d)
	mimetype="application/json"
	return HttpResponse(d,mimetype)
#*************** end intercambios ****************

@login_required
@transaction.atomic
def transferenciaGLOleida_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		dt=request.GET.get('dt','')
		nst=request.GET.get('nst','')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				gst= SolicitudTransferencia.objects.get(pk=idTr)
				if gst.idCajaDebe.estadoTransaccion=='activo':
					st= SolicitudTransferencia.objects.filter(pk=idTr).exclude(idCajaDebe__observaciones2__startswith='leido').values('pk','idCajaDebe')
					if len(st)>0:
						CDebe=TCajaDebe.objects.filter(pk=st[0]['idCajaDebe']).update(aux1=dt,observaciones2='leido-'+str(C.id_usuario.pk))
						st_aux = SolicitudTransferencia.objects.filter(pk=idTr).update(nroLeido=nst)
						data='exito'
					else:
						data='Esta transferencia ya esta leido'
				else:
					data='error. la transferencia esta: '+gst.idCajaDebe.estadoTransaccion
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def anular_transleido_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		#dt=request.GET.get('dt','')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				gst= SolicitudTransferencia.objects.get(pk=idTr)
				if gst.idCajaDebe.estadoTransaccion=='activo':
					if SolicitudTransferencia.objects.filter(pk=idTr,idCajaDebe__observaciones2__startswith='leido').exists():
						CDebe=TCajaDebe.objects.filter(pk=gst.idCajaDebe.pk).update(aux1='',observaciones2='')
						data='exito'
					else:
						data='Esta transferencia no esta leido'
				else:
					data='error. la transferencia esta: '+gst.idCajaDebe.estadoTransaccion
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def CambiarContra_view(request):#encargado de crear transferencias
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	cona=request.POST.get('passA')#capturamos los atributos del formulario
	conn=request.POST.get('passN')
	usr = request.user.username
	cargo =''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if cona != None:
		try:
			with transaction.atomic():
				if conn != None and conn != "" and cona != None and cona != "":
					if request.user.check_password(str(cona)):
						#u= request.user.set_password(str(conn))
						u= User.objects.get(username=usr)
						u.set_password(str(conn))
						u.save()
						aux= Personal.objects.select_for_update().filter(usuario=usr).update(password=str(conn))
						exito='exito'
					else:
						exito ='Password anterior invalido'
				else:
					exito='datos incorrectos'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"CanbiarContrasena.html",{"resultado":exito,"cargo":cargo} )



@login_required
@transaction.atomic
def Actualizadatos_view(request):#encargado de crear transferencias
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	nombrep=request.POST.get('nombre')
	ap=request.POST.get('ap')
	am=request.POST.get('am')
	tel=request.POST.get('tel')
	dire=request.POST.get('dir')
	fn=request.POST.get('fn')
	emailp=request.POST.get('email')
	usr = request.user.username
	cargo =''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if nombrep != None:
		try:
			with transaction.atomic():
				aux= Personal.objects.select_for_update().filter(usuario=usr).update(nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,telefono=tel,direccion=dire,fecha_nacimiento=fn,email=emailp)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"perfil.html",{"resultado":exito,"cargo":cargo} )

def vericar_autorizacion_st(C,tabla,opfecha, st):
	config_ge= ConfiguracionExtra_caja.objects.get(id_caja=C.pk)
	#print(" delta ",opfecha)
	delta = dtime_.datetime.today()- opfecha
	limit_time = config_ge.st_expiracion
	#if tabla =="ExtornoTransferencia":
	#	limit_time  = 1
	if delta.days <= limit_time:
		return True
	else:
		if SolicitudDesbloqueoST.objects.filter(id_solicitud=st.pk,tabla=tabla, id_caja= C.pk).exists():
			solicitud_des = SolicitudDesbloqueoST.objects.get(id_solicitud=st.pk,tabla=tabla, id_caja= C.pk)
			if solicitud_des.id_oficina.pk == C.id_oficina.pk and solicitud_des.id_caja.pk==C.pk and solicitud_des.id_personal.pk == C.id_usuario.pk:
				return solicitud_des.estadoAutorizacion == "autorizado" and solicitud_des.activo
			else:
				solicitud_des = SolicitudDesbloqueoST(id_solicitud=st,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,tabla=tabla,estadoAutorizacion="pendiente")
				solicitud_des.save()
				return False
		else:
			solicitud_des = SolicitudDesbloqueoST(id_solicitud=st,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,tabla=tabla,estadoAutorizacion="pendiente")
			solicitud_des.save()
			return False
	
def actualizar_autorizacion_st(tabla,pkst,pk_caja):
	if SolicitudDesbloqueoST.objects.filter(id_solicitud=pkst,tabla=tabla, id_caja=pk_caja).exists():
		solicitud_des = SolicitudDesbloqueoST.objects.get(id_solicitud=pkst,tabla=tabla, id_caja=pk_caja)
		solicitud_des.estadoAutorizacion = 'utilizado'
		solicitud_des.fecha_op = datetime.now()
		solicitud_des.save()
	return True

@login_required
@transaction.atomic
def extornarTrans_ajax_view(request):
	data=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		obsp=request.GET.get('obs','')
		dni_s=request.GET.get('dni','')
		nombre_s=request.GET.get('nombre','')
		ap_s=request.GET.get('ap','')
		am_s=request.GET.get('am','')
		cod_aut=request.GET.get('codigo','')#codigo de autorizacion
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				con_st= SolicitudTransferencia.objects.get(pk=idTr,idCajaDebe__id_caja=C.pk)
				aux_nom= con_st.id_cliente.nombre
				aux_ap= con_st.id_cliente.Apellido_paterno
				aux_am= con_st.id_cliente.Apellido_materno
				#if distanciaLib.fast_comp(aux_nom,nombre_s)==0 and distanciaLib.fast_comp(aux_ap,ap_s)==0 and distanciaLib.fast_comp(aux_am,am_s)==0 :
					#Cliente.objects.filter(pk=con_st.id_cliente.pk).update(dni=dni_s,verificado=True)
				idTcajaD= str(con_st.idCajaDebe.pk)
				conceptoDetall= 'Extornado a ' + con_st.id_cliente.nombre + ' ' + con_st.id_cliente.Apellido_paterno + ' ' + con_st.id_cliente.Apellido_materno
				Moneda= str(con_st.idCajaDebe.moneda)
				Csaldo= SaldoDisponibleCajas.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
				cons_saldo= list(Csaldo)
				idSaldo= str(cons_saldo[0]['pk'])

				SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
				SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
				MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero) - ConvertirDecimal(con_st.comision)- ConvertirDecimal(con_st.monto_conceptos)
				CE=ConfiguracionExtra_caja.objects.get(id_caja=C.pk)
				if CE.extorno_total=='si':
					MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero)
					TCajaDebe.objects.select_for_update().filter(pk=idTcajaD).update(aux1='todo')
				delta= datetime.now() - con_st.idCajaDebe.fecha
				if con_st.idCajaDebe.observaciones2[:5] != 'leido':
					if Moneda=='soles':
						#if SaldoSoles >= MontoEgreso:
						if vericar_autorizacion_st(C,"ExtornoTransferencia",con_st.idCajaDebe.fecha,con_st):
							bandera=True
							"""
							if delta.days >1:
								if cod_aut !='':
									if SolicitudAutExtornoST.objects.filter(id_st=con_st.pk,estado='autorizado',codigo_aut=cod_aut).exists():
										bandera =True
										SolicitudAutExtornoST.objects.filter(id_st=con_st.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_extorno=datetime.now(),estado='utilizado')
									else:
										bandera=False
								else:
									bandera=False
							"""

							if bandera:
								if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
									n_banco_leido= True
									if con_st.leido_banco !=None and con_st.leido_banco[:2]=='si':
										n_banco_leido = False
									if n_banco_leido:
										TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
										saldoEgreso=SaldoSoles-MontoEgreso
										Csaldo.update(saldo_soles=saldoEgreso)
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='TtransferenciaExtorno',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										#auxx=SolicitudTransferencia.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

										OST= SolicitudTransferencia.objects.get(pk=idTr)
										EST=ExtornoTransferencia(idCajaHaber=CajaH,id_solicitud_transferencia=OST,observaciones=obsp)
										EST.save()

										#CDebe.update(estadoTransaccion='pagado')
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										actualizar_autorizacion_st("ExtornoTransferencia", con_st.pk, C.pk)
										data="exito"
									else:
										data='error transferencia banco LEIDO'
								else:
									data = "error en la operacion"
							else:
								data="error con codigo de autorizacion"
						else:
							data ="La transferncia no se puede extornar, solicite autorizacion al administrador"
						#else:
						#	data="saldo insuficiente"
					elif Moneda=='dolares':
						if SaldoDolares>=MontoEgreso:
							if vericar_autorizacion_st(C,"ExtornoTransferencia",con_st.idCajaDebe.fecha,con_st):
								bandera=True
								"""
								if delta.days >1:
									if cod_aut !='':
										if SolicitudAutExtornoST.objects.filter(id_st=con_st.pk,estado='autorizado',codigo_aut=cod_aut).exists():
											bandera =True
											SolicitudAutExtornoST.objects.filter(id_st=con_st.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_extorno=datetime.now(),estado='utlizado')
										else:
											bandera=False
									else:
										bandera=False
								"""
								if bandera:
									if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
										TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
										saldoEgreso=SaldoDolares-MontoEgreso
										Csaldo.update(saldo_dolares=saldoEgreso)
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='TtransferenciaExtorno',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										#auxx=SolicitudTransferencia.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

										OST= SolicitudTransferencia.objects.get(pk=idTr)
										EST=ExtornoTransferencia(idCajaHaber=CajaH,id_solicitud_transferencia=OST,observaciones=obsp)
										EST.save()
										#CDebe.update(estadoTransaccion='pagado')
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										actualizar_autorizacion_st("ExtornoTransferencia",con_st.pk, C.pk)
										data="exito"
									else:
										data = "error en la operacion"
								else:
									data="error con codigo de autorizacion"
							else:
								data ="La transferncia no se puede extornar, solicite autorizacion al administrador"
						else:
							data="saldo insuficiente"
					else:
						data='fail'
				else:
					data='Transferencia Leido, comuniquese con central u oficina destino'
				#else:
				#	data='los datos del solicitante NO CONCUERDAN comuniquese con el gerente'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def extornarTrans_bancos_ajax_view(request):
	data=''
	idTr=request.GET.get('pk')
	RST=request.GET.get('norReciboST')
	obsp=request.GET.get('obs','')
	usr= request.user.username
	try:
		with transaction.atomic():
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if SolicitudTransferenciaBancoa.objects.filter(pk=idTr,idCajaDebe__id_caja=C.pk, idCajaDebe__nroRecibo=RST).exists():
				con_st= SolicitudTransferenciaBancoa.objects.get(pk=idTr,idCajaDebe__id_caja=C.pk, idCajaDebe__nroRecibo=RST)
				idTcajaD= str(con_st.idCajaDebe.pk)
				conceptoDetall= 'Extornado de trasnferencia'
				Moneda= str(con_st.idCajaDebe.moneda)
				Csaldo= SaldoDisponibleCajas.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
				cons_saldo= list(Csaldo)
				idSaldo= str(cons_saldo[0]['pk'])

				SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
				SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
				MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero)
				#delta= datetime.now() - con_st.idCajaDebe.fecha
				if con_st.estado_transferencia == 'activo':
					if Moneda=='soles':
						#if SaldoSoles >= MontoEgreso:
						if vericar_autorizacion_st_bancos(C, 'ExtornoTransferenciaBancos',con_st.idCajaDebe.fecha,con_st):
							if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
								TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
								saldoEgreso=SaldoSoles-MontoEgreso
								Csaldo.update(saldo_soles=saldoEgreso)
								CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoTransferenciaBanco',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
								CajaH.save()
								
								EST=ExtornoTransferenciaBancos(idCajaHaber=CajaH,id_solicitud_transferencia=con_st,observaciones=obsp)
								EST.save()
								con_st.estado_transferencia='extornado'
								con_st.save()
								actualizar_autorizacion_st_bancos("ExtornoTransferenciaBancos", con_st.pk, C.pk)
								exito="exito"
							else:
								exito = "error en la operacion, verifique estado de transaccion"
						else:
							exito= "La transferncia no se puede extornar, solicite autorizacion al administrador"
						#else:
						#	exito="saldo insuficiente"
					elif Moneda=='dolares':
						#if SaldoDolares >= MontoEgreso:
						if vericar_autorizacion_st_bancos(C, 'ExtornoTransferenciaBancos',con_st.idCajaDebe.fecha,con_st):
							if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
								TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
								saldoEgreso=SaldoDolares-MontoEgreso
								Csaldo.update(saldo_dolares=saldoEgreso)
								CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoTransferenciaBanco',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
								CajaH.save()
								
								EST=ExtornoTransferenciaBancos(idCajaHaber=CajaH,id_solicitud_transferencia=con_st,observaciones=obsp)
								EST.save()
								con_st.estado_transferencia='extornado'
								con_st.save()
								actualizar_autorizacion_st_bancos("ExtornoTransferenciaBancos", con_st.pk, C.pk)
								exito="exito"
							else:
								exito = "error en la operacion, verifique estado de transaccion"
						else:
							exito= "La transferncia no se puede extornar, solicite autorizacion al administrador"
						#else:
						#	exito="saldo insuficiente"
					else:
						exito='fail moneda'
				else:
					exito='La transferencia ya se procesó o extornó'
				
			else:
				exito="Error en operacion"
	except:
		data='fail'+ str(sys.exc_info()[1])
	data= json.dumps({'exito':exito})
	mimetype="text"
	return HttpResponse(data,mimetype)
 
@login_required
@transaction.atomic
def PagoTrans_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		obsp=request.GET.get('obs','')
		dnib=request.GET.get('dni','')
		nb=request.GET.get('nombre','')
		apb=request.GET.get('ap','')
		amb=request.GET.get('am','')
		egreso_pago=request.GET.get('egreso','')
		ingreso_pago=request.GET.get('ingreso','')#ingreso
		cod_aut=request.GET.get('cod_aut','')
		nroCtaBanco=request.GET.get('nrocta','')
		dniMenor=request.GET.get('dniMenor','')
		celular=request.GET.get('celular','')
		montoST=request.GET.get('monto','')
		comiST=request.GET.get('comi','')
		nrST=request.GET.get('nr','')
		ptsin=request.GET.get('ptsnvd','')
		nroope=request.GET.get('nrooper','')
		nrogiro=request.GET.get('nrogiro','')
		clave=request.GET.get('clave','')
		check_cta=request.GET.get('check_cta','')
		
		usr= request.user.username
		try:
			nro_ex=''
			nro_ix=''
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				obsp= celular+'/'+obsp
				monto_egreso_pago=0
				monto_ingreso_pago=0#ingreso
				if egreso_pago !='':
					monto_egreso_pago=float(egreso_pago)
				if ingreso_pago !='':
					monto_ingreso_pago=float(ingreso_pago)

				stcheck=SolicitudTransferencia.objects.get(pk=idTr)
				#verificar si existe bobeda
				flackBanco= True
				if stcheck.banco =='si':
					if TConfiguracionSistema.objects.filter(conf3='si').exists():
						if not TConfiguracionSistema.objects.filter(id_caja=C.pk,conf3='si').exists():
							flackBanco= False
				if monto_egreso_pago <= 30:
					if flackBanco:
						if stcheck.id_oficina.pk == C.id_oficina.pk and stcheck.idCajaDebe.nroRecibo==nrST:
							st= SolicitudTransferencia.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos','aux1','dniMenor','nroCta')
							con_st= list(st)
							idBenef=con_st[0]['aux1']
							idTcajaD= str(con_st[0]['idCajaDebe'])
							CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
							con_CajaDebe= list(CDebe)
							moneda= str(con_CajaDebe[0]['moneda'])
							Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
							cons_saldo= list(Csaldo)
							idSaldo= str(cons_saldo[0]['pk'])
							SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
							SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
							MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
							#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
							

							aut_ret=True
							if conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
								rta= conf_permisos_Cajas.objects.get(id_caja=C.pk)
								if rta.aux2 !='si':
									aut_ret= False
							SolTr= SolicitudTransferencia.objects.get(pk=idTr)
							delta= datetime.now() - SolTr.idCajaDebe.fecha
							if moneda=='soles':
								#if SaldoSoles >= (MontoEgreso+monto_egreso_pago - monto_ingreso_pago):
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									if vericar_autorizacion_st(C,"PagoTransferencia",SolTr.idCajaDebe.fecha,SolTr):
										bandera=True
										"""
										if aut_ret:
											if delta.days >=5:
												if cod_aut !='':
													if Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
														bandera =True
														Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
													else:
														bandera=False
												else:
													bandera=False
										"""
										if bandera:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR = int(Nrecibo.nroPT)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
											nr=numeroR
											CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
											CajaH.save()
											idCajaH= CajaH.pk
											idST = SolicitudTransferencia.objects.get(pk=idTr)
											PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
											PagoT.save()
											CDebe.update(estadoTransaccion='pagado')
											idST.nro_operacion = nroope
											idST.nro_giro = nrogiro
											idST.clave = clave
											idST.save()
												# end sms bancos
											if monto_egreso_pago>0:
												numeroR_e=int(Nrecibo.nroRE)+1
												NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
												TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
												TCajaH.save()
												eex= EgresoExtraTransferencia(idCajaHaber=TCajaH,id_pago_transferencia=PagoT,monto=monto_egreso_pago)
												eex.save()
												nro_ex=numeroR_e

											if monto_ingreso_pago>0:
												numeroR_i=int(Nrecibo.nroRI)+1
												NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRI=numeroR_i)
												TCajaD = TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle='Ingreso por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/I",cantidadDinero=monto_ingreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_i,id_oficina=C.id_oficina,id_caja=C)
												TCajaD.save()
												ipt= IngresoExtraTransferencia(idCajaDebe=TCajaD,id_pago_transferencia=PagoT,monto=monto_ingreso_pago)
												ipt.save()
												nro_ix=numeroR_i

											saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago+ monto_ingreso_pago
											Csaldo.update(saldo_soles=saldoEgreso)
											actualizar_autorizacion_st("PagoTransferencia",SolTr.pk, C.pk)
											data="exito"
										else:
											data="Error: Accion no autorizada"
									else:
										data ="La transferncia no se puede cobrar, solicite autorizacion al administrador"
								else:
									data ="error en operacion"
								#else:
								#	data="saldo insuficiente"
							elif moneda=='dolares':
								#if SaldoDolares>=(MontoEgreso+monto_egreso_pago - monto_ingreso_pago):
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									if vericar_autorizacion_st(C,"PagoTransferencia",SolTr.idCajaDebe.fecha,SolTr):
										bandera=True
										"""
										if aut_ret:
											if delta.days >=5:
												if cod_aut !='':
													if Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
														bandera =True
														Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
													else:
														bandera=False
												else:
													bandera=False
										"""
										if bandera:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR = int(Nrecibo.nroPT)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
											nr=numeroR
											CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
											CajaH.save()
											idCajaH= CajaH.pk
											idST = SolicitudTransferencia.objects.get(pk=idTr)
											PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
											PagoT.save()
											CDebe.update(estadoTransaccion='pagado')
											idST.nro_operacion = nroope
											idST.nro_giro = nrogiro
											idST.clave = clave
											idST.save()

											if monto_egreso_pago>0:
												numeroR_e=int(Nrecibo.nroRE)+1
												NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
												TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
												TCajaH.save()
												eex= EgresoExtraTransferencia(idCajaHaber=TCajaH,id_pago_transferencia=PagoT,monto=monto_egreso_pago)
												eex.save()
												nro_ex=numeroR_e

											if monto_ingreso_pago>0:
												numeroR_i=int(Nrecibo.nroRI)+1
												NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRI=numeroR_i)
												TCajaD = TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle='Ingreso por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/I",cantidadDinero=monto_ingreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_i,id_oficina=C.id_oficina,id_caja=C)
												TCajaD.save()
												ipt= IngresoExtraTransferencia(idCajaDebe=TCajaD,id_pago_transferencia=PagoT,monto=monto_ingreso_pago)
												ipt.save()
												nro_ix=numeroR_i

											saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago +monto_ingreso_pago
											Csaldo.update(saldo_dolares=saldoEgreso)
											#if dniMenor!=None and dniMenor!='' and dniMenor!='si':
											if ptsin != 'si':
												if idBenef!=None and idBenef!='': 
													if not Cliente.objects.filter(pk=idBenef,verificado=True).exists():
														Cliente.objects.select_for_update().filter(pk=idBenef).update(dni=dnib,verificado=True)
														st.update(dni_beneficiado=dnib)
													else:
														st.update(dni_beneficiado=dnib)
											actualizar_autorizacion_st("PagoTransferencia",SolTr.pk, C.pk)
											data="exito"
										else:
											data="Error: Accion no autorizada"
									else:
										data ="La transferncia no se puede cobrar, solicite autorizacion al administrador"
								else:
									data ="error en operacion"
								#else:
								#	data="saldo insuficiente"
							else:
								data='fail'
						else:
							data='error en operacion'
					else:
						data='Las tarnsferencias de bancos solo se pueden cancelar en Caja Tesoreria'
				else:
					data ='Monto de egreso demasiado alto'
		except IntegrityError:
			data='fail'+ str(sys.exc_info()[1])
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	d= {'exito':data,'nr':nr,'nre':nro_ex,'nri':nro_ix}
	d= json.dumps(d)
	mimetype="application/json"
	return HttpResponse(d,mimetype)


#-------------- pago con post ------------------
@login_required
@transaction.atomic
def PagoTrans_post_view(request):
	data=''
	nr=''
	nro_ex=''
	nro_ix=''
	re_egreso=''
	re_ingreso=''
	re_bene=''
	re_bene_ap=''
	re_dni_b=''
	re_soli=''
	re_soli_ap=''
	re_fecha_e=''
	re_ori=''
	re_fecha=''
	re_obs=''
	re_monto=''
	cargo =''
	re_moneda=''
	idTr=request.POST.get('idT')
	obsp=request.POST.get('obs','')
	dnib=request.POST.get('dni','')
	#nb=request.GET.get('nombre','')
	#apb=request.GET.get('ap','')
	#amb=request.GET.get('am','')
	egreso_pago=request.POST.get('egreso','')
	ingreso_pago=request.POST.get('ingreso','')#ingreso
	cod_aut=request.POST.get('cod_aut','')
	nroCtaBanco=request.POST.get('nrocta','')
	dniMenor=request.POST.get('dniMenor','')
	celular=request.POST.get('celular','')
	nroope=request.POST.get('detb-nroope','')
	nrogiro=request.POST.get('detb-nrogiro','')
	clave=request.POST.get('detb-clave','')
	ptsin=request.GET.get('ptsnvd','')
	usr= request.user.username
	try:
		with transaction.atomic():
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
				cargo='administrador'
			obsp= celular+'/'+obsp
			re_obs= obsp
			monto_egreso_pago=0
			monto_ingreso_pago=0#ingreso
			st= SolicitudTransferencia.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos','aux1','dniMenor','nroCta')
			con_st= list(st)
			idBenef=con_st[0]['aux1']
			idTcajaD= str(con_st[0]['idCajaDebe'])
			CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
			con_CajaDebe= list(CDebe)
			moneda= str(con_CajaDebe[0]['moneda'])
			re_moneda=moneda
			Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
			cons_saldo= list(Csaldo)
			idSaldo= str(cons_saldo[0]['pk'])
			SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
			SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
			MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
			#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
			if egreso_pago !='':
				monto_egreso_pago=float(egreso_pago)
				re_egreso= str(monto_egreso_pago)
			if ingreso_pago !='':
				monto_ingreso_pago=float(ingreso_pago)
				re_ingreso= str(monto_ingreso_pago)

			aut_ret=True
			if conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				rta= conf_permisos_Cajas.objects.get(id_caja=C.pk)
				if rta.aux2 !='si':
					aut_ret= False
			SolTr= SolicitudTransferencia.objects.get(pk=idTr)
			#verificar si existe bobeda
			flackBanco= True
			if SolTr.banco =='si':
				if TConfiguracionSistema.objects.filter(conf3='si').exists():
					if not TConfiguracionSistema.objects.filter(id_caja=C.pk,conf3='si').exists():
						flackBanco= False
			# /verificar transferencia para bancos
			if flackBanco:
				re_bene= SolTr.nombre_beneficiado
				re_bene_ap=SolTr.Apellido_paterno_beneficiado+' '+ SolTr.Apellido_materno_beneficiado
				re_soli= SolTr.id_cliente.nombre
				re_soli_ap=SolTr.id_cliente.Apellido_paterno+' '+SolTr.id_cliente.Apellido_materno
				
				re_ori= SolTr.idCajaDebe.id_oficina.nombre_oficina
				re_fecha_e=str( SolTr.idCajaDebe.fecha.strftime("%d-%m-%Y %H:%M"))
				re_fecha= str(datetime.now().strftime("%d-%m-%Y %H:%M"))
				re_dni_b=dnib
				re_monto= str(MontoEgreso)
				delta= datetime.now() - SolTr.idCajaDebe.fecha
				if moneda=='soles':
					#if SaldoSoles >= (MontoEgreso+monto_egreso_pago - monto_ingreso_pago):
					if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
						bandera=True
						if aut_ret:
							if delta.days >=5:
								if cod_aut !='':
									if Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
										bandera =True
										Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
									else:
										bandera=False
								else:
									bandera=False
						if bandera:
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroPT)+1
							NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
							nr=numeroR
							CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
							CajaH.save()
							idCajaH= CajaH.pk
							idST = SolicitudTransferencia.objects.get(pk=idTr)

							PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
							PagoT.save()
							CDebe.update(estadoTransaccion='pagado')
							idST.nro_operacion = nroope
							idST.nro_giro = nrogiro
							idST.clave = clave
							idST.save()
							if monto_egreso_pago>0:
								numeroR_e=int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
								TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
								TCajaH.save()
								eex= EgresoExtraTransferencia(idCajaHaber=TCajaH,id_pago_transferencia=PagoT,monto=monto_egreso_pago)
								eex.save()
								nro_ex=numeroR_e

							if monto_ingreso_pago>0:
								numeroR_i=int(Nrecibo.nroRI)+1
								NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRI=numeroR_i)
								TCajaD = TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle='Ingreso por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/I",cantidadDinero=monto_ingreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_i,id_oficina=C.id_oficina,id_caja=C)
								TCajaD.save()
								ipt= IngresoExtraTransferencia(idCajaDebe=TCajaD,id_pago_transferencia=PagoT,monto=monto_ingreso_pago)
								ipt.save()
								nro_ix=numeroR_i

							saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago+ monto_ingreso_pago
							Csaldo.update(saldo_soles=saldoEgreso)
							#if dniMenor!=None and dniMenor!='' and dniMenor!='si':
							if ptsin != 'si':
								if idBenef!=None and idBenef!='': 
									if not Cliente.objects.filter(pk=idBenef).exists():
										Cliente.objects.select_for_update().filter(pk=idBenef).update(dni=dnib,verificado=True)
										st.update(dni_beneficiado=dnib)
									else:
										st.update(dni_beneficiado=dnib)

							"""
							if celular != None and celular!="":
								aux_sms="Sr(a). "+idST.nombre_beneficiado+" "+idST.Apellido_paterno_beneficiado+"\nGracias por su preferencia\nAtte. Consorcio Imperial"
								aux_host= host_socket_io()
								aux_puerto= puerto_socket_io()
								mensaje={'numero':celular,'sms':aux_sms,'id':'-1'}
								with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
									socketIO.emit('mensaje_imperial',mensaje)

							if idST.id_cliente.telefono!= None and idST.id_cliente.telefono!='':
								soli1=idST.id_cliente.nombre+" "+idST.id_cliente.Apellido_paterno
								aux_sms="Sr(a). "+soli1+"\nLa transferencia que envio, ya fue cobrado\nAtte. Consorcio Imperial"
								aux_host= host_socket_io()
								aux_puerto= puerto_socket_io()
								mensaje={'numero':idST.id_cliente.telefono,'sms':aux_sms,'id':'-1'}
								with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
									socketIO.emit('mensaje_imperial',mensaje)
							"""
							data="exito"
						else:
							data="Error: Accion no autorizada"
					else:
						data ="error en operacion"
					#else:
					#	data="saldo insuficiente"
				elif moneda=='dolares':
					#if SaldoDolares>=(MontoEgreso+monto_egreso_pago - monto_ingreso_pago):
					if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
						bandera=True
						if aut_ret:
							if delta.days >=5:
								if cod_aut !='':
									if Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
										bandera =True
										Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
									else:
										bandera=False
								else:
									bandera=False
						if bandera:
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroPT)+1
							NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
							nr=numeroR
							CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
							CajaH.save()
							idCajaH= CajaH.pk
							idST = SolicitudTransferencia.objects.get(pk=idTr)
							PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
							PagoT.save()
							CDebe.update(estadoTransaccion='pagado')
							idST.nro_operacion = nroope
							idST.nro_giro = nrogiro
							idST.clave = clave
							idST.save()
							"""
							if monto_egreso_pago>0:
								numeroR_e=int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
								TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
								TCajaH.save()
								eex= EgresoExtraTransferencia(idCajaHaber=TCajaH,id_pago_transferencia=PagoT,monto=monto_egreso_pago)
								eex.save()
								nro_ex=numeroR_e

							if monto_ingreso_pago>0:
								numeroR_i=int(Nrecibo.nroRI)+1
								NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRI=numeroR_i)
								TCajaD = TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle='Ingreso por pago de transferencia pt-'+str(numeroR),tipoDocumento="R/I",cantidadDinero=monto_ingreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_i,id_oficina=C.id_oficina,id_caja=C)
								TCajaD.save()
								ipt= IngresoExtraTransferencia(idCajaDebe=TCajaD,id_pago_transferencia=PagoT,monto=monto_ingreso_pago)
								ipt.save()
								nro_ix=numeroR_i
							"""
							saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago +monto_ingreso_pago
							Csaldo.update(saldo_dolares=saldoEgreso)
							#if dniMenor!=None and dniMenor!='' and dniMenor!='si':
							if ptsin != 'si':
								if idBenef!=None and idBenef!='': 
									if not Cliente.objects.filter(pk=idBenef,verificado=True).exists():
										Cliente.objects.select_for_update().filter(pk=idBenef).update(dni=dnib,verificado=True)
										st.update(dni_beneficiado=dnib)
									else:
										st.update(dni_beneficiado=dnib)
							data="exito"
						else:
							data="Error: Accion no autorizada"
					else:
						data ="error en operacion"
					#else:
					#	data="saldo insuficiente"
				else:
					data='fail'
			else:
				data='Las tarnsferencias de bancos solo se pueden cancelar en Caja Tesoreria'
	except IntegrityError:
		data='fail'+ str(sys.exc_info()[0])
	except:
		data='fail'+ str(sys.exc_info()[0])

	return render(request,"TransRecibidasPost.html",{"moneda":re_moneda,"cargo":cargo,"exito":data,"nr":nr,"nre":nro_ex,"nri":nro_ix,"ingreso":re_ingreso,"egreso":re_egreso,"bene":re_bene,"soli":re_soli,"bene_ap":re_bene_ap,"soli_ap":re_soli_ap,"fecha_envio":re_fecha_e,"idST":idTr,"dnib":re_dni_b,"ori":re_ori,"fecha":re_fecha,"obsp":re_obs,"monto":re_monto} )

@login_required
def Transfe_Recibidas_post_tem_view(request):
	try:
		usr= request.user.username
		cargo =''
		exito=''
		C= Cajas.objects.get(id_usuario__usuario=usr)
		if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
			cargo='administrador'

	except:
		cargo =''
	return render(request,'TransRecibidasPost.html',{"cargo":cargo,"exito":exito} )
#------------------------------------------------


@login_required
@transaction.atomic
def Notificacion_view(request):#encargado de crear transferencias
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	des=request.POST.get('des')
	permis=request.POST.get('permiso')
	usr= request.user.username
	cargo =''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if permis != None:
		files= request.FILES['file']
		try:
			with transaction.atomic():
				Noti= Notificacion(descripcion=des,usuario=usr,permisos=permis,archivo=files)
				Noti.save()
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"notificacion.html",{"resultado":exito,"cargo":cargo} )


@login_required
@transaction.atomic
def ActNotiRecibidas_view(request):#encargado de crear transferencias
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	idNo=request.GET.get('idN') 
	try:
		with transaction.atomic():
			aux= Notificacion.objects.select_for_update().filter(pk=idNo).update(estado='leido')
			exito='exito'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail'#+ str(sys.exc_info()[0])
 
	dato={'resultado':exito}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(exito,mimetype)
	
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def NotificacionAdmin_view(request):#encargado de crear transferencias
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	des=request.POST.get('des')
	permis=request.POST.get('permiso')
	oficina = request.POST.get('oficina','')
	usr= request.user.username
	if permis != None:
		files= request.FILES['file']
		try:
			with transaction.atomic():
				if permis=='oficina':
					prm = oficina
				else:
					prm= permis
				Noti= Notificacion(descripcion=des,usuario=usr,permisos=prm,archivo=files)
				Noti.save()
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"NotificacionesAdmin.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ActualizadatosGerente_view(request):#encargado de crear transferencias
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	dnig=request.POST.get('dni')
	nombreg=request.POST.get('nombre')
	ap=request.POST.get('ap')
	am=request.POST.get('am')
	tel=request.POST.get('tel')
	dire=request.POST.get('dir')
	fn=request.POST.get('fn')
	emailg=request.POST.get('email')
	usr = request.user.username
	if nombreg != None:
		try:
			with transaction.atomic():
				aux= Gerente.objects.select_for_update().filter(usuario=usr).update(dni=dnig ,nombre=nombreg,Apellido_paterno=ap,Apellido_materno=am,telefono=tel,direccion=dire,fecha_nacimiento=fn,email=emailg)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"perfilGerente.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CambiarContraGerente_view(request):#encargado de crear transferencias
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	cona=request.POST.get('passA')#capturamos los atributos del formulario
	conn=request.POST.get('passN')
	usr = request.user.username
	if cona != None:
		try:
			with transaction.atomic():
				if conn != None and conn != "" and cona != None and cona != "":
					if request.user.check_password(str(cona)):
						#u= request.user.set_password(str(conn))
						u= User.objects.get(username=usr)
						u.set_password(str(conn))
						u.save()
						aux= Gerente.objects.select_for_update().filter(usuario=usr).update(password=str(conn))
						exito='exito'
					else:
						exito= 'Password anterior incorrecto'
				else:
					exito='datos incorrectos'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"CambiarContra.html",{"resultado":exito} )


@login_required
def seleccionarfoto_ajax_view(request):
	data=''
	if request.is_ajax:
		try:
			with transaction.atomic():
				idf=request.GET.get('pk')
				usr = request.user.username
				u= Personal.objects.get(usuario=usr)
				Foto.objects.filter(id_usuario=u.pk).update(estado=False)
				Foto.objects.filter(pk=idf).update(estado=True)
				data='exito'
		except IntegrityError:
			data='fail'+str(sys.exc_info()[1])
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def subir_file_view(request):
	exito='' 
	tit=request.POST.get('titulo')
	des=request.POST.get('des')
	usr= request.user.username
	if tit != None:
		files= request.FILES['file']
		try:
			with transaction.atomic():
				u=Personal.objects.get(usuario=usr)
				foo= Foto(id_usuario=u,titulo=tit,descripcion=des,foto=files)
				foo.save()
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"subirFoto.html",{"resultado":exito,} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CancelarCierre_ajax_view(request):
	if request.is_ajax:
		data='' 
		idCierre=request.GET.get('idC')
		try:
			with transaction.atomic():
				cierre = CajaCierre.objects.get(pk=idCierre)
				CajaCierreDolares.objects.select_for_update().filter(fechaDesde=cierre.fechaDesde).update(estado='cancelado')
				CajaCierreMaterial.objects.select_for_update().filter(fechaDesde=cierre.fechaDesde).update(estado='cancelado')
				CajaCierre.objects.select_for_update().filter(pk=idCierre).update(estado='cancelado')
				data='exito'
		except IntegrityError:
			data='fail'+str(sys.exc_info()[1])
		except :
			data= 'fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def EnviarMaterialCajaAdmin_view(request):
	usr= request.user.username
	#afavord= request.POST.get('Afavorde')
	idOficina= request.POST.get('oficina')
	idCaja= request.POST.get('caja')
	pesoGramos = request.POST.get('pesoGramos')
	Concepto=request.POST.get('concepto')
	Observaciones= request.POST.get('observacion')
	c_d=''
	o_d=''
	p_d=''
	exito=''
	dol=0
	sol=0
	if idCaja != None:
		try:
			with transaction.atomic():
				Ger = Gerente.objects.get(usuario=usr)
				O = Oficina.objects.get(pk=idOficina)
				C = Cajas.objects.get(pk= idCaja)
				#Per= Personal.objects.get(pk=afavord)
				c_d= C.nombre
				o_d=O.nombre_oficina
				p_d=C.id_usuario.nombre +' '+C.id_usuario.Apellido_paterno+' '+C.id_usuario.Apellido_materno
				pesoGramos = ConvertirDecimal(pesoGramos)
				G = Gerente.objects.get(usuario=usr)
				CG = Cajas.objects.get(id_usuario=G.id_usuario.pk)
				saldoPrincipal1= SaldoDisponibleCajaMaterial.objects.get(id_caja=CG.pk)
				if (pesoGramos<=ConvertirDecimal(saldoPrincipal1.saldo_Material)):
					saldoM = ConvertirDecimal(saldoPrincipal1.saldo_Material)
					Nrecibo1= NroReciboCaja.objects.get(id_oficina=CG.id_oficina.pk,id_caja=CG.pk)
					numeroREM = int(Nrecibo1.nroREM)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=CG.id_oficina.pk,id_caja=CG.pk).update(nroREM=numeroREM)
					THaberMaterial= TCajaMaterialHaber(id_personal=CG.id_usuario,tablaRelacional="DepositoCajaMaterial",conceptoDetalle="Envio de material de gerencia a"+O.nombre_oficina,tipoDocumento="egreso",pesoGramos=pesoGramos,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroREM,id_oficina=CG.id_oficina,id_caja=CG)
					THaberMaterial.save()
					Deposito= DepositoCajaMaterial(id_caja= C,idCajaHaberMaterial=THaberMaterial,id_usuario=C.id_usuario,id_gerente=Ger,pesoGramos=pesoGramos,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
					Deposito.save() 
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=CG.pk).update(saldo_Material=(saldoM-pesoGramos))
					exito='exito'
				else:
					exito = 'Saldo insuficiente'
				
		except IntegrityError:
			exito='fail'+Observaciones
		except:
			exito='fail'+ str(sys.exc_info()[1])

	return render(request,"EnvioCajaMaterialAdmin.html",{"resultado":exito,"afavor":p_d,"pesoGramos":pesoGramos,"cajaD":c_d,"oficinaD":o_d} )





@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def EnviarCaja_view(request):
	usr= request.user.username
	tipoc= request.POST.get('tipoc')
	idOficina= request.POST.get('oficina')
	idCaja= request.POST.get('caja')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	Concepto=request.POST.get('concepto')
	Observaciones= request.POST.get('observacion')
	c_d=''
	o_d=''
	p_d=''
	exito=''
	dol=0
	sol=0
	if idCaja != None:
		try:
			with transaction.atomic():
				Ger = Gerente.objects.get(usuario=usr)
				O = Oficina.objects.get(pk=idOficina)
				C = Cajas.objects.get(pk= idCaja)
				#Per= Personal.objects.get(pk=afavord)
				c_d= C.nombre
				o_d=O.nombre_oficina
				p_d=C.id_usuario.nombre +' '+C.id_usuario.Apellido_paterno+' '+C.id_usuario.Apellido_materno
				Monto = ConvertirDecimal(Monto)
				G = Gerente.objects.get(usuario=usr)
				CG = Cajas.objects.get(id_usuario=G.id_usuario.pk)
				saldoPrinsipal1= SaldoDisponibleCajas.objects.get(id_caja=CG.pk)
				if (Moneda=='soles' and Monto<=ConvertirDecimal(saldoPrinsipal1.saldo_soles)) or(Moneda=='dolares' and Monto<=ConvertirDecimal(saldoPrinsipal1.saldo_dolares)):
					saldoDP = ConvertirDecimal(saldoPrinsipal1.saldo_dolares)
					saldoSP = ConvertirDecimal(saldoPrinsipal1.saldo_soles)
					Nrecibo1= NroReciboCaja.objects.get(id_oficina=CG.id_oficina.pk,id_caja=CG.pk)
					numeroRE = int(Nrecibo1.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=CG.id_oficina.pk,id_caja=CG.pk).update(nroRE=numeroRE)
					THaber= TCajaHaber(id_personal=CG.id_usuario,tablaRelacional="DepositoCaja",conceptoDetalle="Envio de dinero  de gerencia a"+O.nombre_oficina,tipoDocumento="egreso",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=CG.id_oficina,id_caja=CG)
					THaber.save()
					Deposito= DepositoCaja(id_caja= C,id_usuario=C.id_usuario,idCajaHaber=THaber,id_gerente=Ger,moneda=Moneda,monto=Monto,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
					Deposito.save()
					exito='exito'
					if Moneda=='dolares':
						tipoc=float(tipoc)
						HaberDo= HaberDolar(idCajaHaber=THaber,tipo_cambio=tipoc,monto=Monto)
						HaberDo.save()
						SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=CG.pk).update(saldo_dolares=(saldoDP-Monto))
					else:
						SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=CG.pk).update(saldo_soles=(saldoSP-Monto))
					exito='exito'
				else:
					exito = 'Saldo insuficiente'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])

	return render(request,"EnvioCaja.html",{"resultado":exito,"afavor":p_d,"moneda":Moneda,"monto":Monto,"cajaD":c_d,"oficinaD":o_d} )
"""
@login_required
@transaction.atomic
def EnviarCajaOperador_view(request):
	usr= request.user.username
	#afavord= request.POST.get('Afavorde')
	idCaja= request.POST.get('caja')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	#Concepto=request.POST.get('concepto')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	para=''
	dol=0
	sol=0
	Concepto="Envio de dinero para habilitacion de Caja Alterna"
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idCaja != None:
		try:
			with transaction.atomic():
				#end campo de fechas
				if idCaja=='vacio':
					C1 = Cajas.objects.get(id_usuario= C.id_oficina.id_usuario.pk)#destino
				else:
					C1 = Cajas.objects.get(pk= idCaja)#destino
				para= C1.id_usuario.nombre+' '+C1.id_usuario.Apellido_paterno+' '+ C1.id_usuario.Apellido_materno
				Monto = ConvertirDecimal(Monto)
				
				saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if C !=C1:
					if (Moneda=='soles' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
						saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
						saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
						if Moneda=='dolares':
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Envio de dinero para habilitacion",tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							cA=EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
							cA.save()
							SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto))
						else:
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Envio de dinero para habilitacion",tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							cA=EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
							cA.save()
							SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto))
						exito='exito'
					else:
						exito = 'Saldo insuficiente'
				else:
					exito= 'error en operacion'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])

	return render(request,"habilitarCaja.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":para,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":'Envio de dinero para habilitacion de caja',"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

"""

@login_required
@transaction.atomic
def EnviarCajaAlternaAlterna_view(request):
	usr= request.user.username
	idCaja= request.POST.get('caja')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	para=''
	dol=0
	sol=0
	Concepto="Envio de dinero para habilitacion de Caja Alterna"
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idCaja != None:
		try:
			with transaction.atomic():
				#end campo de fechas
				C1 = Cajas.objects.get(pk= idCaja)#destino
				Concepto="Envio de dinero a caja alterna: "+C1.nombre
				para= C1.id_usuario.nombre+' '+C1.id_usuario.Apellido_paterno+' '+ C1.id_usuario.Apellido_materno
				Monto = ConvertirDecimal(Monto)
				saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if (Moneda=='soles' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
					saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
					saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
					if Moneda=='dolares':
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaAlternaAlterna",conceptoDetalle='Envio de dinero a caja alterna: '+C1.nombre,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						THaber.save()
						cA=EnvioCajaAlternaAlterna(idCajaHaber=THaber,id_oficina= C.id_oficina,id_cajaAlternaEmisor=C,id_cajaAlternaReceptor=C1.pk,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
						cA.save()
						SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto))
					else:
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaAlternaAlterna",conceptoDetalle='Envio de dinero a caja alterna: '+C1.nombre,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						THaber.save()
						cA=EnvioCajaAlternaAlterna(idCajaHaber=THaber,id_oficina= C.id_oficina,id_cajaAlternaEmisor=C,id_cajaAlternaReceptor=C1.pk,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
						cA.save()
						SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto))
					exito='exito'
				else:
					exito = 'Saldo insuficiente'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])

	return render(request,"Envio_CajaAlterna.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":para,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def EnviarMateOficinaOficina_view(request):
	usr= request.user.username
	idOfi= request.POST.get('oficina')
	idCa= request.POST.get('caja')
	Monto = request.POST.get('monto')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	nombreof=''
	dol=0
	sol=0
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idOfi != None:
		try:
			with transaction.atomic():
				O1 = Oficina.objects.get(pk= idOfi)#destino
				nombreof= O1.nombre_oficina
				Monto = ConvertirDecimal(Monto)
				saldoPrinsipal= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				if ( Monto<=ConvertirDecimal(saldoPrinsipal.saldo_material)):
					saldoM = ConvertirDecimal(saldoPrinsipal.saldo_material)
					Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRE = int(Nrecibo.nroREM)+1
					NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroREM=numeroRE)
					C1 = Cajas.objects.get(pk=idCa)
					THaber= TCajaMaterialHaber(id_personal=C.id_usuario,tablaRelacional="EnvioMaterialCajaCaja",conceptoDetalle="Envio de material de "+C.id_oficina.nombre_oficina+" a "+O1.nombre_oficina,tipoDocumento="R/EM",pesoGramos=Monto,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					THaber.save()
					Ec=EnvioMaterialCajaCaja(idCajaMaterialHaber=THaber,id_CajaDestino=C1,Peso_gramos=Monto,observaciones=Observaciones,estado="enviado")
					Ec.save()
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_material=(saldoM-Monto))
					exito='exito'
				else:
					exito = 'Saldo insuficiente'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])

	return render(request,"EnvioMaterial.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":nombreof,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"conceptoDetalleRecibo":"Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+ nombreof,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )
#********************************************************************************************************

@login_required
@transaction.atomic
def EnviarCajaAlterna_CajaPrinsipal_view(request):
	usr= request.user.username
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	nombreof=''
	dol=0
	sol=0
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	else:
		cargo='alterna'
	if Monto != None and cargo =='alterna':
		try:
			with transaction.atomic():
				Monto = ConvertirDecimal(Monto)
				saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if (Moneda=='soles' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
					saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
					saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
					cajap = Cajas.objects.get(id_usuario=C.id_oficina.id_usuario.pk)
					if Moneda=='dolares':
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaAlternaPrinsipal",conceptoDetalle="Envio de dinero de caja alterna: "+C.nombre+" a Caja Prinsipal",tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='')
						THaber.save()
						Ec=EnvioCajaAlternaPrinsipal(idCajaHaber=THaber,id_oficina=C.id_oficina,id_cajaAlterna=C,id_cajaPrinsipal=cajap.pk,monto=Monto,moneda=Moneda,conceptoDetalle="Envio de dinero de caja alterna: "+C.nombre+" a Caja Prinsipal",observaciones=Observaciones,estado='enviado')
						Ec.save()
						SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto))
					else:
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaAlternaPrinsipal",conceptoDetalle="Envio de dinero de caja alterna: "+C.nombre+" a Caja Prinsipal",tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='')
						THaber.save()
						Ec=EnvioCajaAlternaPrinsipal(idCajaHaber=THaber,id_oficina=C.id_oficina,id_cajaAlterna=C,id_cajaPrinsipal=cajap.pk,monto=Monto,moneda=Moneda,conceptoDetalle="Envio de dinero de caja alterna: "+C.nombre+" a Caja Prinsipal",observaciones=Observaciones,estado='enviado')
						Ec.save()
						SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto))
					exito='exito'
				else:
					exito = 'Saldo insuficiente'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"EnvioCajaPrinsipal.html",{"resultado":exito,"cargo":cargo,"montoRecibo":Monto,"monedaRecibo":Moneda,"horaRecibo":horaActual,"fechaRecibo":fechaActual,"conceptoDetalleRecibo":" Envio de dinero a Caja Prinsipal"} )

@login_required
@transaction.atomic
def cerrarCaja_ajax_view(request):
	data=''
	if request.is_ajax:
		ingresoS=request.GET.get('IS')
		ingresoD=request.GET.get('ID')
		egresoS=request.GET.get('ES')
		egresoD=request.GET.get('ED')
		ingresoM=request.GET.get('IM')
		egresoM=request.GET.get('EM')
		saldoS=request.GET.get('SS')
		saldoD=request.GET.get('SD')
		saldoM=request.GET.get('SM')
		fdesde=request.GET.get('fd','')#----
		fhasta=request.GET.get('fh','')#----
		obse= request.GET.get('obs','')
		ingresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoS)))
		ingresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoD)))
		egresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoS)))
		egresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoD)))
		ingresoM=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoM)))
		egresoM=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoM)))
		saldoS=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoS)))
		saldoD=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoD)))
		saldoM=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoM)))
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			with transaction.atomic():
				if fdesde !='' and fhasta!='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta= datetime.strptime(fhasta, '%Y-%m-%d')
				elif fdesde !='' and fhasta=='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta=fecha_desde
				else:
					fecha_desde=date.today()
					fecha_hasta=fecha_desde
				ts= TConfiguracionSistema.objects.get(id_caja=C.pk)
				#if not CajaCierre.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists() and not CierreCajaMaterial.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists():
				if not CajaCierre.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists():
					#Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					"""if CajaCierre.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").exists() and CierreCajaMaterial.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").exists():
						Con_CajaC=list(CajaCierre.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").values('pk','saldoInicial_soles','saldoInicial_dolares'))
						Con_CajaCM=list(CierreCajaMaterial.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").values('pk','saldoInicial_material'))
						SI_soles=float(Con_CajaC[0]['saldoInicial_soles'])
						SI_dolares=float(Con_CajaC[0]['saldoInicial_dolares'])
						SI_material=float(Con_CajaCM[0]['saldoInicial_material'])
					else:
						Sin=SaldoInicialCaja.objects.get(id_caja=C.pk)
						SinM=SaldoInicialCajaMaterial.objects.get(id_caja=C.pk)
						SI_soles=Sin.saldo_soles
						SI_dolares=Sin.saldo_dolares
						SI_material=SinM.saldo_material"""
					if CajaCierre.objects.filter(id_caja=C.pk,estado="cancelado").exists():
						Uc= CajaCierre.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
						SI_soles=Uc.saldo_soles
						SI_dolares=Uc.saldo_dolares
					else:
						Sin=SaldoInicialCaja.objects.get(id_caja=C.pk)
						SI_soles=Sin.saldo_soles
						SI_dolares=Sin.saldo_dolares

					if CierreCajaMaterial.objects.filter(id_caja=C.pk,estado="cancelado").exists():
						Uc= CierreCajaMaterial.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
						SI_material=Uc.saldo_material
					else:
						SinM=SaldoInicialCajaMaterial.objects.get(id_caja=C.pk)
						SI_material=SinM.saldo_material
					saldoS= SI_soles + ingresoS - egresoS
					saldoD =SI_dolares + ingresoD - egresoD
					saldoM =SI_material+ingresoM- egresoM
					#if C.id_oficina.id_usuario.pk == C.id_usuario.pk:
					cierre= CajaCierre(id_oficina= C.id_oficina,id_caja=C,totalDebeSoles=ingresoS,totalDebeDolares=ingresoD,totalHaberSoles=egresoS,totalHaberDolares=egresoD,observaciones=obse,saldo_soles=saldoS,saldo_dolares=saldoD,fechaDesde=fecha_desde,fechaHasta=fecha_hasta,estado='cerrado',saldoInicial_soles=SI_soles,saldoInicial_dolares=SI_dolares)
					cierre.save()

					cierreMaterial=CierreCajaMaterial(id_oficina=C.id_oficina,id_caja=C,materialDebe=ingresoM,materialHaber=egresoM,observaciones=obse,saldo_material=saldoM,fechaDesde=fecha_desde,fechaHasta=fecha_hasta,estado='cerrado',saldoInicial_material=SI_material)
					cierreMaterial.save()

					SI= SaldoInicialCaja.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=saldoS,saldo_dolares=saldoD)
					SIM= SaldoInicialCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_material=saldoM)
					
					data='exito'
				else:
					data= 'caja cerrada'
		except IntegrityError:
			data='fail'+ str(sys.exc_info()[1])
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)



@login_required
@transaction.atomic
def cerrarCajaSD_ajax_view(request):
	data=''
	if request.is_ajax:
		ingresoS=request.GET.get('IS')
		ingresoD=request.GET.get('ID')
		egresoS=request.GET.get('ES')
		egresoD=request.GET.get('ED')
		saldoS=request.GET.get('SS')
		saldoD=request.GET.get('SD')
		fdesde=request.GET.get('fd','')#----
		fhasta=request.GET.get('fh','')#----
		obse= request.GET.get('obs','')
		ingresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoS)))
		ingresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoD)))
		egresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoS)))
		egresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoD)))
		saldoS=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoS)))
		saldoD=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoD)))
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			with transaction.atomic():
				if fdesde !='' and fhasta!='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta= datetime.strptime(fhasta, '%Y-%m-%d')
				elif fdesde !='' and fhasta=='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta=fecha_desde
				else:
					fecha_desde=date.today()
					fecha_hasta=fecha_desde
				cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
				if not CajaCierre.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists():
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					if CajaCierre.objects.filter(id_caja=C.pk,estado="cancelado").exists():
						Uc= CajaCierre.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
						SI_soles=float(Uc.saldo_soles)
						SI_dolares=float(Uc.saldo_dolares)
					else:
						Sin=SaldoInicialCaja.objects.get(id_caja=C.pk)
						SI_soles=float(Sin.saldo_soles)
						SI_dolares=float(Sin.saldo_dolares)
					#if CajaCierre.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").exists():
					#	Con_CajaC=list(CajaCierre.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").values('pk','saldoInicial_soles','saldoInicial_dolares'))
					#	SI_soles=float(Con_CajaC[0]['saldoInicial_soles'])
					#	SI_dolares=float(Con_CajaC[0]['saldoInicial_dolares'])
					#else:
					#	Sin=SaldoInicialCaja.objects.get(id_caja=C.pk)
					#	SI_soles=Sin.saldo_soles
					#	SI_dolares=Sin.saldo_dolares
					saldoS= SI_soles + ingresoS - egresoS
					saldoD =SI_dolares + ingresoD - egresoD
					#if C.id_oficina.id_usuario.pk == C.id_usuario.pk:
					cierre= CajaCierre(id_oficina= C.id_oficina,id_caja=C,totalDebeSoles=ingresoS,totalDebeDolares=ingresoD,totalHaberSoles=egresoS,totalHaberDolares=egresoD,observaciones=obse,saldo_soles=saldoS,saldo_dolares=saldoD,fechaDesde=fecha_desde,fechaHasta=fecha_hasta,estado='cerrado',saldoInicial_soles=SI_soles,saldoInicial_dolares=SI_dolares,soles_sistema=cons_saldo.saldo_soles,dolares_sistema=cons_saldo.saldo_dolares)
					cierre.save()
					SI= SaldoInicialCaja.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=saldoS,saldo_dolares=saldoD)
					data='exito'
				else:
					data= 'caja cerrada'
		except IntegrityError:
			data='fail'+ str(sys.exc_info()[1])
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)




@login_required
@transaction.atomic
def cerrarCajaMaterial_ajax_view(request):
	data=''
	if request.is_ajax:
		ingresoM=request.GET.get('IM')
		egresoM=request.GET.get('EM')
		saldoM=request.GET.get('SM')
		fdesde=request.GET.get('fd','')#----
		fhasta=request.GET.get('fh','')#----
		obse= request.GET.get('obs','')
		ingresoM=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoM)))
		egresoM=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoM)))
		saldoM=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoM)))
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			 
			#end campo de fechas
			with transaction.atomic():
				if fdesde !='' and fhasta!='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta= datetime.strptime(fhasta, '%Y-%m-%d')
				elif fdesde !='' and fhasta=='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta=fecha_desde
				else:
					fecha_desde=date.today()
					fecha_hasta=fecha_desde
				if	not CierreCajaMaterial.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists():
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					if  CierreCajaMaterial.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").exists():
						Con_CajaCM=list(CierreCajaMaterial.objects.filter(fechaHasta=fecha_hasta,id_caja=C.pk,estado="cancelado").values('pk','saldoInicial_material'))
						SI_material=float(Con_CajaCM[0]['saldoInicial_material'])
					else:
						SinM=SaldoInicialCajaMaterial.objects.get(id_caja=C.pk)
						SI_material=SinM.saldo_material

					saldoM =SI_material+ingresoM- egresoM
				
					cierreMaterial=CierreCajaMaterial(id_oficina=C.id_oficina,id_caja=C,materialDebe=ingresoM,materialHaber=egresoM,observaciones=obse,saldo_material=saldoM,fechaDesde=fecha_desde,fechaHasta=fecha_hasta,estado='cerrado',saldoInicial_material=SI_material)
					cierreMaterial.save()

					SIM= SaldoInicialCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_material=saldoM)
					data='exito'
				else:
					data= 'caja cerrada'
		except IntegrityError:
			data='fail'+ str(sys.exc_info()[1])
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)



@login_required
@transaction.atomic
def CierreRecibido_ajax_view(request):
	data=''
	if request.is_ajax:
		idHaber= request.GET.get('idCi','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			#campo de fecha
			Fo = FechaOperacion.objects.get(id_caja=C.pk)#ultimo dia operacion
			if date.today() >Fo.fecha_operacion:
				FechaOperacion.objects.select_for_update().filter(pk=Fo.pk).update(fecha_operacion=date.today())
				Fo = FechaOperacion.objects.get(id_caja=C.pk)
			fecha= Fo.fecha_operacion
			fechahora= datetime.combine(fecha,datetime.now().time())
			#end campo de fechas
			Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			TcajaH= TCajaHaber.objects.get(pk=idHaber)
			TCajaHaber.objects.select_for_update().filter(pk=idHaber).update(estadoTransaccion='recibido')
			numeroRI = int(Nrecibo.nroRI)+1
			Tdebe= TCajaDebe(id_personal= C.id_oficina.id_usuario,tablaRelacional='CajaCierre',fecha=fechahora,conceptoDetalle='Cierre de caja alterna',tipoDocumento='R/I',cantidadDinero=TcajaH.cantidadDinero,moneda=TcajaH.moneda,observaciones= obse,estadoTransaccion='recibido',nroRecibo=numeroRI,id_caja=C,id_oficina= C.id_oficina)
			Tdebe.save()
			NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
			saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)

			if TcajaH.moneda=='soles':
				saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(TcajaH.cantidadDinero)
				SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
			elif TcajaH.moneda =='dolares':
				saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(TcajaH.cantidadDinero)
				SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
			data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])+idHaber
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def DineroRecibido_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		tabla= request.GET.get('tabla','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			#TcajaH= TCajaHaber.objects.get(pk=idHaber)
			with transaction.atomic():
				if tabla=='deposito':
					Dn=DepositoCaja.objects.get(pk=idDebe,estado='enviado')
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRI = int(Nrecibo.nroRI)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
					CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="DepositoCaja",conceptoDetalle="Envio de dinero de Gerencia a "+C.id_oficina.nombre_oficina,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
					CajaD.save()
					Rd= RecepcionDepositoCaja(idCajaDebe=CajaD,idDepositoCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido")
					Rd.save()
					saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					if Dn.moneda=='soles':
						saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
					elif Dn.moneda =='dolares':
						#hd= HaberDolar.objects.get(idCajaHaber=Dn.idCajaHaber.pk)
						#DebeDo= DebeDolar(idCajaDebe= CajaD,tipo_cambio=float(hd.tipo_cambio),monto=float(hd.monto))
						#DebeDo.save()
						saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
						
					aux= DepositoCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
					data='exito'

				elif tabla=='enviooficina':
					if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
						Dn=EnvioOficinaOficina.objects.get(pk=idDebe,estado='enviado')
						c1 = Cajas.objects.get(pk=Dn.idCajaHaber.id_caja.pk)
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRI = int(Nrecibo.nroRI)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
						CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+c1.id_oficina.nombre_oficina+" a "+C.id_oficina.nombre_oficina,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
						CajaD.save()
						Ro= RecepcionEnvioOficinaOficina(idCajaDebe=CajaD,idEnvioOficinaOficina=Dn,monto=Dn.monto,moneda=Dn.moneda,estado='recibido')
						Ro.save()
						saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
						if Dn.moneda=='soles':
							saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
						elif Dn.moneda =='dolares':
							#hd= HaberDolar.objects.get(idCajaHaber=Dn.idCajaHaber.pk)
							#DebeDo= DebeDolar(idCajaDebe= CajaD,tipo_cambio=float(hd.tipo_cambio),monto=float(hd.monto))
							#DebeDo.save()
							saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
						aux= EnvioOficinaOficina.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
						data='exito'
					else:
						data='operacion no valida'
				elif tabla=='enviocaja':
					Dn=EnvioCajaCaja.objects.get(pk=idDebe,estado='enviado')
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRI = int(Nrecibo.nroRI)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
					CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Habilitacion de dinero de Caja Prinsipal",tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
					CajaD.save()
					Rc= RecepcionEnvioCajaCaja(idCajaDebe=CajaD,idEnvioCajaCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido")
					Rc.save()
					saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					if Dn.moneda=='soles':
						saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
					elif Dn.moneda =='dolares':
						#hd= HaberDolar.objects.get(idCajaHaber=Dn.idCajaHaber.pk)
						#DebeDo= DebeDolar(idCajaDebe= CajaD,tipo_cambio=float(hd.tipo_cambio),monto=float(hd.monto))
						#DebeDo.save()
						saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
					aux= EnvioCajaCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
					data='exito'
				else:
					data='error en operacion'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

#***************** MATERIAL *********************
@login_required
@transaction.atomic
def MatRecibidoOfi_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		obse= request.GET.get('obs','')
		tabla= request.GET.get('tabla','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if tabla =='enviocaja':
				Dn=EnvioMaterialCajaCaja.objects.get(pk=idDebe,estado='enviado')
				c1 = Cajas.objects.get(pk=Dn.idCajaMaterialHaber.id_caja.pk)
				Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRIM)+1
				NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRIM=numeroRI)
				CajaD= TCajaMaterialDebe(id_personal=C.id_usuario,tablaRelacional="RecepcionMaterialCajaCaja",conceptoDetalle="Recepcion de Material",tipoDocumento="R/IM",pesoGramos=Dn.Peso_gramos,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				CajaD.save()
				ReMat = RecepcionMaterialCajaCaja(idCajaMaterialDebe=CajaD,id_CajaOrigen=c1,id_EnvioCaja=Dn,Peso_gramos=Dn.Peso_gramos,conceptoDetalle= "recepcion de material",estado="recibido")
				ReMat.save()
				saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				saldoM = ConvertirDecimal(saldoDis.saldo_material)+ConvertirDecimal(Dn.Peso_gramos)
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_material=saldoM)
				aux= EnvioMaterialCajaCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
				data='exito'
			else:
				data='error en operacion'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def AnularEnvioDineroOfi_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		tabla= request.GET.get('tabla','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		comi=0
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if tabla=='enviooficina':
				Dn=EnvioOficinaOficina.objects.get(pk=idDebe,estado='enviado',idCajaHaber__id_caja=C.pk)
				if ComisionEnvio.objects.filter(tabla='EnvioOficinaOficina',id_envio=Dn.pk).exists():
					com= ComisionEnvio.objects.get(tabla='EnvioOficinaOficina',id_envio=Dn.pk)
					comi=float(com.idCajaHaber.cantidadDinero)
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficinaAnulacion",conceptoDetalle="Anulacion de Envio de dinero  a  oficina "+Dn.id_oficinaDestino.nombre_oficina,tipoDocumento="R/I",cantidadDinero=(float(Dn.monto)+comi),moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				CajaD.save()
				anu= EnvioOficinaOficinaAnulacion(id_EnvioOficina=Dn,idCajaDebe=CajaD)
				anu.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Dn.moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)+ comi
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Dn.moneda =='dolares':
					#hd= HaberDolar.objects.get(idCajaHaber=Dn.idCajaHaber.pk)
					#DebeDo= DebeDolar(idCajaDebe= CajaD,tipo_cambio=float(hd.tipo_cambio),monto=(float(hd.monto)+comi))
					#DebeDo.save()
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)+comi
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				aux= EnvioOficinaOficina.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
				data='exito'

			elif tabla=='enviocaja':
				Dn=EnvioCajaCaja.objects.get(pk=idDebe,estado='enviado',idCajaHaber__id_caja=C.pk)
				if ComisionEnvio.objects.filter(tabla='EnvioCajaCaja',id_envio=Dn.pk).exists():
					com= ComisionEnvio.objects.get(tabla='EnvioCajaCaja',id_envio=Dn.pk)
					comi=float(com.idCajaHaber.cantidadDinero)
				C_des= Cajas.objects.get(pk=Dn.id_CajaDestino.pk)
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaAnulacion",conceptoDetalle='Anulacion de envio de dinero a oficina '+C_des.id_oficina.nombre_oficina +' - '+C_des.nombre,tipoDocumento="R/I",cantidadDinero=(float(Dn.monto)+comi),moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				CajaD.save()
				anu= EnvioCajaCajaAnulacion(id_EnvioCaja=Dn,idCajaDebe=CajaD)
				anu.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Dn.moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)+comi
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Dn.moneda =='dolares':
					#hd= HaberDolar.objects.get(idCajaHaber=Dn.idCajaHaber.pk)
					#DebeDo= DebeDolar(idCajaDebe= CajaD,tipo_cambio=float(hd.tipo_cambio),monto=(float(hd.monto)+comi))
					#DebeDo.save()
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)+comi
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				aux= EnvioCajaCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
				data='exito'
			else:
				data='error en operacion'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	exito=data
	fechaOp= str(datetime.now().strftime('%Y-%m-%d %I:%M %p'))
	data={'exito':exito,'fecha':fechaOp}
	data= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AnularDeposito_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			G = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario=G.id_usuario.pk)
			Dn=DepositoCaja.objects.get(pk=idDebe,estado='enviado',idCajaHaber__id_caja=C.pk)
			Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			numeroRI = int(Nrecibo.nroRI)+1
			NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
			c_aux= Cajas.objects.get(pk=Dn.id_caja.pk)
			CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="DepositoCajaAnulacion",conceptoDetalle="Anulacion de Envio de dinero  a  oficina"+c_aux.id_oficina.nombre_oficina+" - "+ c_aux.nombre,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
			CajaD.save()
			anu= DepositoCajaAnulacion(idDepositoCaja=Dn,idCajaDebe=CajaD)
			anu.save()
			saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
			if Dn.moneda=='soles':
				saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
				SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
			elif Dn.moneda =='dolares':
				hd= HaberDolar.objects.get(idCajaHaber=Dn.idCajaHaber.pk)
				DebeDo= DebeDolar(idCajaDebe= CajaD,tipo_cambio=float(hd.tipo_cambio),monto=float(hd.monto))
				DebeDo.save()
				saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
				SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
			aux= DepositoCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
			data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	exito=data
	fechaOp= str(datetime.now().strftime('%Y-%m-%d %I:%M %p'))
	data={'exito':exito,'fecha':fechaOp}
	data= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def DineroRecibido_deCajaAlterna_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if C.id_usuario.pk == C.id_oficina.id_usuario.pk:#caja prinsipal	
				Dn=EnvioCajaAlternaPrinsipal.objects.get(pk=idDebe,estado='enviado')
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaAlternaPrinsipal",conceptoDetalle="Recepcion de dinero de Caja Alterna: "+Dn.id_cajaAlterna.nombre,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				CajaD.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Dn.moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Dn.moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				aux= EnvioCajaAlternaPrinsipal.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
				data='exito'
			else:
				data='error en operacion'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def DineroRecibido_deCajaAlternaAlterna_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if C.id_usuario.pk != C.id_oficina.id_usuario.pk:#caja alterna	
				Dn=EnvioCajaAlternaAlterna.objects.get(pk=idDebe,id_cajaAlternaReceptor=C.pk,estado='enviado')
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaAlternaAlterna",conceptoDetalle="Recepcion de dinero de Caja Alterna: "+Dn.id_cajaAlternaEmisor.nombre,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				CajaD.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Dn.moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Dn.moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				aux= EnvioCajaAlternaAlterna.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
				data='exito'
			else:
				data='error en operacion'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)


def calcular_para_division_envio(id1,id2,usr):
	c_soles=0
	c_dolares=0
	t_soles=0
	t_dolares=0
	C = Cajas.objects.get(id_usuario__usuario=usr)
	if id1==id2:
		consulta1 = list(SolicitudTransferencia.objects.filter(pk=id1,idCajaDebe__aux2='activo').values('pk','idCajaDebe','comision','monto_conceptos'))
	else:
		consulta1 = list(SolicitudTransferencia.objects.filter(id__range=[id1,id2],idCajaDebe__aux2='activo',idCajaDebe__id_caja=C.pk).values('pk','idCajaDebe','comision','monto_conceptos'))
	for obj in consulta1:
		sq= PagoTransferencia.objects.filter(id_solicitud_transferencia=str(obj['pk']),idCajaHaber__id_personal=C.id_usuario.pk)
		Cd= TCajaDebe.objects.get(pk=obj['idCajaDebe'])
		if Cd.moneda=='soles':
			#c_soles=c_soles+float(obj['comision'])
			if Cd.estadoTransaccion=='extornado' or sq.count()>0:
				if Cd.aux1=='todo':
					c_soles=c_soles
					t_soles=t_soles
				else:
					c_soles=c_soles+float(obj['comision'])
					t_soles=t_soles+float(obj['monto_conceptos'])+float(obj['comision'])
			else:
				c_soles=c_soles+float(obj['comision'])
				t_soles=t_soles+float(Cd.cantidadDinero)
		elif Cd.moneda=='dolares':
			#c_dolares= c_dolares+float(obj['comision'])
			if Cd.estadoTransaccion=='extornado' or sq.count()>0:
				if Cd.aux1=='todo':
					c_dolares= c_dolares
					t_dolares=t_dolares
				else:
					c_dolares= c_dolares+float(obj['comision'])
					t_dolares=t_dolares+float(obj['monto_conceptos'])+float(obj['comision'])
			else:
				c_dolares= c_dolares+float(obj['comision'])
				t_dolares=t_dolares+float(Cd.cantidadDinero)
	t_soles=t_soles-c_soles
	t_dolares= t_dolares - c_dolares
	return c_soles,c_dolares,t_soles,t_dolares

def calcular_pago_para_descuento(id1,id2,usr):
	t_soles=0
	t_dolares=0
	C = Cajas.objects.get(id_usuario__usuario=usr)
	if id1==id2:
		consulta1 = list(PagoTransferencia.objects.filter(id_solicitud_transferencia=id1).exclude(idCajaHaber__aux1="descontado").values('pk','idCajaHaber','id_solicitud_transferencia'))
	else:
		consulta1 = list(PagoTransferencia.objects.filter(id_solicitud_transferencia__range=(id1,id2),idCajaHaber__id_caja=C.pk).exclude(idCajaHaber__aux1="descontado").exclude(id_solicitud_transferencia__idCajaDebe__id_caja=C.pk).values('pk','idCajaHaber','id_solicitud_transferencia'))
	for obj in consulta1:
		Ch= TCajaHaber.objects.get(pk=obj['idCajaHaber'])
		if Ch.moneda=='soles':
			t_soles=t_soles+float(Ch.cantidadDinero)
		elif Ch.moneda=='dolares':
			t_dolares=t_dolares+float(Ch.cantidadDinero)
	return t_soles,t_dolares
#-----------------------------------------
def calcular_egreso_para_descuento(id1,id2,usr):# id haber
	t_soles=0
	t_dolares=0
	C = Cajas.objects.get(id_usuario__usuario=usr)
	if id1==id2:
		consulta1 = list(TCajaHaber.objects.filter(pk=id1,tablaRelacional='EnvioOficinaOficina',aux1="falta_descontar",id_caja=C.pk).values('pk','cantidadDinero','moneda'))
	else:
		consulta1 = list(TCajaHaber.objects.filter(pk__range=(id1,id2),tablaRelacional='EnvioOficinaOficina',aux1="falta_descontar",id_caja=C.pk).values('pk','cantidadDinero','moneda'))
	for obj in consulta1:
		if obj['moneda']=='soles':
			t_soles=t_soles+float(obj['cantidadDinero'])
		elif obj['moneda']=='dolares':
			t_dolares=t_dolares+float(obj['cantidadDinero'])
	return t_soles,t_dolares

#****************************** EGRESO INGRESO **********************************
def calcular_egreso_para_descuento_envio(id1,id2,usr):# id haber (desde hasta)
	t_soles=0
	t_dolares=0
	C = Cajas.objects.get(id_usuario__usuario=usr)
	if id1==id2:
		consulta1 = list(TCajaHaber.objects.filter(pk=id1,id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['PagoTransferencia','TtransferenciaExtorno','EnvioOficinaOficina','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").values('pk','cantidadDinero','moneda'))
	else:
		consulta1 = list(TCajaHaber.objects.filter(pk__range=(id1,id2),id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['PagoTransferencia','TtransferenciaExtorno','EnvioOficinaOficina','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").values('pk','cantidadDinero','moneda'))
	for obj in consulta1:
		if obj['moneda']=='soles':
			t_soles=t_soles+float(obj['cantidadDinero'])
		elif obj['moneda']=='dolares':
			t_dolares=t_dolares+float(obj['cantidadDinero'])
	return t_soles,t_dolares

def calcular_ingreso_para_descuento_envio(id1,id2,usr):# id debe (desde hasta)
	t_soles=0
	t_dolares=0
	C = Cajas.objects.get(id_usuario__usuario=usr)
	if id1==id2:
		consulta1 = list(TCajaDebe.objects.filter(pk=id1,id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['SolicitudTransferencia','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").values('pk','cantidadDinero','moneda'))
	else:
		consulta1 = list(TCajaDebe.objects.filter(pk__range=(id1,id2),id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['SolicitudTransferencia','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").values('pk','cantidadDinero','moneda'))
	for obj in consulta1:
		if obj['moneda']=='soles':
			t_soles=t_soles+float(obj['cantidadDinero'])
		elif obj['moneda']=='dolares':
			t_dolares=t_dolares+float(obj['cantidadDinero'])
	return t_soles,t_dolares
#****************************************************************
#sin division
@login_required
@transaction.atomic
def DividirComision_enviarCapital_ajax_view(request):
	data=''
	if request.is_ajax:
		id1= request.GET.get('id1')
		id2= request.GET.get('id2','')
		idp1= request.GET.get('idp1','')
		idp2= request.GET.get('idp2','')
		ide1= request.GET.get('ide1','')
		ide2= request.GET.get('ide2','')
		idin1= request.GET.get('idin1','')
		idin2= request.GET.get('idin2','')
		ideg1= request.GET.get('ideg1','')
		ideg2= request.GET.get('ideg2','')
		if(id2==None or id2 ==''):
			id2=id1
		usr= request.user.username
		if(idp2==None or idp2 ==''):
			idp2=idp1
		montopago_soles,montopago_dolares=0,0
		if(idp1!=None and idp1!=''):
			montopago_soles,montopago_dolares=calcular_pago_para_descuento(idp1,idp2,usr)
		if(ide2==None or ide2 ==''):
			ide2=ide1
		montoegreso_soles,montoegreso_dolares=0,0
		if(ide1!=None and ide1!=''):
			montoegreso_soles,montoegreso_dolares=calcular_egreso_para_descuento(ide1,ide2,usr)

		if(idin2==None or idin2 ==''):
			idin2=idin1
		ingreso_soles,ingreso_dolares=0,0
		if(idin1!=None and idin1!=''):
			ingreso_soles,ingreso_dolares=calcular_ingreso_para_descuento_envio(idin1,idin2,usr)

		if(ideg2==None or ideg2 ==''):
			ideg2=ideg1
		egreso_soles,egreso_dolares=0,0
		if(ideg1!=None and ideg1!=''):
			egreso_soles,egreso_dolares=calcular_egreso_para_descuento_envio(ideg1,ideg2,usr)

		total_s=0
		total_d=0
		msol,mdol,total_s,total_d=calcular_para_division_envio(id1,id2,usr)
		#s1= SolicitudTransferencia.objects.get(pk=id1)
		#s2= SolicitudTransferencia.objects.get(pk=id2)
		#fecha1= s1.idCajaDebe.fecha.date()
		#fecha2= s2.idCajaDebe.fecha.date()
		C = Cajas.objects.get(id_usuario__usuario=usr)
		Oc=ConfiguracionExtra_oficina.objects.get(aux1="central")
		saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
		aux1= msol + total_s- montopago_soles - montoegreso_soles +ingreso_soles -egreso_soles
		aux2= mdol + total_d - montopago_dolares - montoegreso_dolares + ingreso_dolares - egreso_dolares
		if aux1 >=0 and aux2>=0:
			if (aux1 <= float(saldoDis.saldo_soles)) and (aux2 <= float(saldoDis.saldo_dolares)):
				if aux1>0:
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRE = int(Nrecibo.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
					THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,tipoDocumento="R/E",cantidadDinero=aux1,moneda='soles',observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					THaber.save()
					Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=Oc.id_oficina,monto=aux1,moneda='soles',conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,estado='enviado')
					Eo.save()
					Det_envio= DetalleEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=id1,HastaIdDebe=id2,DesdeIdHaber=idp1,HastaIdHaber=idp2,monto_capital=total_s,monto_comision=msol,aux1=str(montopago_soles))
					Det_envio.save()
					if montoegreso_soles >0:
						Det_envio2= DetalleEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdHaber=ide1,HastaIdHaber=ide2,monto_Egreso= montoegreso_soles)
						Det_envio2.save()
					if ingreso_soles >0 or egreso_soles >0:
						DetInEg_envio= DetalleIngresoEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=idin1,HastaIdDebe=idin2,DesdeIdHaber=ideg1,HastaIdHaber=ideg2,monto_Egreso= egreso_soles,monto_Ingreso=ingreso_soles)
						DetInEg_envio.save()
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)-aux1
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				if aux2>0:
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRE = int(Nrecibo.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
					THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,tipoDocumento="R/E",cantidadDinero=aux2,moneda='dolares',observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					THaber.save()
					Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=Oc.id_oficina,monto=aux2,moneda='dolares',conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,estado='enviado')
					Eo.save()
					Det_envio= DetalleEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=id1,HastaIdDebe=id2,DesdeIdHaber=idp1,HastaIdHaber=idp2,monto_capital=total_d,monto_comision=mdol,aux1=str(montopago_dolares))
					Det_envio.save()
					if montoegreso_dolares >0:
						Det_envio2= DetalleEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdHaber=ide1,HastaIdHaber=ide2,monto_Egreso= montoegreso_dolares)
						Det_envio2.save()
					if ingreso_dolares >0 or egreso_dolares >0:
						DetInEg_envio= DetalleIngresoEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=idin1,HastaIdDebe=idin2,DesdeIdHaber=ideg1,HastaIdHaber=ideg2,monto_Egreso= egreso_dolares,monto_Ingreso=ingreso_dolares)
						DetInEg_envio.save()
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)-aux2
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				aux5 = list(SolicitudTransferencia.objects.filter(id__range=[id1,id2],idCajaDebe__aux2='activo',idCajaDebe__id_caja=C.pk).values('pk','idCajaDebe'))
				for obj1 in aux5:
					aux6= TCajaDebe.objects.select_for_update().filter(pk=obj1['idCajaDebe']).update(aux2='dividido')
				if idp1!=None and idp1 !='':
					aux7 = list(PagoTransferencia.objects.filter(id_solicitud_transferencia__range=(idp1,idp2),idCajaHaber__id_caja=C.pk).exclude(idCajaHaber__aux1="descontado").exclude(id_solicitud_transferencia__idCajaDebe__id_caja=C.pk).values('pk','idCajaHaber'))
					for obj2 in aux7:
						aux8= TCajaHaber.objects.select_for_update().filter(pk=obj2['idCajaHaber']).update(aux1='descontado')

				if ide1!=None and ide1 !='':
					aux9 = TCajaHaber.objects.select_for_update().filter(pk__range=(ide1,ide2),tablaRelacional='EnvioOficinaOficina',aux1="falta_descontar",id_caja=C.pk).update(aux1='descontado')
				if ideg1 != None and ideg1 !='':
					aux10 =TCajaHaber.objects.select_for_update().filter(pk__range=(ideg1,ideg2),id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['PagoTransferencia','TtransferenciaExtorno','EnvioOficinaOficina','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").update(aux2='pagado')
				if idin1 != None and idin1 !='':
					aux11 =TCajaDebe.objects.select_for_update().filter(pk__range=(idin1,idin2),id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['SolicitudTransferencia','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").update(aux2='pagado')
				
				data='exito'
			else:
				data='saldo insuficiente'
		else:
			data="Monto Negativo"
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def Cantidad_comision_dividida_ajax_view(request):
	if request.is_ajax:
		data=''
		id1= request.GET.get('id1')
		id2= request.GET.get('id2','')
		idp1= request.GET.get('idp1','')
		idp2= request.GET.get('idp2','')
		ide1= request.GET.get('ide1','')
		ide2= request.GET.get('ide2','')
		idin1= request.GET.get('idin1','')
		idin2= request.GET.get('idin2','')
		ideg1= request.GET.get('ideg1','')
		ideg2= request.GET.get('ideg2','')
		usr= request.user.username
		if(id2==None or id2 ==''):
			id2=id1
		if(idp2==None or idp2 ==''):
			idp2=idp1
		montopago_soles,montopago_dolares=0,0
		if(idp1!=None and idp1!=''):
			montopago_soles,montopago_dolares=calcular_pago_para_descuento(idp1,idp2,usr)
		if(ide2==None or ide2 ==''):
			ide2=ide1
		montoegreso_soles,montoegreso_dolares=0,0
		if(ide1!=None and ide1!=''):
			montoegreso_soles,montoegreso_dolares=calcular_egreso_para_descuento(ide1,ide2,usr)

		if(idin2==None or idin2 ==''):
			idin2=idin1
		ingreso_soles,ingreso_dolares=0,0
		if(idin1!=None and idin1!=''):
			ingreso_soles,ingreso_dolares=calcular_ingreso_para_descuento_envio(idin1,idin2,usr)

		if(ideg2==None or ideg2 ==''):
			ideg2=ideg1
		egreso_soles,egreso_dolares=0,0
		if(ideg1!=None and ideg1!=''):
			egreso_soles,egreso_dolares=calcular_egreso_para_descuento_envio(ideg1,ideg2,usr)

		msol,mdol,total_s,total_d=calcular_para_division_envio(id1,id2,usr)
		saldo_soles=msol + total_s - montopago_soles - montoegreso_soles + ingreso_soles -egreso_soles
		saldo_dolares= mdol + total_d - montopago_dolares -montoegreso_dolares + ingreso_dolares - egreso_dolares
		data={'total_s': total_s,'total_d':total_d,'comi_di_s':msol,'comi_di_d':mdol,'total_pago_s':montopago_soles,'total_pago_d':montopago_dolares,'total_egreso_s':montoegreso_soles ,'total_egreso_d':montoegreso_dolares ,'total_envio_s':saldo_soles,'total_envio_d':saldo_dolares,'egreso_so':egreso_soles,'egreso_do':egreso_dolares,'ingreso_so':ingreso_soles,'ingreso_do':ingreso_dolares}
		data=json.dumps(data)
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)
#con division
@login_required
@transaction.atomic
def DividirComision_enviarCapital_C_ajax_view(request):
	data=''
	if request.is_ajax:
		id1= request.GET.get('id1')
		id2= request.GET.get('id2','')
		idp1= request.GET.get('idp1','')
		idp2= request.GET.get('idp2','')
		ide1= request.GET.get('ide1','')
		ide2= request.GET.get('ide2','')
		idin1= request.GET.get('idin1','')
		idin2= request.GET.get('idin2','')
		ideg1= request.GET.get('ideg1','')
		ideg2= request.GET.get('ideg2','')
		if(id2==None or id2 ==''):
			id2=id1
		usr= request.user.username
		if(idp2==None or idp2 ==''):
			idp2=idp1
		montopago_soles,montopago_dolares=0,0
		if(idp1!=None and idp1!=''):
			montopago_soles,montopago_dolares=calcular_pago_para_descuento(idp1,idp2,usr)

		if(ide2==None or ide2 ==''):
			ide2=ide1
		montoegreso_soles,montoegreso_dolares=0,0
		if(ide1!=None and ide1!=''):
			montoegreso_soles,montoegreso_dolares=calcular_egreso_para_descuento(ide1,ide2,usr)

		if(idin2==None or idin2 ==''):
			idin2=idin1
		ingreso_soles,ingreso_dolares=0,0
		if(idin1!=None and idin1!=''):
			ingreso_soles,ingreso_dolares=calcular_ingreso_para_descuento_envio(idin1,idin2,usr)

		if(ideg2==None or ideg2 ==''):
			ideg2=ideg1
		egreso_soles,egreso_dolares=0,0
		if(ideg1!=None and ideg1!=''):
			egreso_soles,egreso_dolares=calcular_egreso_para_descuento_envio(ideg1,ideg2,usr)

		total_s=0
		total_d=0
		msol,mdol,total_s,total_d=calcular_para_division_envio(id1,id2,usr)
		#s1= SolicitudTransferencia.objects.get(pk=id1)
		#s2= SolicitudTransferencia.objects.get(pk=id2)
		#fecha1= s1.idCajaDebe.fecha.date()
		#fecha2= s2.idCajaDebe.fecha.date()
		C = Cajas.objects.get(id_usuario__usuario=usr)
		porcentaje= ConfiguracionExtra_oficina.objects.get(id_oficina=C.id_oficina.pk)
		comision_dividida_s= round((1- float(porcentaje.Prj_comicion_queda)/100)*msol,2)
		comision_dividida_d= round((1- float(porcentaje.Prj_comicion_queda)/100)*mdol,2)
		Oc=ConfiguracionExtra_oficina.objects.get(aux1="central")
		saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
		aux1= comision_dividida_s + total_s - montopago_soles - montoegreso_soles + ingreso_soles - egreso_soles
		aux2= comision_dividida_d + total_d - montopago_dolares - montoegreso_dolares + ingreso_dolares - egreso_dolares
		if aux1>=0 and aux2>=0:
			if (aux1 <= float(saldoDis.saldo_soles)) and (aux2 <= float(saldoDis.saldo_dolares)):
				if aux1>0:
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRE = int(Nrecibo.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
					THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,tipoDocumento="R/E",cantidadDinero=aux1,moneda='soles',observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina+" con comision devidida",estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					THaber.save()
					Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=Oc.id_oficina,monto=aux1,moneda='soles',conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina+" con comision devidida",estado='enviado')
					Eo.save()
					Det_envio= DetalleEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=id1,HastaIdDebe=id2,DesdeIdHaber=idp1,HastaIdHaber=idp2,monto_capital=total_s,monto_comision=comision_dividida_s,porcentaje_queda=(float(porcentaje.Prj_comicion_queda)/100),aux1=str(montopago_soles))
					Det_envio.save()
					if montoegreso_soles >0:
						Det_envio2= DetalleEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdHaber=ide1,HastaIdHaber=ide2,monto_Egreso= montoegreso_soles)
						Det_envio2.save()
					if ingreso_soles >0 or egreso_soles >0:
						DetInEg_envio= DetalleIngresoEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=idin1,HastaIdDebe=idin2,DesdeIdHaber=ideg1,HastaIdHaber=ideg2,monto_Egreso= egreso_soles,monto_Ingreso=ingreso_soles)
						DetInEg_envio.save()
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)-aux1
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				if aux2>0:
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRE = int(Nrecibo.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
					THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,tipoDocumento="R/E",cantidadDinero=aux2,moneda='dolares',observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina+" con comision devidida",estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					THaber.save()
					Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=Oc.id_oficina,monto=aux2,moneda='dolares',conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina,observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.id_oficina.nombre_oficina+" con comision devidida",estado='enviado')
					Eo.save()
					Det_envio= DetalleEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=id1,HastaIdDebe=id2,DesdeIdHaber=idp1,HastaIdHaber=idp2,monto_capital=total_d,monto_comision=comision_dividida_d,porcentaje_queda=(float(porcentaje.Prj_comicion_queda)/100),aux1=str(montopago_dolares))
					Det_envio.save()
					if montoegreso_dolares >0:
						Det_envio2= DetalleEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdHaber=ide1,HastaIdHaber=ide2,monto_Egreso= montoegreso_dolares)
						Det_envio2.save()
					if ingreso_dolares >0 or egreso_dolares >0:
						DetInEg_envio= DetalleIngresoEgresoEnvioOficina(id_EnvioOficina=Eo,DesdeIdDebe=idin1,HastaIdDebe=idin2,DesdeIdHaber=ideg1,HastaIdHaber=ideg2,monto_Egreso= egreso_dolares,monto_Ingreso=ingreso_dolares)
						DetInEg_envio.save()
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)-aux2
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				aux5 = list(SolicitudTransferencia.objects.filter(id__range=(id1,id2),idCajaDebe__aux2='activo',idCajaDebe__id_caja=C.pk).values('pk','idCajaDebe'))
				for obj1 in aux5:
					aux6= TCajaDebe.objects.select_for_update().filter(pk=obj1['idCajaDebe']).update(aux2='dividido')
				if idp1!=None and idp1 !='':
					aux7 = list(PagoTransferencia.objects.filter(id_solicitud_transferencia__range=(idp1,idp2),idCajaHaber__id_caja=C.pk).exclude(idCajaHaber__aux1="descontado").exclude(id_solicitud_transferencia__idCajaDebe__id_caja=C.pk).values('pk','idCajaHaber'))
					for obj2 in aux7:
						aux8= TCajaHaber.objects.select_for_update().filter(pk=obj2['idCajaHaber']).update(aux1='descontado')
				if ide1!=None and ide1 !='':
					aux9 = TCajaHaber.objects.select_for_update().filter(pk__range=(ide1,ide2),tablaRelacional='EnvioOficinaOficina',aux1="falta_descontar",id_caja=C.pk).update(aux1='descontado')
				if ideg1 != None and ideg1 !='':
					aux10 =TCajaHaber.objects.select_for_update().filter(pk__range=(ideg1,ideg2),id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['PagoTransferencia','TtransferenciaExtorno','EnvioOficinaOficina','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").update(aux2='pagado')
				if idin1 != None and idin1 !='':
					aux11 =TCajaDebe.objects.select_for_update().filter(pk__range=(idin1,idin2),id_oficina=C.id_oficina.pk,id_caja=C.pk).exclude(tablaRelacional__in=['SolicitudTransferencia','CompraDolar','VentaDolar','CtaAhorros','CtaAhorrosMovimientos','CtaCte','CtaCteMovimientos']).exclude(aux2="pagado").update(aux2='pagado')
				data='exito'
			else:
				data='saldo insuficiente'
		else:
			data='Monto Negativo'
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def Cantidad_comision_dividida_C_ajax_view(request):
	if request.is_ajax:
		data=''
		id1= request.GET.get('id1')
		id2= request.GET.get('id2','')
		idp1= request.GET.get('idp1','')
		idp2= request.GET.get('idp2','')
		ide1= request.GET.get('ide1','')
		ide2= request.GET.get('ide2','')
		idin1= request.GET.get('idin1','')
		idin2= request.GET.get('idin2','')
		ideg1= request.GET.get('ideg1','')
		ideg2= request.GET.get('ideg2','')
		usr= request.user.username
		if(id2==None or id2 ==''):
			id2=id1
		if(idp2==None or idp2 ==''):
			idp2=idp1
		montopago_soles,montopago_dolares=0,0
		if(idp1!=None and idp1!=''):
			montopago_soles,montopago_dolares=calcular_pago_para_descuento(idp1,idp2,usr)
		if(ide2==None or ide2 ==''):
			ide2=ide1
		montoegreso_soles,montoegreso_dolares=0,0
		if(ide1!=None and ide1!=''):
			montoegreso_soles,montoegreso_dolares=calcular_egreso_para_descuento(ide1,ide2,usr)

		if(idin2==None or idin2 ==''):
			idin2=idin1
		ingreso_soles,ingreso_dolares=0,0
		if(idin1!=None and idin1!=''):
			ingreso_soles,ingreso_dolares=calcular_ingreso_para_descuento_envio(idin1,idin2,usr)

		if(ideg2==None or ideg2 ==''):
			ideg2=ideg1
		egreso_soles,egreso_dolares=0,0
		if(ideg1!=None and ideg1!=''):
			egreso_soles,egreso_dolares=calcular_egreso_para_descuento_envio(ideg1,ideg2,usr)

		msol,mdol,total_s,total_d=calcular_para_division_envio(id1,id2,usr)
		C = Cajas.objects.get(id_usuario__usuario=usr)
		porcentaje= ConfiguracionExtra_oficina.objects.get(id_oficina=C.id_oficina.pk)
		comision_dividida_s= round((1- float(porcentaje.Prj_comicion_queda)/100)*msol,2)
		comision_dividida_d= round((1- float(porcentaje.Prj_comicion_queda)/100)*mdol,2)
		saldo_soles=comision_dividida_s+ total_s - montopago_soles - montoegreso_soles + ingreso_soles -egreso_soles
		saldo_dolares= comision_dividida_d + total_d - montopago_dolares - montoegreso_dolares + ingreso_dolares - egreso_dolares
		data={'total_s': total_s,'total_d':total_d,'comi_di_s':comision_dividida_s,'comi_di_d':comision_dividida_d,'total_pago_s':montopago_soles,'total_pago_d':montopago_dolares,'total_egreso_s':montoegreso_soles ,'total_egreso_d':montoegreso_dolares ,'total_envio_s':saldo_soles,'total_envio_d':saldo_dolares,'egreso_so':egreso_soles,'egreso_do':egreso_dolares,'ingreso_so':ingreso_soles,'ingreso_do':ingreso_dolares}
		data=json.dumps(data)
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def RecibirComisionDividida_ajax_view(request):
	data=''
	if request.is_ajax:
		usr= request.user.username
		idComisiond= request.GET.get('idCo')
		obser= request.GET.get('obs','')
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			Fo = FechaOperacion.objects.get(id_caja=C.pk)#ultimo dia operacion
			if date.today() >Fo.fecha_operacion:
				FechaOperacion.objects.select_for_update().filter(pk=Fo.pk).update(fecha_operacion=date.today())
				Fo = FechaOperacion.objects.get(id_caja=C.pk)
			fecha= Fo.fecha_operacion
			fechahora= datetime.combine(fecha,datetime.now().time())
			TcD = TComisionDividida.objects.get(pk= idComisiond)
			saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
			if TcD.moneda== 'soles':
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				TCajaDs = TCajaDebe(id_personal= C.id_usuario,tablaRelacional="TComisionDividida",fecha=fechahora,conceptoDetalle="division de comision",tipoDocumento='ingreso',cantidadDinero=TcD.monto,moneda='soles',nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C,estadoTransaccion='recibido',observaciones=obser);
				TCajaDs.save()
				TComisionDividida.objects.select_for_update().filter(pk=TcD.pk).update(estado='recibido')
				saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+TcD.monto
				SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
			if TcD.moneda== 'dolares':
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				TCajaDd = TCajaDebe(id_personal= C.id_usuario,tablaRelacional="TComisionDividida",fecha=fechahora,conceptoDetalle="division de comision",tipoDocumento='ingreso',cantidadDinero=TcD.monto,moneda='dolares',nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C,estadoTransaccion='recibido',observaciones=obser);
				TCajaDd.save()
				TComisionDividida.objects.select_for_update().filter(pk=TcD.pk).update(estado='recibido')
				saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+TcD.monto
				SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
			data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def RegistroIngreso_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	recibid=request.POST.get('recibid')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	cargo =''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				TCajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle=Concepto,tipoDocumento="R/I",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				TCajaD.save()
				ingreso = Ingreso(id_debe=TCajaD,afavor=recibid,concepto=Concepto,estado='activo',observaciones=Obs)
				ingreso.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroIngreso.html",{"resultado":exito,"cargo":cargo,"nombreRecibo": recibid,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def RegistroEgreso_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	afavord=request.POST.get('afavord')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")

	cargo =''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRE = int(Nrecibo.nroRE)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					#if saldosoles>= Cantidad:
					TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle=Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					TCajaH.save()
					egreso = Egreso(id_haber=TCajaH,estado='activo',observaciones=Obs,concepto=Concepto,afavor=afavord)
					egreso.save()
					saldosoles= saldosoles - Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
					exito= 'exito'
					#else:
					#	exito= 'saldo insuficiente'
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)
					#if saldodolares>= Cantidad:
					TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle=Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					TCajaH.save()
					egreso = Egreso(id_haber=TCajaH,estado='activo',observaciones=Obs,concepto=Concepto,afavor=afavord)
					egreso.save()
					saldodolares= saldodolares - Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
					exito='exito'
					#else:
					#	exito= 'saldo insuficiente'
				else:
					exito= 'fail'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroEgreso.html",{"resultado":exito,"cargo":cargo,"nombreRecibo": afavord,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

#*************** ingreso egreso en caja material*************
@login_required
@transaction.atomic
def RegistroIngresoM_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	recibid=request.POST.get('recibid')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	cargo =''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				TCajaD= TCajaDebeM(id_personal=C.id_usuario,tablaRelacional="IngresoM",conceptoDetalle=Concepto,tipoDocumento="R/I",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				TCajaD.save()
				ingreso = IngresoM(id_debe=TCajaD,afavor=recibid,concepto=Concepto,estado='activo',observaciones=Obs)
				ingreso.save()
				saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+Cantidad
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+Cantidad
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroIngresoM.html",{"resultado":exito,"cargo":cargo,"nombreRecibo": recibid,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def RegistroEgresoM_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	afavord=request.POST.get('afavord')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")

	cargo =''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRE = int(Nrecibo.nroRE)+1
				NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
				saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					#if saldosoles>= Cantidad:
					TCajaH= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="EgresoM",conceptoDetalle=Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					TCajaH.save()
					egreso = EgresoM(id_haber=TCajaH,estado='activo',observaciones=Obs,concepto=Concepto,afavor=afavord)
					egreso.save()
					saldosoles= saldosoles - Cantidad
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
					exito= 'exito'
					#else:
					#	exito= 'saldo insuficiente'
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)
					#if saldodolares>= Cantidad:
					TCajaH= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle=Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					TCajaH.save()
					egreso = EgresoM(id_haber=TCajaH,estado='activo',observaciones=Obs,concepto=Concepto,afavor=afavord)
					egreso.save()
					saldodolares= saldodolares - Cantidad
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
					exito='exito'
					#else:
					#	exito= 'saldo insuficiente'
				else:
					exito= 'fail'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroEgresoM.html",{"resultado":exito,"cargo":cargo,"nombreRecibo": afavord,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

#************************************************************
@login_required
@transaction.atomic
def CtaCteInsertarPeticionCtaCte(request):#encargado de crear transferencias
	data=''
	exito=''
	if request.is_ajax:
		idctacte=request.GET.get('idctacte')#capturamos los atributos del formulario
		moneda=request.GET.get('moneda')#atributos('IdCliente','TipoPersona','DniRucCln','NombreCln','PaternoCln','MaternoCln','DireccionCln','NombreBnf','PaternoBnf','MaternoBnf','OficinaDst','SucursalDst','moneda','txtCantidad','txtComicion','obs',)
		monto= request.GET.get('monto')
		montoSobregiro= request.GET.get('montoSobregiro')
		interes= request.GET.get('interes')
		tiempo= request.GET.get('tiempo')
		Comision=request.GET.get('comision')
		CodigoA= request.GET.get('codAut')
		usr=request.user.username
		C = Cajas.objects.get(id_usuario__usuario=usr)
		cargo =''
		exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
		Cta= CtaCte.objects.get(pk=idctacte)

		if tiempo=='' or tiempo==None:
			tiempo=0

		if interes=='' or interes==None:
			interes=0
		else:
			interes=ConvertirDecimal(interes)

		if Comision=='' or Comision==None:
			Comision=0
		else:
			Comision=ConvertirDecimal(Comision)

		if monto ==''or monto == None:
			monto=0
		else:
			monto = ConvertirDecimal(monto)

		if montoSobregiro=='' or montoSobregiro==None:
			montoSobregiro=0
		else:
			montoSobregiro=ConvertirDecimal(montoSobregiro)

		try:
			with transaction.atomic():
				if not PeticionesCtaCtes.objects.filter(idctacte=idctacte,id_personal=C.id_usuario,estado='ESPERANDO').exists():
					O=Oficina.objects.get(pk=C.id_oficina.pk)
					peticiones= PeticionesCtaCtes(idctacte= Cta,tipoMoneda=moneda,monto=ConvertirDecimal(monto),estado='ESPERANDO',id_personal=C.id_usuario,saldo=0,montoSobregiro=ConvertirDecimal(montoSobregiro),interesSobregiro=ConvertirDecimal(interes),nroDiasSobregiro=tiempo,id_oficina=O,comision=Comision)
					peticiones.save()
					Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=idctacte,aux1=montoSobregiro,aux2=moneda,tipoCta='Corriente').update(estado='utilizado',fecha_creacion_cta=datetime.now())	 
					exito='exito'
				else:
					exito='Solo es admitido una Peticion por Cuenta Corriente'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])
	
	dato={'resultado':exito}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#views para actualizar datos del modelo autorizacion_Extorno_completo
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Actualizar_datos_extrono_total_ajax_view(request):#encargado de crear transferencias
	data=''
	if request.is_ajax:
		try:
			with transaction.atomic(): 
				consulta=list(Oficina.objects.exclude(nombre_oficina="Gerencia").values('pk','nombre_oficina'))
				for obj in consulta:
					o1= Oficina.objects.get(pk=obj['pk'])
					consulta1=list(Cajas.objects.filter(id_oficina=o1).values('pk'))
					for obj1 in consulta1:
						if ConfiguracionExtra_caja.objects.filter(id_oficina=o1,id_caja=obj1['pk']).exists():
							ConfiguracionExtra_caja.objects.select_for_update().filter(id_oficina=o1,id_caja=int(obj1['pk'])).update(otros_conceptos_minimo=0,extorno_total='no')
						else:
							C=Cajas.objects.get(pk= obj1['pk'])
							aut= ConfiguracionExtra_caja(id_oficina=o1,id_caja=C,otros_conceptos_minimo=0,extorno_total='no')
							aut.save()
				data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail1'+ str(sys.exc_info()[1])
	
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Actualizar_config_total_ajax_view(request):#encargado de crear transferencias
	data=''
	if request.is_ajax:
		try:
			with transaction.atomic(): 
				consulta=list(Oficina.objects.exclude(nombre_oficina="Gerencia").values('pk','nombre_oficina'))
				for obj in consulta:
					o1= Oficina.objects.get(pk=obj['pk'])
					aut= ConfiguracionExtra_oficina(id_oficina=o1,Prj_comicion_queda=0,cierreObligatorio='no',aux1='',aux2='',aux3='')
					aut.save()
				data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail1'+ str(sys.exc_info()[1])
	
	mimetype="text"
	return HttpResponse(data,mimetype)

#------------------------ sistema de escritorio ----------------------------------
@transaction.atomic
def escritorio_envio_oficina_ajax_view(request):
	if request.is_ajax:
		usr= request.GET.get('user')
		pasw = request.GET.get('pass')
		idOficina= request.GET.get('oficina')
		Moneda= request.GET.get('moneda')
		Monto = request.GET.get('monto')
		Observaciones= request.GET.get('obs')
		exito=''
		dol=0
		sol=0
		try:
			with transaction.atomic():
				Ger = Gerente.objects.get(usuario=usr,password=pasw)
				O = Oficina.objects.get(pk=idOficina)
				C = Cajas.objects.get(id_oficina=O.pk,nombre="Caja Principal")
				Per= Personal.objects.get(pk=C.id_usuario.pk)
				Monto = ConvertirDecimal(Monto)
				CG = Cajas.objects.get(id_usuario=Ger.id_usuario.pk)
				Nrecibo1= NroReciboCaja.objects.get(id_oficina=CG.id_oficina.pk,id_caja=C.pk)
				numeroRE = int(Nrecibo1.nroRE)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=CG.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
				THaber= TCajaHaber(id_personal=CG.id_usuario,tablaRelacional="DepositoCaja",conceptoDetalle="Envio de dinero  del sistema escritorio de gerencia a oficina "+O.nombre_oficina,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=CG.id_oficina,id_caja=CG)
				THaber.save()
				Deposito= DepositoCaja(id_caja= C,id_usuario=Per,id_gerente=Ger,moneda=Moneda,monto=Monto,conceptoDetalle="Envio de dinero  del sistema escritorio de gerencia a oficina "+O.nombre_oficina,observaciones=Observaciones,estado='enviado')
				Deposito.save()
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	else:
		exito='fail'
	dato={'resultado':exito}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#****************************************************************************************************
#------------------- sincronizacion con sistema de material ---------------------
@login_required
@transaction.atomic
def envio_dinero_martp_ajax_view(request):
	data=''
	if request.is_ajax:
		usr=request.user.username
		monto_envio = request.GET.get('m')
		moneda_envio = request.GET.get('md')
		obs=request.GET.get('obs')
		try:
			with transaction.atomic():
				U= Personal.objects.get(usuario=usr)
				C= Cajas.objects.get(id_usuario=U.pk)
				montoenvio=ConvertirDecimal(monto_envio)
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if (moneda_envio=='soles' and montoenvio<=saldoDis.saldo_soles) or (moneda_envio=='dolares' and montoenvio<=saldoDis.saldo_dolares):
					Ts= TSincronizacion.objects.get(id_usuario=U.pk)
					edm=Envio_dinero_martp(id_sincronizacion=Ts,monto=montoenvio,moneda=moneda_envio,observaciones=obs,estado='enviado')
					edm.save()
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroRE=int(Nrecibo.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRE=numeroRE)
					if moneda_envio=='soles':
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(pk=saldoDis.pk).update(saldo_soles=(saldoDis.saldo_soles-montoenvio))
					else:
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(pk=saldoDis.pk).update(saldo_dolares=(saldoDis.saldo_dolares-montoenvio))
					haber= TCajaHaber(id_personal=U,tablaRelacional="Envio_dinero_martp",conceptoDetalle="Envio de Dinero para Martpsystem para usuario"+Ts.usuario_martp,tipoDocumento="R/E",cantidadDinero=montoenvio,moneda=moneda_envio,observaciones=obs,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					haber.save()
					dato={'resul':'exito','usr':Ts.usuario_martp}
					data= json.dumps(dato)
				else:
					data='Error: Saldo insuficiente'
		except:
			data='Error: '+str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@transaction.atomic
def recepcion_dinero_martp_ajax_view(request):#peticion desde imperial
	data=''
	if request.is_ajax:
		monto_envio = request.GET.get('m')
		moneda_envio = request.GET.get('md')
		obs=request.GET.get('obs')
		usr=request.GET.get('usr')
		try:
			with transaction.atomic():
				U= Personal.objects.get(usuario=usr)
				C= Cajas.objects.get(id_usuario=U.pk)
				montoenvio=ConvertirDecimal(monto_envio)
				Ts= TSincronizacion.objects.get(id_usuario=U.pk)
				rdm=Recepcion_dinero_martp(id_sincronizacion=Ts,monto=montoenvio,moneda=moneda_envio,observaciones=obs,estado='')
				rdm.save()
				"""
				Nrecibo= NroReciboCaja.objects.get(id_caja=C.pk)
				numeroRI=int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroRE)
				if moneda_envio=='soles':
					aux=Caja.objects.filter(pk=C.pk).update(saldo_soles=(C.saldo_soles+monto))
				else:
					aux=Caja.objects.filter(pk=C.pk).update(saldo_dolares=(C.saldo_dolares+monto))
				debe= TCajaHaber(id_usuario=U,tablaRelacional="Recepcion_dinero_imperial",conceptoDetalle="Recepcion de Dinero de Imperial de usuario"+Ts.usuario_imperial,tipoDocumento="R/I",cantidadDinero=montoenvio,moneda=moneda_envio,observaciones=obs,estadoTransaccion="recibido",nroRecibo=numeroRI)
				debe.save()"""
				data='exito'
		except:
			data='Error: '+str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def recibido_dinero_martp_conforme_ajax_view(request):
	data=''
	if request.is_ajax:
		pke = request.GET.get('pk')
		usr=request.user.username
		try:
			with transaction.atomic():
				U= Personal.objects.get(usuario=usr)
				C= Cajas.objects.get(id_usuario=U.pk)
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				rdi=Recepcion_dinero_martp.objects.get(pk=pke)
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI=int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRI=numeroRI)
				if rdi.moneda=='soles':
					saldo=float(saldoDis.saldo_soles)+float(rdi.monto)
					aux=SaldoDisponibleCajas.objects.select_for_update().filter(pk=saldoDis.pk).update(saldo_soles=saldo)
				else:
					saldo=float(saldoDis.saldo_dolares)+float(rdi.monto)
					aux=SaldoDisponibleCajas.objects.select_for_update().filter(pk=saldoDis.pk).update(saldo_dolares=saldo)
				debe= TCajaDebe(id_personal=U,tablaRelacional="Recepcion_dinero_martp",conceptoDetalle="Recepcion de Dinero de Martpsystem de usuario: "+rdi.id_sincronizacion.usuario_martp,tipoDocumento="R/I",cantidadDinero=float(rdi.monto),moneda=rdi.moneda,observaciones=rdi.observaciones,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				debe.save()
				aux= Recepcion_dinero_martp.objects.select_for_update().filter(pk=rdi.pk).update(estado='recibido')
				data='exito'
		except:
			data='Error: '+str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def solicitud_sincronizacion_ajax_view(request):#peticion desde imperial
	data=''
	if request.is_ajax:
		usr = request.user.username
		usr_martp = request.GET.get('umart','')#imperial
		try:
			U= Personal.objects.get(usuario=usr)
			if usr_martp!='':
				Ts=TSincronizacion(id_usuario=U,usuario_martp=usr_martp)
				Ts.save()
				data='exito'
			else:
				data='Error: Faltan campos necesarios'
		except:
			data='Error: '+str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)

#********************************************************************************************
@login_required
def Cierre_automatico_view(request):
	usr = request.user.username
	cargo =''
	tipoSis=''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	cerrar=True
	if CajaCierre.objects.filter(id_caja=C.pk,estado="cerrado").exists():
		Uc= CajaCierre.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
		if (Uc.fechaHasta + timedelta(days=1)) >= date.today():
			cerrar= False
	else:
		cerrar= False
	if cerrar:
		return render(request,"CierreForzado.html",{"cargo":cargo,"cerrando_auto":"si"} )
	else:
		return HttpResponseRedirect('/')

@login_required
@permission_required('Main.add_oficina')
def ver_cierre_caja_view(request):
	pko = request.POST.get('pkO')
	pkc = request.POST.get('pkC')
	caja = request.POST.get('caja')
	oficina = request.POST.get('oficina')
	operador = request.POST.get('op')
	saldo_soles = request.POST.get('ss')
	saldo_dolares = request.POST.get('sd')
	saldo_material=request.POST.get('sm')
	saldo_inicial_soles = request.POST.get('sis')
	saldo_inicial_dolares = request.POST.get('sid')
	saldo_inicial_material=request.POST.get('sim')
	fechad = request.POST.get('fd')
	fechah = request.POST.get('fh')
	fechac = request.POST.get('fc')
	tipoSis=''
	if TConfiguracionSistema.objects.filter(id_caja=pkc).exists():
		ts=TConfiguracionSistema.objects.get(id_caja=pkc)
		tipoSis=ts.tipoSistema

	return render(request,"ver_cierre_oficinas.html",{"pko":pko,"pkc":pkc,"caja":caja,"oficina":oficina,"operador":operador,"sis":saldo_inicial_soles,"sid":saldo_inicial_dolares,"sim":saldo_inicial_material,"fd":fechad,"fh":fechah,"fc":fechac,"tipoSis":tipoSis} )

@login_required
@permission_required('Main.add_oficina')
def cambiar_ofi_central_ajax_view(request):
	pk = request.GET.get('ofiC','')
	if request.is_ajax:
		data=''
		try:
			if pk != '':
				if  Oficina.objects.filter(categoria_oficina="central").exists():
					aux1= Oficina.objects.select_for_update().filter(categoria_oficina="central").update(categoria_oficina="")
				aux = Oficina.objects.select_for_update().filter(pk=pk).update(categoria_oficina="central")
				data='exito'
			else:
				data='debe elegir una oficina'
		except:
			data='error en consulta'
	else:
		data='fail'+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)

 
def calcular_transferencia_para_envio_oficina_pagador(id1,id2,idO):
	c_soles=0
	c_dolares=0
	t_soles=0
	t_dolares=0
	if id1 !='' and id1!= None:
		if id1==id2:
			consulta1 = list(SolicitudTransferencia.objects.filter(pk=id1,id_oficina=idO).exclude(idCajaDebe__observaciones2="pagado").values('pk','idCajaDebe','comision','monto_conceptos'))
		else:
			consulta1 = list(SolicitudTransferencia.objects.filter(id__range=[id1,id2],id_oficina=idO).exclude(idCajaDebe__observaciones2="pagado").values('pk','idCajaDebe','comision','monto_conceptos'))
		for obj in consulta1:
			Cd= TCajaDebe.objects.get(pk=obj['idCajaDebe'])
			sq= PagoTransferencia.objects.filter(id_solicitud_transferencia=str(obj['pk']),idCajaHaber__id_caja__id_oficina=Cd.id_oficina.pk)
			if Cd.moneda=='soles':
				#c_soles=c_soles+float(obj['comision'])
				if Cd.estadoTransaccion=='extornado' or sq.count()>0:
					if Cd.aux1=='todo':
						c_soles=c_soles
						t_soles=t_soles
					else:
						c_soles=c_soles+float(obj['comision'])
						t_soles=t_soles+float(obj['monto_conceptos'])+float(obj['comision'])
				else:
					c_soles=c_soles+float(obj['comision'])
					t_soles=t_soles+float(Cd.cantidadDinero)
			elif Cd.moneda=='dolares':
				#c_dolares= c_dolares+float(obj['comision'])
				if Cd.estadoTransaccion=='extornado' or sq.count()>0:
					if Cd.aux1=='todo':
						c_dolares= c_dolares
						t_dolares=t_dolares
					else:
						c_dolares= c_dolares+float(obj['comision'])
						t_dolares=t_dolares+float(obj['monto_conceptos'])+float(obj['comision'])
				else:
					c_dolares= c_dolares+float(obj['comision'])
					t_dolares=t_dolares+float(Cd.cantidadDinero)
		t_soles=t_soles-c_soles
		t_dolares= t_dolares - c_dolares
	return c_soles,c_dolares,t_soles,t_dolares

def calcular_transferencia_para_descuento_oficina_pagador(id1,id2,idO):
	c_soles=0
	c_dolares=0
	t_soles=0
	t_dolares=0
	if id1 !='' and id1!= None:
		if id1==id2:
			consulta1 = list(SolicitudTransferencia.objects.filter(pk=id1,idCajaDebe__id_oficina=idO).exclude(idCajaDebe__observaciones2="pagado").values('pk','idCajaDebe','comision','monto_conceptos'))
		else:
			consulta1 = list(SolicitudTransferencia.objects.filter(id__range=[id1,id2],idCajaDebe__id_oficina=idO).exclude(idCajaDebe__observaciones2="pagado").values('pk','idCajaDebe','comision','monto_conceptos'))
		for obj in consulta1:
			sq= PagoTransferencia.objects.filter(id_solicitud_transferencia=str(obj['pk']),idCajaHaber__id_oficina=idO)
			Cd= TCajaDebe.objects.get(pk=obj['idCajaDebe'])
			if Cd.moneda=='soles':
				#c_soles=c_soles+float(obj['comision'])
				if Cd.estadoTransaccion=='extornado' or sq.count()>0:
					if Cd.aux1=='todo':
						c_soles=c_soles
						t_soles=t_soles
					else:
						c_soles=c_soles+float(obj['comision'])
						t_soles=t_soles+float(obj['monto_conceptos'])+float(obj['comision'])
				else:
					c_soles=c_soles+float(obj['comision'])
					t_soles=t_soles+float(Cd.cantidadDinero)
			elif Cd.moneda=='dolares':
				#c_dolares= c_dolares+float(obj['comision'])
				if Cd.estadoTransaccion=='extornado' or sq.count()>0:
					if Cd.aux1=='todo':
						c_dolares= c_dolares
						t_dolares=t_dolares
					else:
						c_dolares= c_dolares+float(obj['comision'])
						t_dolares=t_dolares+float(obj['monto_conceptos'])+float(obj['comision'])
				else:
					c_dolares= c_dolares+float(obj['comision'])
					t_dolares=t_dolares+float(Cd.cantidadDinero)
		t_soles=t_soles-c_soles
		t_dolares= t_dolares - c_dolares
	return c_soles,c_dolares,t_soles,t_dolares

@login_required
def calcular_envio_divicion_oficina_p_ajax_view(request):
	if request.is_ajax:
		idO = request.GET.get('pk','')
		idt1 = request.GET.get('id1')
		idt2 = request.GET.get('id2')
		idd1 = request.GET.get('idD1')
		idd2 = request.GET.get('idD2')
		dato={}
		try:
			if idO != '':
				if(idt2==None or idt2 ==''):
					idt2=idt1
				if(idd2==None or idd2 ==''):
					idd2=idd1
				comision_envio_sol,comision_envio_dol,capital_envio_sol,capital_envio_dol = calcular_transferencia_para_envio_oficina_pagador(idt1,idt2,idO)
				comision_desc_sol,comision_desc_dol,capital_desc_sol,capital_desc_dol = calcular_transferencia_para_descuento_oficina_pagador(idd1,idd2,idO)
				porcentaje= ConfiguracionExtra_oficina.objects.get(id_oficina=idO)
				comision_envio_dividida_s= round((float(porcentaje.Prj_comicion_queda)/100)*comision_envio_sol,2)
				comision_envio_dividida_d= round((float(porcentaje.Prj_comicion_queda)/100)*comision_envio_dol,2)
				comision_descuento_dividida_s= round((1- float(porcentaje.Prj_comicion_queda)/100)*comision_desc_sol,2)
				comision_descuento_dividida_d= round((1- float(porcentaje.Prj_comicion_queda)/100)*comision_desc_dol,2)
				dato={}
				dato['e_comi_s']=comision_envio_sol
				dato['e_comi_d']=comision_envio_dol
				dato['e_comi_d_s']=comision_envio_dividida_s
				dato['e_comi_d_d']=comision_envio_dividida_d
				dato['e_capi_s']=capital_envio_sol
				dato['e_capi_d']=capital_envio_dol
				dato['d_comi_s']=comision_desc_sol
				dato['d_comi_d']=comision_desc_dol
				dato['d_comi_d_s']=comision_descuento_dividida_s
				dato['d_comi_d_d']=comision_descuento_dividida_d
				dato['d_capi_s']=capital_desc_sol
				dato['d_capi_d']=capital_desc_dol
				dato['total_s'] =capital_envio_sol + comision_envio_dividida_s - capital_desc_sol - comision_descuento_dividida_s
				dato['total_d'] =capital_envio_dol + comision_envio_dividida_d - capital_desc_dol - comision_descuento_dividida_d
			else:
				dato='fail'
		except:
			dato= str(sys.exc_info()[1])
	else:
		data='fail'
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def DividirComision_enviar_oficina_pagador_ajax_view(request):
	data=''
	if request.is_ajax:
		idO = request.GET.get('pk','')
		idt1 = request.GET.get('id1')
		idt2 = request.GET.get('id2')
		idd1 = request.GET.get('idD1')
		idd2 = request.GET.get('idD2')
		obs = request.GET.get('obs','')
		usr = request.user.username
		if idO != '':
			if(idt2==None or idt2 ==''):
				idt2=idt1
			if(idd2==None or idd2 ==''):
				idd2=idd1
			comision_envio_sol,comision_envio_dol,capital_envio_sol,capital_envio_dol = calcular_transferencia_para_envio_oficina_pagador(idt1,idt2,idO)
			comision_desc_sol,comision_desc_dol,capital_desc_sol,capital_desc_dol = calcular_transferencia_para_descuento_oficina_pagador(idd1,idd2,idO)
			porcentaje= ConfiguracionExtra_oficina.objects.get(id_oficina=idO)
			comi_envio_div_s= round((float(porcentaje.Prj_comicion_queda)/100)*comision_envio_sol,2)
			comi_envio_div_d= round((float(porcentaje.Prj_comicion_queda)/100)*comision_envio_dol,2)
			comi_desc_div_s= round((1- float(porcentaje.Prj_comicion_queda)/100)*comision_desc_sol,2)
			comi_desc_div_d= round((1- float(porcentaje.Prj_comicion_queda)/100)*comision_desc_dol,2)
			C = Cajas.objects.get(id_usuario__usuario=usr)
			Oc = Oficina.objects.get(pk=idO)
			saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
			aux1= capital_envio_sol + comi_envio_div_s - capital_desc_sol - comi_desc_div_s
			aux2= capital_envio_dol + comi_envio_div_d - capital_desc_dol - comi_desc_div_d
			if aux1 >=0 and aux2>=0:
				if (aux1 <= float(saldoDis.saldo_soles)) and (aux2 <= float(saldoDis.saldo_dolares)):
					if aux1>0:
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.nombre_oficina,tipoDocumento="R/E",cantidadDinero=aux1,moneda='soles',observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.nombre_oficina,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						THaber.save()
						Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=Oc,monto=aux1,moneda='soles',conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.nombre_oficina,observaciones=obs,estado='enviado')
						Eo.save()
						Det_envio= DetalleEnvioOficinaPagador(id_EnvioOficina=Eo,E_DesdeIdTr=idt1,E_HastaIdTr=idt2,D_DesdeIdTr=idd1,D_HastaIdTr=idd2,monto_capi_envio=capital_envio_sol,monto_comi_envio=comi_envio_div_s,monto_capi_desc=capital_desc_sol,monto_comi_desc=comi_desc_div_s,porcentaje_queda=porcentaje.Prj_comicion_queda)
						Det_envio.save()
						saldosoles = ConvertirDecimal(saldoDis.saldo_soles)-aux1
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
					if aux2>0:
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.nombre_oficina,tipoDocumento="R/E",cantidadDinero=aux2,moneda='dolares',observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.nombre_oficina,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						THaber.save()
						Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=Oc,monto=aux2,moneda='dolares',conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.nombre_oficina,observaciones="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+Oc.nombre_oficina,estado='enviado')
						Eo.save()
						Det_envio= DetalleEnvioOficinaPagador(id_EnvioOficina=Eo,E_DesdeIdTr=idt1,E_HastaIdTr=idt2,D_DesdeIdTr=idd1,D_HastaIdTr=idd2,monto_capi_envio=capital_envio_dol,monto_comi_envio=comi_envio_div_s,monto_capi_desc=capital_desc_dol,monto_comi_desc=comi_desc_div_d,porcentaje_queda=porcentaje.Prj_comicion_queda)
						Det_envio.save()
						saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)-aux2
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
					aux5 = list(SolicitudTransferencia.objects.filter(id__range=[idt1,idt2],id_oficina=idO).exclude(idCajaDebe__observaciones2="pagado").values('pk','idCajaDebe'))
					for obj1 in aux5:
						aux6= TCajaDebe.objects.select_for_update().filter(pk=obj1['idCajaDebe']).update(observaciones2='pagado')
					if idd1!=None and idd1 !='':
						aux7 = list(SolicitudTransferencia.objects.filter(id__range=[idd1,idd2],idCajaDebe__id_oficina=idO).exclude(idCajaDebe__observaciones2="pagado").values('pk','idCajaDebe'))
						for obj2 in aux7:
							aux8= TCajaDebe.objects.select_for_update().filter(pk=obj2['idCajaDebe']).update(observaciones2='pagado')
					data='exito'
				else:
					data='saldo insuficiente'
			else:
				data="Monto Negativo"
		else:
			dato='fail'
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)
	
@transaction.atomic
def mensaje_enviado_ajax_view(request):#sms
	exito=-1
	if request.is_ajax:
		pks = request.GET.get('pk')
		try:
			with transaction.atomic():
				if str(pks) != '-1':
					sms = Mensajeria_sms.objects.select_for_update().filter(pk=pks,estado="espera").update(estado="enviado")
					exito=1
				else:
					exito='-1'
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito=-1
	dato={'resul':exito}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

def mensajees_en_espera_ajax_view(request):#sms
	lista=[]
	if request.is_ajax:
		try:
			sms = Mensajeria_sms.objects.filter(estado="espera")[:1].values('pk','nro_envio','celular','texto')
			for obj in sms:
				aux={}
				aux['id']=obj['pk']
				aux['numero']=obj['celular']
				aux['sms']=obj['texto']
				lista.append(aux)
		except:
			lista=[]
	else:
		lista=[]
	dato={'resul':lista}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearCtaCte_Material_ajax_view(request):
	if request.is_ajax:
		TipoPersona=request.GET.get('tp')
		DniRucCliente= request.GET.get('dni','')
		NombreCliente= request.GET.get('nom')
		A_paternoCliente= request.GET.get('ap')
		A_maternoCliente= request.GET.get('am','')
		MontoApertura= request.GET.get('monto')
		Observacion = request.GET.get('obs','')
		usr=request.user.username
		G= Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
		exito='' 
		if MontoApertura ==''or MontoApertura == None:
			MontoApertura=0
		else:
			MontoApertura = ConvertirDecimal(MontoApertura)

		if TipoPersona ==''or TipoPersona == None:
			TipoPersona='Natural'
		try:
			with transaction.atomic():
				sq= Cliente.objects.filter(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
				if sq.count()==0:
					cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
					cln.save()
					idCliente = str(cln.pk)
				else:
					lista5= list(sq)
					idCliente= str(lista5[0]['pk'])

				O= Oficina.objects.get(pk= C.id_oficina.pk)
				cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
				Ingres= ConvertirDecimal(MontoApertura) 
				Sald= ConvertirDecimal(cons_saldo.saldo_Material)
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
				numeroR = int(Nrecibo.nroRIM)+1
				NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRIM=numeroR)
				Cli= Cliente.objects.get(pk=idCliente)
				saldo= Sald+Ingres
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo)
				debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional="CtaCteMaterial",conceptoDetalle='Apertura de Cuenta Corriente Material de Sr(a) '+NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente,tipoDocumento="R/IM",pesoGramos=Ingres,observaciones2=Observacion,estadoTransaccion="realizado",nroRecibo=numeroR)
				debe.save()
				rctacte= CtaCteMaterial(idCajaDebeMaterial=debe,id_cliente=Cli,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='NO',tipoCuenta='')
				rctacte.save()
				mctacte= CtaCteMovimientosMaterial(id_personal=C.id_usuario, id_ctactematerial=rctacte,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Peso con el que se aperturó la cuenta',tipoDocumento='R/IM',nroRecibo=str(numeroR))
				mctacte.save()
				exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def CrearCtaCte_Material_ajax_operador_view(request):
	if request.is_ajax:
		TipoPersona=request.GET.get('tp')
		DniRucCliente= request.GET.get('dni','')
		NombreCliente= request.GET.get('nom')
		A_paternoCliente= request.GET.get('ap')
		A_maternoCliente= request.GET.get('am','')
		MontoApertura= request.GET.get('monto')
		Observacion = request.GET.get('obs','')
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		exito='' 
		if MontoApertura ==''or MontoApertura == None:
			MontoApertura=0
		else:
			MontoApertura = ConvertirDecimal(MontoApertura)

		if TipoPersona ==''or TipoPersona == None:
			TipoPersona='Natural'
		try:
			with transaction.atomic():
				sq= Cliente.objects.filter(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
				if sq.count()==0:
					cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
					cln.save()
					idCliente = str(cln.pk)
				else:
					lista5= list(sq)
					idCliente= str(lista5[0]['pk'])

				O= Oficina.objects.get(pk= C.id_oficina.pk)
				cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
				Ingres= ConvertirDecimal(MontoApertura) 
				Sald= ConvertirDecimal(cons_saldo.saldo_Material)
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
				numeroR = int(Nrecibo.nroRIM)+1
				NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRIM=numeroR)
				Cli= Cliente.objects.get(pk=idCliente)
				saldo= Sald+Ingres
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo)
				debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional="CtaCteMaterial",conceptoDetalle='Apertura de Cuenta Corriente Material de Sr(a) '+NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente,tipoDocumento="R/IM",pesoGramos=Ingres,observaciones2=Observacion,estadoTransaccion="realizado",nroRecibo=numeroR)
				debe.save()
				rctacte= CtaCteMaterial(idCajaDebeMaterial=debe,id_cliente=Cli,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='NO',tipoCuenta='')
				rctacte.save()
				mctacte= CtaCteMovimientosMaterial(id_personal=C.id_usuario, id_ctactematerial=rctacte,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Peso con el que se aperturó la cuenta',tipoDocumento='R/IM',nroRecibo=str(numeroR))
				mctacte.save()
				exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)

#***************************************************************************************
#***************************************************************************************
@login_required
@transaction.atomic
def ModificarCtaCteEstado_Material_ajax_view(request):
	data=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		estado=request.GET.get('estado','')
		usr=request.user.username
		try:
			with transaction.atomic():
				aux= CtaCteMaterial.objects.filter(pk=IdCtaCte).update(estado=estado)
				data="exito"
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype) 

@login_required
@transaction.atomic
def CtaCteAnularIntereses_Material_ajax_view(request):#encargado de crear cta cte
	data=''
	if request.is_ajax:
		id=0
		deposito=0
		retiro=0
		saldoanterior=0
		IdCtaCte=request.GET.get('idctacte','')
		usr=request.user.username
		try:
			with transaction.atomic():
				consulta1= list(CtaCteMovimientosMaterial.objects.filter(pk=IdCtaCte).values('pk','montoDeposito','montoRetiro'))
				for obj in consulta1:
					id=obj['pk']
					deposito=obj['montoDeposito']
					retiro=obj['montoRetiro']
					consulta2=CtaCteMovimientosMaterial.objects.filter(pk__lt=id,id_ctactematerial=IdCtaCte).values('pk','saldo').order_by('pk').reverse()[:1]
					if consulta2.count()>0:
						saldoanterior=consulta2[0]['saldo']
					else:
						saldoanterior=0
					if deposito=='' or deposito==None:
						deposito=0
					if retiro=='' or retiro==None:
						retiro=0
					nuevosaldo=((float(deposito)-float(retiro))+float(saldoanterior))
					CtaCteMovimientosMaterial.objects.filter(pk= id).update(saldo=nuevosaldo)
				data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def CtaCteDepositar_Material_ajax_view(request):#encargado de crear cta cte
	data=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		montoDeposito=request.GET.get('montodeposito','')
		observaciones=request.GET.get('observaciones','')
		nombre=request.GET.get('nombre','')
		ap=request.GET.get('ap','')
		am=request.GET.get('am','')
		usr=request.user.username
		if montoDeposito ==''or montoDeposito == None:
			montoDeposito=0
		else:
			montoDeposito = ConvertirDecimal(montoDeposito)
		try:
			with transaction.atomic():
				fechaActual_ = time.strftime("%d-%m-%Y")
				C= Cajas.objects.get(id_usuario__usuario=usr)
				Nrecibo= NroReciboCaja.objects.get(id_caja=C.pk)
				numeroR = int(Nrecibo.nroRIM)+1
				NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRIM=numeroR)
				cta= CtaCteMaterial.objects.get(pk=IdCtaCte)
				if cta.saldo>=0:
					debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_caja=C,id_oficina=C.id_oficina,tablaRelacional="CtaCteMovimientosMaterial",conceptoDetalle='Deposito en Cta Cte Material '+IdCtaCte+' - Cliente '+nombre+' '+ap+' '+am,tipoDocumento="R/IM",pesoGramos=montoDeposito,observaciones2='',estadoTransaccion="realizado",nroRecibo=numeroR)
					debe.save()
					mctacte= CtaCteMovimientosMaterial(id_ctactematerial=cta,id_personal=C.id_usuario,montoDeposito=montoDeposito,saldo=(float(cta.saldo)+float(montoDeposito)),observacionesMovimientos=observaciones,tipoDocumento='R/IM',nroRecibo=str(numeroR))
					mctacte.save()
					aux= CtaCteMaterial.objects.filter(pk=IdCtaCte).update(saldo=(float(cta.saldo)+float(montoDeposito)))
				else:
					#sobregiro? pagando intereses?
					ctacte = CtaCteMovimientosMaterial.objects.filter(id_ctactematerial=IdCtaCte).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('pk').reverse()
					montoSobregiroRestante=ctacte[0]['montoSobregiro']
					if montoSobregiroRestante =='' or montoSobregiroRestante == None:
						montoSobregiroRestante=0
					else:
						montoSobregiroRestante=ConvertirDecimal(montoSobregiroRestante)

					saldoUMov=ctacte[0]['saldo']
					sobregiroNro=ctacte[0]['sobregiroNro']
					interesSobregiro=ctacte[0]['interesSobregiro']
					nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']
					if nroDiasSobregiro =='' or nroDiasSobregiro == None:
						nroDiasSobregiro=0
					if interesSobregiro=='' or interesSobregiro==None:
						interesSobregiro=0 
					
					fechaDelSobregiro=ctacte[0]['fechaHora'].strftime("%d-%m-%Y")

					formato_fecha = "%d-%m-%Y"
					fecha_inicial = datetime.datetime.strptime(str(fechaDelSobregiro), formato_fecha)
					fecha_final = datetime.datetime.strptime(str(fechaActual_), formato_fecha)
					diferencia = fecha_final-fecha_inicial

					#calculamos los dias excedidos
					nroDiasExcedidosSobregiro=diferencia.days
					nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro-nroDiasSobregiro
					interesMoraSobregiro=0

					if montoSobregiroRestante>0:
						#print 1
						if nroDiasExcedidosSobregiro>0:
							if (montoSobregiroRestante-montoDeposito)<=0:
								interesMoraSobregiro=montoSobregiroRestante*(interesSobregiro/100)
								interesMoraSobregiro=interesMoraSobregiro*nroDiasExcedidosSobregiro
							else:
								interesMoraSobregiro=montoDeposito*(interesSobregiro/100)
								interesMoraSobregiro=interesMoraSobregiro*nroDiasExcedidosSobregiro
						else:
							nroDiasExcedidosSobregiro=0

						montoSobregiroRestante=montoSobregiroRestante-montoDeposito
						if montoSobregiroRestante<=0:
							montoSobregiroRestante=0
						debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_caja=C,id_oficina=C.id_oficina,tablaRelacional="CtaCteMovimientosMaterial",conceptoDetalle='Deposito en Cta Cte Material '+IdCtaCte+' -Cliente '+nombre+' '+ap+' '+am+' '+', <Pago de Sobregiro>',tipoDocumento="R/IM",pesoGramos=montoDeposito,observaciones2='',estadoTransaccion="realizado",nroRecibo=numeroR)
						debe.save()
						saldoUMovAhora=0
						if (float(saldoUMov)+float(montoDeposito))<=0:
							#saldo (-)
							saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-float(interesMoraSobregiro)
						elif (float(saldoUMov)+float(montoDeposito))>=float(interesMoraSobregiro):
							#saldo (+)
							saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-float(interesMoraSobregiro)
						else:
							saldoUMovAhora=(-1)*(float(interesMoraSobregiro)-(float(saldoUMov)+float(montoDeposito)))
						mctacte= CtaCteMovimientosMaterial(id_ctactematerial=cta,id_personal=C.id_usuario,montoDeposito=montoDeposito,saldo=saldoUMovAhora,sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiroRestante,nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro,interesMoraSobregiro=interesMoraSobregiro,saldoConMoraSobregiro=(float(saldoUMov)-interesMoraSobregiro),observacionesMovimientos=' Pago de Sobregiro: '+observaciones,auxSD=cta.saldo,tipoDocumento='R/IM',nroRecibo=str(numeroR))
						mctacte.save()
						aux= CtaCteMaterial.objects.filter(pk=IdCtaCte).update(saldo=saldoUMovAhora)

					else:
						#print 2
						if nroDiasExcedidosSobregiro>0:
							if (float(saldoUMov)-float(montoDeposito))<=0:
								interesMoraSobregiro=float(saldoUMov)*(float(interesSobregiro)/100)
								interesMoraSobregiro=float(interesMoraSobregiro)*nroDiasExcedidosSobregiro
							else:
								interesMoraSobregiro=float(montoDeposito)*(float(interesSobregiro)/100)
								interesMoraSobregiro=float(interesMoraSobregiro)*nroDiasExcedidosSobregiro
						else:
							nroDiasExcedidosSobregiro=0

						montoSobregiroRestante=0
						debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_caja=C,id_oficina=C.id_oficina,tablaRelacional="CtaCteMovimientosMaterial",conceptoDetalle='Deposito en Cta Cte Material '+IdCtaCte+' - Cliente '+nombre+' '+ap+' '+am+' '+', <Pago de Intereses de Sobregiro>',tipoDocumento="R/IM",pesoGramos=montoDeposito,observaciones2='',estadoTransaccion="realizado",nroRecibo=numeroR)
						debe.save()
						if (float(saldoUMov)+float(montoDeposito))<=0:
							#saldo (-)
							saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-interesMoraSobregiro
						elif (float(saldoUMov)+float(montoDeposito))>=interesMoraSobregiro:
							#saldo (+)
							saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-interesMoraSobregiro
						else:
							saldoUMovAhora=(-1)*(float(interesMoraSobregiro)-(float(saldoUMov)+float(montoDeposito)))						

						mctacte= CtaCteMovimientosMaterial(id_ctactematerial=cta,id_personal=C.id_usuario,montoDeposito=montoDeposito,saldo=saldoUMovAhora,sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiroRestante,nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro,interesMoraSobregiro=interesMoraSobregiro,saldoConMoraSobregiro=(float(saldoUMov)-interesMoraSobregiro),observacionesMovimientos=' Pago de Intereses de Sobregiro: '+observaciones,auxSD=cta.saldo,tipoDocumento='R/IM',nroRecibo=str(numeroR))
						mctacte.save()
						aux= CtaCteMaterial.objects.filter(pk=IdCtaCte).update(saldo=saldoUMovAhora)
				saldom= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				SaldoM= ConvertirDecimal(saldom.saldo_Material)
				saldo=SaldoM+montoDeposito
				SaldoDisponibleCajaMaterial.objects.filter(id_caja= C.pk).update(saldo_Material=saldo)
				data='exito'		
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def CtaCteRetirar_Material_ajax_view(request):
	data=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		montoRetiro=request.GET.get('montoretiro','')
		observaciones=request.GET.get('observaciones','')
		nombre=request.GET.get('nombre','')
		ap=request.GET.get('ap','')
		am=request.GET.get('am','')
		usr=request.user.username
		if montoRetiro ==''or montoRetiro == None:
			montoRetiro=0
		else:
			montoRetiro = ConvertirDecimal(montoRetiro)
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				Nrecibo= NroReciboCaja.objects.get(id_caja=C.pk)
				numeroR = int(Nrecibo.nroREM)+1
				NroReciboCaja.objects.filter(id_caja=C.pk).update(nroREM=numeroR)
				cta= CtaCteMaterial.objects.get(pk=IdCtaCte)
				saldom = SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				SaldoMaterial= ConvertirDecimal(saldom.saldo_Material)
				if (float(cta.saldo)-float(montoRetiro))>=0:
					if SaldoMaterial >= montoRetiro:
						saldoEgreso=SaldoMaterial-montoRetiro
						cajah= TCajaMaterialHaber(id_personal=C.id_usuario,id_caja=C,id_oficina=C.id_oficina,tablaRelacional="CtaCteMovimientosMaterial",conceptoDetalle='Retiro de  Cta Cte Material '+IdCtaCte+' - Cliente: '+nombre+' '+ap+' '+am,tipoDocumento="R/EM",pesoGramos=montoRetiro,observaciones2='',estadoTransaccion="realizado",nroRecibo=numeroR)
						cajah.save()
						mctacte= CtaCteMovimientosMaterial(id_ctactematerial=cta,id_personal=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(cta.saldo)-float(montoRetiro)),observacionesMovimientos=observaciones,tipoDocumento='R/EM',nroRecibo=str(numeroR))
						mctacte.save()
						aux= CtaCteMaterial.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo) - float(montoRetiro)))
						SaldoDisponibleCajaMaterial.objects.filter(id_caja= C.pk).update(saldo_Material=saldoEgreso)
						data='exito'
					else:
						data='saldo insuficiente en la caja'

				else:
					if SaldoMaterial >= montoRetiro:
						saldoEgreso=SaldoMaterial-montoRetiro
						if float(cta.saldo)>=0 and (float(cta.saldo)-float(montoRetiro))<0:
						#sobregiro? pagando intereses?
							ctacte = CtaCteMovimientosMaterial.objects.filter(id_ctactematerial=cta.pk).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro').reverse()[:1]
							sobregiroNro=ctacte[0]['sobregiroNro']
							if sobregiroNro=='' or sobregiroNro==None:
								sobregiroNro=1
							else:
								sobregiroNro=ctacte[0]['sobregiroNro']+1

							montoSobregiro=abs(float(cta.saldo)-float(montoRetiro))
							interesSobregiro=ctacte[0]['interesSobregiro']
							nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']
							cajah= TCajaMaterialHaber(id_personal=C.id_usuario,id_caja=C,id_oficina=C.id_oficina,tablaRelacional="CtaCteMovimientosMaterial",conceptoDetalle='Retiro de  Cta Cte Material '+IdCtaCte+' - Cliente: '+nombre+' '+ap+' '+am+' '+'<Retiro y Sobregiro>',tipoDocumento="R/EM",pesoGramos=montoRetiro,observaciones2='',estadoTransaccion="realizado",nroRecibo=numeroR)
							cajah.save()
							mctacte= CtaCteMovimientosMaterial(id_ctactematerial=cta,id_personal=C.usuario,montoRetiro=montoRetiro,saldo=(float(cta.saldo)-float(montoRetiro)),sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiro,interesSobregiro=interesSobregiro,nroDiasSobregiro=nroDiasSobregiro, observacionesMovimientos='sobregiro. '+observaciones,auxSD=cta.saldo, tipoDocumento='R/EM',nroRecibo=str(numeroR))
							mctacte.save()
							aux= CtaCteMaterial.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo) - float(montoRetiro)))
							SaldoDisponibleCajaMaterial.objects.filter(id_caja= C.pk).update(saldo_Material=saldoEgreso)
							data='exito'
						if float(cta.saldo)<0 and (float(cta.saldo)-float(montoRetiro))<0:
							ctacte = CtaCteMovimientosMaterial.objects.filter(id_ctactematerial=cta.pk).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('pk','sobregiroNro').reverse()[:1]
							montoSobregiroRestante=ctacte[0]['montoSobregiro']
							if montoSobregiroRestante=='' or montoSobregiroRestante==None:
								montoSobregiroRestante=0

							ctacte = CtaCteMovimientosMaterial.objects.filter(id_ctactematerial=cta.pk).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro').reverse()[:1]
							sobregiroNro=ctacte[0]['sobregiroNro']
							interesSobregiro=ctacte[0]['interesSobregiro']
							nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']
							cajah= TCajaMaterialHaber(id_personal=C.id_usuario,id_caja=C,id_oficina=C.id_oficina,tablaRelacional="CtaCteMovimientosMaterial",conceptoDetalle='Retiro de  Cta Cte Material '+IdCtaCte+' - Cliente: '+nombre+' '+ap+' '+am+' '+'<Otro Sobregiro>',tipoDocumento="R/EM",pesoGramos=montoRetiro,observaciones2='',estadoTransaccion="realizado",nroRecibo=numeroR)
							cajah.save()
							mctacte= CtaCteMovimientosMaterial(id_ctactematerial=cta,id_personal=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(cta.saldo)-float(montoRetiro)),sobregiroNro=sobregiroNro,montoSobregiro=float(montoSobregiroRestante)+float(montoRetiro),nroDiasExcedidosSobregiro= 0,interesMoraSobregiro= 0,saldoConMoraSobregiro= 0, observacionesMovimientos='<otro sobregiro seguido>. '+observaciones,auxSD=cta.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR))
							mctacte.save()
							aux= CtaCteMaterial.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo) - float(montoRetiro)))
							SaldoDisponibleCajaMaterial.objects.filter(id_caja= C.pk).update(saldo_Material=saldoEgreso)
							data='exito'
							
					else:
						data='saldo insuficiente en la caja'

		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

#****************************************************************************************
#****************************************************************************************
#cierres material fino

@login_required
def CierreInternoMaterial_view(request):
	return render(request,"CierreCompraMaterial.html" )


@login_required
def CierreInternoVentaMaterial_view(request):
	return render(request,"CierreVentaMaterial.html" )


@login_required
def CuentasClientesCompra_view(request):
	return render(request,"CuentasCierreCompraMaterial.html" )


@login_required
def CuentasClientesVenta_view(request):
	return render(request,"CuentasCierreVentaMaterial.html" )


@login_required
def ConfiguracionDecimalCompraMaterial_view(request):
	return render(request,"ConfiguracionDecimalesCompraMaterial.html" )


@login_required
def ConfiguracionDecimalVentaMaterial_view(request):
	return render(request,"ConfiguracionDecimalesVentaMaterial.html" )

@login_required
def registrarConfiguracionDecimalesCompra_view(request):
	if request.is_ajax: 
		idCierre= request.GET.get('idCierre')
		idCliente= request.GET.get('idCliente')
		configDecimal=request.GET.get('config')
		try:
			with transaction.atomic():
				if not ConfiguracionCompraMaterial.objects.filter(id_cierre_compra_cliente=idCierre,id_cliente=idCliente).exists():
					OCCC=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OC=Cliente.objects.get(pk=idCliente)
					config= ConfiguracionCompraMaterial(id_cierre_compra_cliente=OCCC,id_cliente=OC,configDecimales=str(configDecimal))
					config.save()
					exito='exito'
				else:
					ConfiguracionCompraMaterial.objects.select_for_update().filter(id_cierre_compra_cliente=idCierre,id_cliente=idCliente).update(configDecimales=str(configDecimal))
					exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
def registrarConfiguracionDecimalesCompraGeneral_view(request):
	if request.is_ajax:
		configDecimal=request.GET.get('config')
		try:
			with transaction.atomic():
				ConfiguracionCompraMaterial.objects.select_for_update().all().update(configDecimales=str(configDecimal))
				exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
def eliminarPagoCompra_view(request):
	if request.is_ajax:
		idPago=request.GET.get('idPago')
		try:
			with transaction.atomic():
				ControlPagoCompra.objects.select_for_update().filter(pk=idPago).update(estado='ANULADO')
				exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
def RecuperarCuentasCierreAjax_view(request):
	lista=[]
	if request.is_ajax:
		usr= request.user.username
		Ger = Gerente.objects.get(usuario=usr)
		C = Cajas.objects.get(id_usuario= Ger.id_usuario)
		O=Oficina.objects.get(id_usuario=Ger.id_usuario)  
		try:
			consulta=list(CierreCompraCliente.objects.filter(estado='CONFIRMADO',id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['id_cliente']) 
				aux['pk']=obj['pk']
				aux['pkCierre']=str(OC.pk)
				aux['nombre']=OC.nombre+' '+OC.Apellido_paterno+' '+OC.Apellido_materno
				aux['fechaCierre']=str(obj['fechaCierre'].strftime("%Y-%m-%d"))
				aux['lote']=obj['lote']
				lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def RecuperarCuentasCierreFiltroAjax_view(request):
	lista=[]
	if request.is_ajax:
		parametro=request.GET.get('parametro')
		try:
			consulta=list(Cliente.objects.filter(Q(nombre__icontains=parametro)|Q(Apellido_paterno__icontains=parametro)|Q(Apellido_materno__icontains=parametro)|Q(dni__icontains=parametro)).values('pk','nombre','Apellido_paterno','Apellido_materno')) 
			for obj in consulta:
				consulta1=list(CierreCompraCliente.objects.filter(estado='CONFIRMADO',id_cliente=obj['pk']).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
				for obj1 in consulta1:
					aux={}
					aux['pk']=obj1['pk']
					aux['pkCierre']=str(obj['pk'])
					aux['nombre']=obj['nombre']+' '+obj['Apellido_paterno']+' '+obj['Apellido_materno']
					aux['fechaCierre']=str(obj1['fechaCierre'].strftime("%Y-%m-%d"))
					aux['lote']=obj1['lote']
					lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)



def truncate(f, n):
	cadenaFinal='' 
	index=str(f).find('.')
	if index!=-1:
		cadena=str(f).split('.')
		cadenaFinal=cadena[0]+'.'+cadena[1][:int(n)]
	else:
		cadenaFinal=str(f)

	return cadenaFinal


def f(x,num):
	numbers = [1,2,3,4,5,6,7,8,9]

	if x in numbers:
		d='0.'+num

		for i in xrange(0,len(num)-1):
			zeros=zeros+'0'

		s='0.'+zeros+'1'
		n=float(d)+float(s)
		cadena=str(n).split('.')
		return cadena[1]
	else:
		return num
	


def redondeo(fl, n):
	cadenaFinal='' 
	index=str(fl).find('.')
	if index!=-1:
		if n>0:
			cadena=str(fl).split('.')
			cadenaRedondeo=cadena[1][:(int(n))]
			if len(cadena[1])>=(int(n)+1):
				cadenaFinalRedondeo= str(f(int(cadenaRedondeo[-1:]),cadenaRedondeo))
				cadenaFinal=cadena[0]+'.'+cadenaFinalRedondeo
			else:
				cadenaFinal=cadena[0]+'.'+cadenaRedondeo
		else:
			cadena=str(fl).split('.')
			cadenaRedondeo=cadena[1][:1]
			cadenaFinalRedondeo= str(f(int(cadenaRedondeo[-1:]),cadena[0])) 
			cadenaFinal=cadena[0]+'.'+cadenaRedondeo
	else:
		cadenaFinal=str(fl)

	return cadenaFinal


def f1(x,num):
	
	numbers = [6,7,8,9]
	zeros=''

	if x in numbers:
		d='0.'+num

		for i in xrange(0,len(num)-1):
			zeros=zeros+'0'

		s='0.'+zeros+'1'
		n=float(d)+float(s)
		cadena=str(n).split('.')
		return cadena[1]
	else:
		return num


def redondeo1(fl, n):
	cadenaFinal='' 
	index=str(fl).find('.')
	if index!=-1:
		if n>0:
			cadena=str(fl).split('.')
			cadenaRedondeo=cadena[1][:(int(n))]
			cadenaRedondeoExcedente=cadena[1][:(int(n)+1)]
			if len(cadena[1])>=(int(n)+1):
				cadenaFinalRedondeo= str(f1(int(cadenaRedondeoExcedente[-1:]),cadenaRedondeo))
				cadenaFinal=cadena[0]+'.'+cadenaFinalRedondeo
			else:
				cadenaFinal=cadena[0]+'.'+cadenaRedondeo
		else:
			cadena=str(fl).split('.')
			cadenaRedondeo=cadena[1][:1]
			cadenaFinalRedondeo= str(f1(int(cadenaRedondeo[-1:]),cadena[0])) 
			cadenaFinal=cadena[0]+'.'+cadenaRedondeo
	else:
		cadenaFinal=str(fl)

	return cadenaFinal
 
@login_required
def RecuperarCuentasCierreClienteAjax_view(request):
	lista=[]
	lista1=[]
	listaO=[]
	listaAdelanto=[]
	dato=''
	idCierre=''
	idCliente=''
	cadena=''
	tipoCambio=0

	html_cierres='<thead><tr><td style="text-align: center;">Peso Bruto Inicial</td><td style="text-align: center;">Peso Bruto(Grs)</td><td style="text-align: center;">Merma (%)</td><td style="text-align: center;">Ley (%)</td><td style="text-align: center;">Peso Fino (Grs)</td><td style="text-align: center;">Peso Fino Cierre (Oz) </td></tr></thead>'
	html_cierres1='<thead><tr><td style="text-align: center;">Suma Peso Fino Cierre (Oz)</td><td style="text-align: center;">Acciones</td><td style="text-align: center;">Fecha</td><td style="text-align: center;">Onzas</td><td style="text-align: center;">Precio Onzas</td><td style="text-align: center;">Descuento (%)</td><td style="text-align: center;">P. Con Descuento</td><td style="text-align: center;">Total</td></tr></thead>'
	html_cierres2='<thead><tr><td style="text-align: center;"></td><td style="text-align: center;"></td><td style="text-align: center;"></td><td style="text-align: center;">Fecha</td><td style="text-align: center;">Monto Dolares</td><td style="text-align: center;">Tipo de Cambio</td><td style="text-align: center;">Moneda</td><td style="text-align: center;">Monto Pagado</td><td style="text-align: center;">Saldo a Pagar US$</td><td style="text-align: center;">Observaciones</td></tr></thead>'

	#variables
	PesoBrutoInicial=0
	PesoBrutoGrs=0
	Merma=0
	PesoFinoCierreGrs=0
	PesoFinoCierreOnza=0
	Precio=0
	PesoFinoGrs=0
	PrecioOnzaCierre=0
	Descuento=0
	DescuentoCompra=0
	ImporteCompraUS=0
	NetoAPagar=0
	Ley=0
	PrecioOnza=0
	tipoO=''

	SumaPesoBrutoInicial=0
	SumaPesoBrutoGrs=0
	SumaMerma=0
	SumaLey=0
	SumaPesoFinoCierreGrs=0
	SumaPesoFinoCierreOnza=0
	SumaPesoFinoGrs=0
	SumaPrecioDolaresOnza=0
	SumaDescuentoCompra=0
	SumaPrecioGramo=0
	SumaNetoAPagarDolares=0
	SumaPagoCuenta=0
	SumaAdelanto=0
	IndicePromedio=0
	IndiceLey=0
	IndiceMerma=0
	IndiceDescuento=0
	IndicePrecioUSOZ=0

	if request.is_ajax:
		tipoOperacion=request.GET.get('tipo')
		idCC=request.GET.get('idCC')
		result=idCC.split('_')
		i=0
		for o in result:
			if i==0:
				idCliente=o
			else:
				idCierre=o
			i=i+1

		
		if idCierre!='' and idCliente!='':

			OCCC=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)

			if OCCC.tipoCambio!=None and OCCC.tipoCambio!='':
				tipoCambio=OCCC.tipoCambio
			else:
				tipoCambio=0

			consulta=list(BarrasCompraMaterial.objects.filter(id_cliente=idCliente,id_cierre_compra_cliente=idCierre).values('pk','fechaCierre','cantidadInicial','cantidad','cantidadCierre','precio','descuento','ley','observaciones','id_cliente'))
			consulta1=list(CuentaXPagarCierreCompraMaterial.objects.filter(id_cliente=idCliente,id_cierre_compra_cliente=idCierre).values('pk'))
			

			if ConfiguracionCompraMaterial.objects.filter(id_cierre_compra_cliente=idCierre,id_cliente=idCliente).exists():
				OConfig=ConfiguracionCompraMaterial.objects.get(id_cierre_compra_cliente=idCierre,id_cliente=idCliente)
				cadena=str(OConfig.configDecimales)
				lista1.append(cadena)
			else:
				cadena=str('2/2/2/2/2/2/2/2/2/2/2/2/2/2/2')
				lista1.append(cadena)

			configDec=cadena.split('/')

			IndicePromedio=len(consulta)

			for obj in consulta:
				html_cierres=html_cierres+'<tr class="even warning">'

				html_cierres=html_cierres+'<td><span class="editable editable-click" style="display: inline;" id="'+str(obj['pk'])+'">'+str(truncate(obj['cantidadInicial'],configDec[0]))+'</span></td>'
				
				SumaPesoBrutoInicial=SumaPesoBrutoInicial+ConvertirDecimal(truncate(obj['cantidadInicial'],configDec[0]))
				
				html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(truncate(obj['cantidad'],configDec[1]))+'</span></td>'
				
				SumaPesoBrutoGrs=SumaPesoBrutoGrs+ConvertirDecimal(truncate(obj['cantidad'],configDec[1]))

				if obj['cantidadInicial']>0:
					html_cierres=html_cierres+'<td>'+str(truncate(100-(ConvertirDecimal(truncate(obj['cantidad'],configDec[1]))*100)/obj['cantidadInicial'],configDec[2]))+'</td>'
					SumaMerma=SumaMerma+(100-(ConvertirDecimal(truncate(obj['cantidad'],configDec[1]))*100)/ConvertirDecimal(truncate(obj['cantidadInicial'],configDec[0])))
				else:
					html_cierres=html_cierres+'<td>'+str(truncate(0,configDec[2]))+'</td>'
					SumaMerma=SumaMerma+0

			 
				if ConvertirDecimal(obj['cantidad'])>0 or ConvertirDecimal(obj['cantidadInicial'])>0:
					IndiceMerma=IndiceMerma+1


				SumaLey=SumaLey+ConvertirDecimal(truncate(obj['ley'],configDec[3]))
				
				if ConvertirDecimal(truncate(obj['ley'],configDec[3]))>0:
					IndiceLey=IndiceLey+1


				html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(truncate(obj['ley'],configDec[3]))+'</span></td>'
				html_cierres =html_cierres+ '<td>'+str(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))+'</td>'

				SumaPesoFinoGrs=SumaPesoFinoGrs+((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])))

				#html_cierres =html_cierres+ '<td><span class="editable editable-click fecha" id="tbfecha" data-type="date" data-format="YYYY-MM-DD" data-viewformat="YYYY-MM-DD" style="display: inline;">'+str(obj['fechaCierre'].strftime("%Y-%m-%d"))+'</span></td>'
				#html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(truncate(obj['cantidadCierre'],configDec[5]))+'</span></td>'
				
				#SumaPesoFinoCierreGrs=SumaPesoFinoCierreGrs+ConvertirDecimal(truncate(obj['cantidadCierre'],configDec[5]))

				#html_cierres =html_cierres+ '<td>'+str(redondeo1(ConvertirDecimal(redondeo1(obj['cantidadCierre'],configDec[5]))/ConvertirDecimal(31.1035),configDec[6]))+'</td>'
				if tipoOperacion==2 or tipoOperacion=='2':
					CierreCompraCliente.objects.select_for_update().filter(id=OCCC.pk).update(tipo='2')
					html_cierres=html_cierres+'<td>'+str(redondeo1(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))+'</td>'
					html_cierres =html_cierres+ '<td class="hidden">'+str(obj['pk'])+'</td>'
					SumaPesoFinoCierreOnza=SumaPesoFinoCierreOnza+ConvertirDecimal(redondeo1(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))
					html_cierres =html_cierres+ '</tr>'
					tipoO='2'
				else:
					if tipoOperacion==1 or tipoOperacion=='1':
						CierreCompraCliente.objects.select_for_update().filter(id=OCCC.pk).update(tipo='1')
						html_cierres=html_cierres+'<td>'+str(truncate(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))+'</td>'
						html_cierres =html_cierres+ '<td class="hidden">'+str(obj['pk'])+'</td>'
						SumaPesoFinoCierreOnza=SumaPesoFinoCierreOnza+ConvertirDecimal(truncate(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))
						html_cierres =html_cierres+ '</tr>'
						tipoO='1'
					else:
						if OCCC.tipo=='' or OCCC.tipo==None:
							CierreCompraCliente.objects.select_for_update().filter(id=OCCC.pk).update(tipo='1')
							html_cierres=html_cierres+'<td>'+str(truncate(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))+'</td>'
							html_cierres =html_cierres+ '<td class="hidden">'+str(obj['pk'])+'</td>'
							SumaPesoFinoCierreOnza=SumaPesoFinoCierreOnza+ConvertirDecimal(truncate(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))
							html_cierres =html_cierres+ '</tr>'
							tipoO='1'
						else:
							if OCCC.tipo=='1' or OCCC.tipo==1:
								CierreCompraCliente.objects.select_for_update().filter(id=OCCC.pk).update(tipo='1')
								html_cierres=html_cierres+'<td>'+str(truncate(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))+'</td>'
								html_cierres =html_cierres+ '<td class="hidden">'+str(obj['pk'])+'</td>'
								SumaPesoFinoCierreOnza=SumaPesoFinoCierreOnza+ConvertirDecimal(truncate(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))
								html_cierres =html_cierres+ '</tr>'
							else:
								CierreCompraCliente.objects.select_for_update().filter(id=OCCC.pk).update(tipo='2')
								html_cierres=html_cierres+'<td>'+str(redondeo1(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))+'</td>'
								html_cierres =html_cierres+ '<td class="hidden">'+str(obj['pk'])+'</td>'
								SumaPesoFinoCierreOnza=SumaPesoFinoCierreOnza+ConvertirDecimal(redondeo1(ConvertirDecimal(truncate((ConvertirDecimal(truncate(obj['ley'],configDec[3]))/100)*ConvertirDecimal(truncate(obj['cantidad'],configDec[1])),configDec[4]))/31.1035,configDec[5]))
								html_cierres =html_cierres+ '</tr>'

							tipoO=str(OCCC.tipo)


			#-------------- PROMEDIOS
			if IndicePromedio<=0:
				IndicePromedio=1
			
			html_cierres=html_cierres+'<tr class="even warning">'
			html_cierres=html_cierres+'<td><strong> Promedios</strong></td>'
			html_cierres=html_cierres+'<td></td>'
			if IndiceMerma>0:
				html_cierres=html_cierres+'<td>'+str('%.*f' % (int(configDec[2]),SumaMerma/IndiceMerma))+'</td>'
			else:
				html_cierres=html_cierres+'<td>0</td>'

			if IndiceLey>0:
				html_cierres=html_cierres+'<td>'+str('%.*f' % (int(configDec[3]),SumaLey/IndiceLey))+'</td>'
			else:
				html_cierres=html_cierres+'<td>0</td>'

			html_cierres=html_cierres+'<td></td>'
			html_cierres=html_cierres+'<td></td>'
			html_cierres=html_cierres+ '</tr>'

			html_cierres =html_cierres+ '<tr class="even warning">'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[0]),SumaPesoBrutoInicial))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[1]),SumaPesoBrutoGrs))+'</td>'
			html_cierres =html_cierres+'<td>'+str('%.*f' % (int(configDec[2]),SumaMerma))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[3]),SumaLey))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[4]),SumaPesoFinoGrs))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[5]),SumaPesoFinoCierreOnza))+'</td>'
			html_cierres =html_cierres+ '</tr>'
			lista.append(html_cierres)



			html_cierres1=html_cierres1+'<tr class="even warning">'
			html_cierres1=html_cierres1+'<td><span>'+str('%.*f' % (int(configDec[6]),SumaPesoFinoCierreOnza))+'</span></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td><button type="button" id="idNuevaFila" class="btn btn-success btn-sm aceptar1"><i class="fa fa-plus"></i> Agregar Fila</button></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+ '</tr>'

			sumaOnzas=0
			contador=0
			sumaTotalOz=0

			consultaBarraDivision=list(BarrasDivision.objects.filter(id_cliente=idCliente,id_cierre_compra_cliente=idCierre).values('pk','fecha','onzas','precioOnzas','descuento'))
			 
			for obj in consultaBarraDivision:
				html_cierres1=html_cierres1+'<tr class="even warning">' 
				html_cierres1=html_cierres1+'<td><span></span></td>'
				html_cierres1=html_cierres1+'<td><span><button type="button" id="idEliminarFila" class="btn btn-sm btn-danger eliminarFila"><i class="fa fa-times"></i> Eliminar</button></span></td>'
				html_cierres1=html_cierres1+'<td><span class="editable editable-click fecha" id="tbfecha" data-type="date" data-format="YYYY-MM-DD" data-viewformat="YYYY-MM-DD" style="display: inline;">'+str(obj['fecha'].strftime("%Y-%m-%d"))+'</span></td>'
				  
				html_cierres1=html_cierres1+'<td><input class="clickedit oz" type="text" value="'+str(truncate(obj['onzas'],2))+'"/></td>'
				html_cierres1=html_cierres1+'<td><input class="clickedit poz" type="text" value="'+str(truncate(obj['precioOnzas'],2))+'"/></td>'
				html_cierres1=html_cierres1+'<td><input class="clickedit desc" type="text" value="'+str(truncate(obj['descuento'],2))+'"/></td>'
				desc=ConvertirDecimal(truncate(obj['precioOnzas'],2))*(ConvertirDecimal(obj['descuento'])/100)
				precioCD=ConvertirDecimal(truncate(obj['precioOnzas'],2))-desc
				total=ConvertirDecimal(truncate(precioCD,2))*ConvertirDecimal(truncate(obj['onzas'],2))
				html_cierres1=html_cierres1+'<td><span class="spanPCD">'+str(truncate(precioCD,2))+'</span></td>'
				html_cierres1=html_cierres1+'<td><span class="spanTotal">'+str(truncate(total,2))+'</span></td>'
				html_cierres1=html_cierres1+'<td hidden><span class="spanId">'+str(obj['pk'])+'</span></td>'
				html_cierres1=html_cierres1+ '</tr>'
				sumaOnzas=sumaOnzas+ConvertirDecimal(truncate(obj['onzas'],2))
				contador=contador+1
				sumaTotalOz=sumaTotalOz+ConvertirDecimal(truncate(total,2))
			 

			html_cierres1=html_cierres1+'<tr class="even warning">'
			html_cierres1=html_cierres1+'<td></td>'
			if sumaOnzas>SumaPesoFinoCierreOnza:
				html_cierres1=html_cierres1+'<td class="text-danger">Suma Excedente :</td>'
				html_cierres1=html_cierres1+'<td class="text-danger">'+str(round(SumaPesoFinoCierreOnza-sumaOnzas,2))+'</td>'
			else:
				html_cierres1=html_cierres1+'<td></td>'
				html_cierres1=html_cierres1+'<td></td>'
			 
			html_cierres1=html_cierres1+'<td>'+str(truncate(sumaOnzas,2))+'</td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td></td>'
			html_cierres1=html_cierres1+'<td>'+str(truncate(sumaTotalOz,2))+'</td>'
			html_cierres1=html_cierres1+'</tr>'

			listaO.append(html_cierres1)


			html_cierres2=html_cierres2+'<tr class="even warning">'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td><button type="button" id="idNuevoPago" class="btn btn-sm btn-success aceptar1"><i class="fa fa-plus"></i> Nuevo Pago</button></td>'
			html_cierres2=html_cierres2+'<td>'+str(truncate(sumaTotalOz,2))+'</td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'</tr>'
			SumaAdelanto=sumaTotalOz

			for obj1 in consulta1:
				consulta2= ControlPagoCompra.objects.filter(id_cuentaxpagar=obj1['pk'],estado='CONFIRMADO').values('pk','fechaEmision','montoPagado','docReferencia','moneda','observaciones','tipoCambio')
				for obj2 in consulta2:
					SumaAdelantoDolares=ConvertirDecimal(obj2['montoPagado'])/ConvertirDecimal(obj2['tipoCambio'])
					SumaAPagar=SumaAdelanto-SumaAdelantoDolares

					if(obj2['moneda']=="dolares"):
						html_cierres2=html_cierres2+'<tr class="even success">'
						SumaPagoCuenta=SumaPagoCuenta+ConvertirDecimal(obj2['montoPagado'])*ConvertirDecimal(tipoCambio)
					else:
						html_cierres2=html_cierres2+'<tr class="even info">'
						SumaPagoCuenta=SumaPagoCuenta+ConvertirDecimal(obj2['montoPagado'])

					if obj2['docReferencia']=='NOCAJA':
						html_cierres2=html_cierres2+'<td><button type="button" class="btn btn-sm enviar btn-success btn-icon-text waves-effect" data-value="'+str(obj2['pk'])+'"><i class="fa fa-mail-forward"></i> Enviar a Caja</button></td>'
					else:
						html_cierres2=html_cierres2+'<td></td>'

					html_cierres2=html_cierres2+'<td><button type="button" class="btn imprimir btn-sm btn-inverse btn-icon-text waves-effect" data-value="'+str(obj2['pk'])+'"><i class="fa fa-print"></i> Imprimir</button></td>'
					html_cierres2=html_cierres2+'<td><button type="button" class="btn eliminar btn-sm btn-danger btn-icon-text waves-effect" data-value="'+str(obj2['pk'])+'"><i class="fa fa-times"></i> Eliminar</button></td>'
					html_cierres2=html_cierres2+'<td><span class="editable editable-click tbfecha" id="tbfecha" data-type="date" data-format="YYYY-MM-DD" data-viewformat="YYYY-MM-DD"  style="display: inline;">'+str(obj2['fechaEmision'].strftime("%Y-%m-%d"))+'<span></td>'
					html_cierres2=html_cierres2+'<td>($)'+str('%.*f' % (int(configDec[10]),SumaAdelantoDolares))+'</td>'
					html_cierres2=html_cierres2+'<td><span class="editable editable-click" id="tbObservaciones" style="display: inline;">'+str(obj2['tipoCambio'])+'</span></td>'
					html_cierres2=html_cierres2+'<td>'+obj2['moneda']+'</td>'
					html_cierres2=html_cierres2+'<td><span class="editable editable-click" id="tbtipocambio" style="display: inline;">'+str('%.*f' % (int(configDec[13]),obj2['montoPagado']))+'</span></td>'
					html_cierres2=html_cierres2+'<td>'+str('%.*f' % (int(configDec[14]),SumaAPagar))+'</td>'
					SumaAdelanto=SumaAdelanto-SumaAdelantoDolares
					html_cierres2=html_cierres2+'<td><span class="editable editable-click" id="tbObservaciones" style="display: inline;">'+obj2['observaciones']+'</span></td>' 
					html_cierres2=html_cierres2+'</tr>'


			html_cierres2=html_cierres2+'<tr class="even warning">'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'<td>'+str(truncate(SumaAdelanto,2))+'</td>'
			html_cierres2=html_cierres2+'<td></td>'
			html_cierres2=html_cierres2+'</tr>'


			listaAdelanto.append(html_cierres2)


		dato={'lista':lista,'lista1':lista1,'listaAdelanto':listaAdelanto,'listaO':listaO,'tipoCambio':str(tipoCambio),'tipoOperacion':str(tipoO),'sumaTotal':str('%.*f' % (int(configDec[6]),SumaPesoFinoCierreOnza))}
	else:
		dato='fail'+str(sys.exc_info()[1])
	 
	data= json.dumps(dato)

	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def CierreInternoMaterialAjax_view(request):
	lista=[]
	if request.is_ajax:
		try:
			consulta=list(Cliente.objects.filter(tablaRelacional='TCCM').values('pk','nombre','Apellido_paterno','Apellido_materno')[:10])
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['pk'])
				if CierreCompraCliente.objects.filter(id_cliente=OC,estado='PENDIENTE').exists():
					consulta1=list(CierreCompraCliente.objects.filter(id_cliente=OC,estado='PENDIENTE').values('pk'))
					aux['pk']=obj['pk']
					aux['pkCierre']=consulta1[0]['pk']
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
				else:
					aux['pk']=obj['pk']
					aux['pkCierre']='-1'
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
			 
			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)




@login_required
def registrarCierreCompraClienteGerente_view(request):
	exito=''
	exito1=''
	saldoTotal=0
	if request.is_ajax:
		idCierre=request.GET.get('idCierre')
		idBarra=request.GET.get('idBarra')
		fecha= request.GET.get('fecha')
		cantidad= request.GET.get('cantidad')
		precio= request.GET.get('precio')
		ley= request.GET.get('ley')
		descuento= request.GET.get('descuento')
		observaciones = request.GET.get('obs')
		idCliente= request.GET.get('idCliente')
		usr = request.user.username
		Ger = Gerente.objects.get(usuario=usr)
		C = Cajas.objects.get(id_usuario= Ger.id_usuario)
		O=Oficina.objects.get(id_usuario=Ger.id_usuario)  

		try:
			OCliente=Cliente.objects.get(pk=idCliente)
			ci=ConvertirDecimal(cantidad)
			c=ConvertirDecimal(cantidad)-ConvertirDecimal(descuento)
			with transaction.atomic():
				if idCierre=='' or idCierre==None or idCierre=='-1' or idCierre==-1:
					CCC= CierreCompraCliente(fechaCierre=fecha,estado='PENDIENTE',nroBarras=0,id_cliente=OCliente,id_caja=C,id_oficina=O)
					CCC.save()
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BCM=BarrasCompraMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,estado='PENDIENTE',observaciones=observaciones,id_cliente=OCliente,id_cierre_compra_cliente=CCC)
						BCM.save()

						SCI=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=CCC).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXPagarCierreCompraMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXP=CuentaXPagarCierreCompraMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
							else:
								CXP=CuentaXPagarCierreCompraMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
						else:
							CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).update(monto=SCI['total'],saldo=SCI['total'])

						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasCompraMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BCM.pk)
						exito=str(CCC.pk)
				else:
					CCC=CierreCompraCliente.objects.get(pk=idCierre)
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BCM=BarrasCompraMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones,estado='PENDIENTE',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
						BCM.save()
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasCompraMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						SCI=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=CCC).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXPagarCierreCompraMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXP=CuentaXPagarCierreCompraMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
							else:
								CXP=CuentaXPagarCierreCompraMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
						else:
							CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).update(monto=SCI['total'],saldo=SCI['total'])

						exito1=str(BCM.pk)
						exito=str(CCC.pk)
					else:
						BarrasCompraMaterial.objects.select_for_update().filter(pk=idBarra,id_cliente=idCliente,id_cierre_compra_cliente=idCierre).update(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones)
						BCM=BarrasCompraMaterial.objects.get(pk=idBarra,id_cliente=idCliente,id_cierre_compra_cliente=idCierre)
						SCI=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=CCC).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))
						CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).update(monto=SCI['total'],saldo=SCI['total'])
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasCompraMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BCM.pk)
						exito=str(CCC.pk)


		except IntegrityError:
			exito='fail1'+ str(sys.exc_info()[1])
			exito1='fail1'+ str(sys.exc_info()[1])
			saldoTotal=str(0)
		except:
			exito='fail2'+ str(sys.exc_info()[1])
			exito1='fail2'+str(sys.exc_info()[1])
			saldoTotal=str(0)

	else:
		exito='fail3'+ str(sys.exc_info()[1])
		exito1='fail3'
		saldoTotal=str(0)

	dato={'exito':exito,'exito1':exito1,'saldoMaterial':saldoTotal}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def registrarCierreCompraMaterial_view(request):
	if request.is_ajax:
		nombreLote=''
		idCierre=request.GET.get('idCierre')
		idCliente=request.GET.get('idCliente')
		fecha= request.GET.get('fechaCierre')
		cantidad= request.GET.get('cantidad')
		saldo= request.GET.get('saldo')
		nroBarras= request.GET.get('nroBarras')
		usr = request.user.username
		Ger = Gerente.objects.get(usuario=usr)
		C = Cajas.objects.get(id_usuario= Ger.id_usuario)
		O=Oficina.objects.get(id_usuario=Ger.id_usuario)  
		try:
			OCliente=Cliente.objects.get(pk=idCliente)
			CCC=CierreCompraCliente.objects.get(pk=idCierre)
			ORecibo=NroReciboCaja.objects.get(id_oficina=O.pk,id_caja=C.pk)
			OLote=NroLoteOficina.objects.get(id_nroRecibo=ORecibo.pk) 
			nroL=OLote.nroLote+1
			NroLoteOficina.objects.select_for_update().filter(id_nroRecibo=ORecibo.pk).update(nroLote=nroL)
			nombreLote='LOTE '+ str(nroL) 

			with transaction.atomic():
				STB=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=idCierre,estado='PENDIENTE').aggregate(Count('pk'))
				nroFilas=STB['pk__count']
				CierreCompraCliente.objects.select_for_update().filter(pk=idCierre).update(lote=nombreLote,nroBarras=nroBarras,saldo=saldo,fechaCierre=fecha,estado='CONFIRMADO')
				BarrasCompraMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_compra_cliente=idCierre).update(estado='CONFIRMADO',descuento=0)
				if nroBarras>nroFilas:
					cantidadFilas=int(nroBarras)-int(nroFilas)
					for i in range(cantidadFilas):
						BCM=BarrasCompraMaterial(fechaCierre=fecha, cantidadInicial=0,cantidadCierre=0, cantidad=0,precio=0,ley=0,descuento=0,observaciones='',estado='CERRADO',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
						BCM.save()

					exito='exito'
				else:
					exito='exito1'

				cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
				Ingres= ConvertirDecimal(saldo) 
				Sald= ConvertirDecimal(cons_saldo.saldo_Material)
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
				numeroR = int(Nrecibo.nroRIM)+1
				NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRIM=numeroR)
				saldo_= Sald+Ingres
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
				debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='CompraMaterial',conceptoDetalle='Compra Material de Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/IM',pesoGramos=Ingres,estadoTransaccion='realizado',nroRecibo=numeroR)
				debe.save()
				config= ConfiguracionCompraMaterial(id_cierre_compra_cliente=CCC,id_cliente=OCliente,configDecimales=str('2/2/2/2/2/2/2/2/2/2/2/2/2/2/2'))
				config.save()

		except IntegrityError:
			exito='fail'+ str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def ActualizarAnuladoCierre_view(request):
	exito=''
	if request.is_ajax:
		try:
			nombreLote=''
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)
			with transaction.atomic():
				if CierreCompraCliente.objects.filter(pk=idCierre,id_cliente=idCliente).exists():
					sq1=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXPagarCierreCompraMaterial.objects.get(id_cierre_compra_cliente=sq1.pk)
					if not ControlPagoCompra.objects.filter(id_cuentaxpagar=sq2.pk,estado='CONFIRMADO').exists():
						CierreCompraCliente.objects.select_for_update().filter(pk=idCierre).update(estado='ANULADO')
						BarrasCompraMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_compra_cliente=idCierre).update(estado='ANULADO')
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
						numeroR = int(Nrecibo.nroREM)+1
						NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroREM=numeroR)
						saldo=ConvertirDecimal(sq1.saldo)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						Sald=ConvertirDecimal(cons_saldo.saldo_Material)
						saldo_= Sald-saldo
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
						haber= TCajaMaterialHaber(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='EgresoMaterial',conceptoDetalle='Anulacion de Cierre Material de Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/EM',pesoGramos=saldo,estadoTransaccion='ANULADO',nroRecibo=numeroR)
						haber.save()
						exito='exito'
					else:
						exito='No se puede eliminar el cierre porque existen pagos adelantados'
				else:
					exito='fail'		
				 
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])

	else:
		exito='fail'+str(sys.exc_info()[1])

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def InsertarControlPago_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:

			idPago=request.GET.get('idPago')
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			monto=request.GET.get('monto')
			fecha=request.GET.get('fecha')
			if fecha!='' and fecha!=None:
				fecha1= datetime.strptime(fecha, '%Y-%m-%d')
			else:
				fecha1=datetime.now().strftime("%Y-%m-%d")

			montoTotalCuenta=request.GET.get('montoTotalCuenta')
			moneda=request.GET.get('moneda')
			tipoCambio=request.GET.get('tipoCambio')
			observaciones=request.GET.get('observaciones')
			 

			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)

			with transaction.atomic():
				if idPago=='-1' or idPago==-1:
					sq1=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXPagarCierreCompraMaterial.objects.get(id_cierre_compra_cliente=sq1.pk)
					OCP=ControlPagoCompra(montoPagado=ConvertirDecimal(monto),docReferencia='NOCAJA',moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones,id_personal=C.id_usuario,id_cuentaxpagar=sq2)
					OCP.save()
					SCP=ControlPagoCompra.objects.filter(id_cuentaxpagar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					exito=str(OCP.pk)
				else:
					sq1=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXPagarCierreCompraMaterial.objects.get(id_cierre_compra_cliente=sq1.pk)
					SCP=ControlPagoCompra.objects.filter(id_cuentaxpagar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					ControlPagoCompra.objects.select_for_update().filter(pk=idPago).update(fechaEmision=fecha1, montoPagado=ConvertirDecimal(monto),moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones)
					OCP=ControlPagoCompra.objects.get(pk=idPago)
					exito=str(OCP.pk)	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def ActualizarBarraCompra_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idBarra=request.GET.get('idBarraCompra')
			cantidadInicial=request.GET.get('cantidadInicial')

			if cantidadInicial==None or cantidadInicial=='':
				cantidadInicial=0

			cantidad=request.GET.get('cantidad')

			if cantidad==None or cantidad=='':
				cantidad=0

			cantidadCierre=request.GET.get('cantidadCierre')

			if cantidadCierre==None or cantidadCierre=='':
				cantidadCierre=0


			fecha=request.GET.get('fechaCierre')
			if fecha!='' and fecha!=None:
				fecha1= datetime.strptime(fecha, '%Y-%m-%d')
			else:
				fecha1=datetime.now().strftime("%Y-%m-%d")



			precio=request.GET.get('precio')

			if precio==None or precio=='':
				precio=0

			ley=request.GET.get('ley')

			if ley==None or ley=='':
				ley=0

			descuento=request.GET.get('descuento')
			 
			if descuento==0 or descuento=='':
				descuento=0

			with transaction.atomic():
				BarrasCompraMaterial.objects.select_for_update().filter(pk=idBarra).update(cantidadInicial=cantidadInicial,cantidad=cantidad,cantidadCierre=cantidadCierre,fechaCierre=fecha1, precio=ConvertirDecimal(precio),ley=ley,descuento=descuento)
				exito='exito'	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def ActualizarTipoCambio_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			tipoCambio=request.GET.get('tipoCambio')

			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)

			with transaction.atomic():
				CierreCompraCliente.objects.select_for_update().filter(pk=idCierre,id_cliente=idCliente).update(tipoCambio=tipoCambio)
				exito='exito'	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def registrarMovimientoCaja_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idPago=request.GET.get('idPago')
			cierreDetalle=request.GET.get('cierreDetalle')
			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)

			with transaction.atomic():
				CPC=ControlPagoCompra.objects.get(pk=idPago)
				if ControlPagoCompra.objects.filter(pk=idPago,docReferencia='NOCAJA').exists():
					ControlPagoCompra.objects.select_for_update().filter(pk=idPago,docReferencia='NOCAJA').update(docReferencia='CAJA')
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
					numeroRE=int(Nrecibo.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRE=numeroRE)
					saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
					
					if CPC.moneda=='soles':
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(ConvertirDecimal(saldosoles)-ConvertirDecimal(CPC.montoPagado)))
					else:
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(ConvertirDecimal(saldodolares)-ConvertirDecimal(CPC.montoPagado))) 
					
					Chaber=TCajaHaber(id_personal=C.id_usuario,tablaRelacional="TOtroEgreso",conceptoDetalle="Pago por Compra de Material de Cierre "+cierreDetalle,tipoDocumento="R/E",cantidadDinero=CPC.montoPagado,moneda=CPC.moneda,estadoTransaccion="realizado",nroRecibo=numeroRE,id_oficina=O,id_caja=C)
					Chaber.save()
					exito='exito'
				else:
					exito='fail'
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)









@login_required
def registrarCierreVentaClienteGerente_view(request):
	exito=''
	exito1=''
	saldoTotal=0
	if request.is_ajax:
		idCierre=request.GET.get('idCierre')
		idBarra=request.GET.get('idBarra')
		fecha= request.GET.get('fecha')
		cantidad= request.GET.get('cantidad')
		precio= request.GET.get('precio')
		ley= request.GET.get('ley')
		descuento= request.GET.get('descuento')
		observaciones = request.GET.get('obs')
		idCliente= request.GET.get('idCliente')
		usr = request.user.username
		Ger = Gerente.objects.get(usuario=usr)
		C = Cajas.objects.get(id_usuario= Ger.id_usuario)
		O=Oficina.objects.get(id_usuario=Ger.id_usuario)  

		try:
			OCliente=Cliente.objects.get(pk=idCliente)
			ci=ConvertirDecimal(cantidad)
			c=ConvertirDecimal(cantidad)-ConvertirDecimal(descuento)
			with transaction.atomic():
				if idCierre=='' or idCierre==None or idCierre=='-1' or idCierre==-1:
					CCV= CierreVentaCliente(fechaCierre=fecha,estado='PENDIENTE',nroBarras=0,id_cliente=OCliente,id_caja=C,id_oficina=O)
					CCV.save()
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BVM=BarrasVentaMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,estado='PENDIENTE',observaciones=observaciones,id_cliente=OCliente,id_cierre_venta_cliente=CCV)
						BVM.save()

						SCI=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=CCV).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXCobrarCierreVentaMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXC=CuentaXCobrarCierreVentaMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
								CXC.save()
							else:
								CXC=CuentaXCobrarCierreVentaMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCV)
								CXC.save()
						else:
							CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCV.pk).update(monto=SCI['total'],saldo=SCI['total'])

						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasVentaMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BVM.pk)
						exito=str(CCV.pk)
				else:
					CCV=CierreVentaCliente.objects.get(pk=idCierre)
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BVM=BarrasVentaMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones,estado='PENDIENTE',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
						BVM.save()
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasVentaMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						SCI=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=CCV).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXCobrarCierreVentaMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXC=CuentaXCobrarCierreVentaMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
								CXC.save()
							else:
								CXC=CuentaXCobrarCierreVentaMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
								CXC.save()
						else:
							CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).update(monto=SCI['total'],saldo=SCI['total'])

						exito1=str(BVM.pk)
						exito=str(CCV.pk)
					else:
						BarrasVentaMaterial.objects.select_for_update().filter(pk=idBarra,id_cliente=idCliente,id_cierre_venta_cliente=idCierre).update(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones)
						BVM=BarrasVentaMaterial.objects.get(pk=idBarra,id_cliente=idCliente,id_cierre_venta_cliente=idCierre)
						SCI=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=CCV).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))
						CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).update(monto=SCI['total'],saldo=SCI['total'])
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasVentaMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BVM.pk)
						exito=str(CCV.pk)


		except IntegrityError:
			exito='fail1'#+ str(sys.exc_info()[1])
			exito1='fail1'#+ str(sys.exc_info()[1])
			saldoTotal=str(0)
		except:
			exito='fail2'#+ str(sys.exc_info()[1])
			exito1='fail2'#+str(sys.exc_info()[1])
			saldoTotal=str(0)

	else:
		exito='fail3'#+ str(sys.exc_info()[1])
		exito1='fail3'
		saldoTotal=str(0)

	dato={'exito':exito,'exito1':exito1,'saldoMaterial':saldoTotal}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def registrarCierreVentaMaterial_view(request):
	if request.is_ajax:
		nombreLote=''
		idCierre=request.GET.get('idCierre')
		idCliente=request.GET.get('idCliente')
		fecha= request.GET.get('fechaCierre')
		cantidad= request.GET.get('cantidad')
		saldo= request.GET.get('saldo')
		nroBarras= request.GET.get('nroBarras')
		usr = request.user.username
		Ger = Gerente.objects.get(usuario=usr)
		C = Cajas.objects.get(id_usuario= Ger.id_usuario)
		O=Oficina.objects.get(id_usuario=Ger.id_usuario)  
		try:
			cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			Sald= ConvertirDecimal(cons_saldo.saldo_Material)
			Egreso= ConvertirDecimal(saldo) 
			if Sald>=Egreso:
				OCliente=Cliente.objects.get(pk=idCliente)
				CCV=CierreVentaCliente.objects.get(pk=idCierre)
				ORecibo=NroReciboCaja.objects.get(id_oficina=O.pk,id_caja=C.pk)
				OLote=NroLoteOficina.objects.get(id_nroRecibo=ORecibo.pk) 
				nroL=OLote.nroLoteVenta+1
				NroLoteOficina.objects.select_for_update().filter(id_nroRecibo=ORecibo.pk).update(nroLoteVenta=nroL)
				nombreLote='LOTE '+ str(nroL) 

				with transaction.atomic():
					STB=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=idCierre,estado='PENDIENTE').aggregate(Count('pk'))
					nroFilas=STB['pk__count']
					CierreVentaCliente.objects.select_for_update().filter(pk=idCierre).update(lote=nombreLote,nroBarras=nroBarras,saldo=saldo,fechaCierre=fecha,estado='CONFIRMADO')
					BarrasVentaMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_venta_cliente=idCierre).update(estado='CONFIRMADO',descuento=0)
					if nroBarras>nroFilas:
						cantidadFilas=int(nroBarras)-int(nroFilas)
						for i in range(cantidadFilas):
							BVM=BarrasVentaMaterial(fechaCierre=fecha, cantidadInicial=0,cantidadCierre=0, cantidad=0,precio=0,ley=0,descuento=0,observaciones='',estado='CERRADO',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
							BVM.save()

						exito='exito'
					else:
						exito='exito1'

					cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
					numeroR = int(Nrecibo.nroREM)+1
					NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroREM=numeroR)
					saldo_= Sald-Egreso
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
					haber= TCajaMaterialHaber(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='VentaMaterial',conceptoDetalle='Venta Material al Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/EM',pesoGramos=Egreso,estadoTransaccion='realizado',nroRecibo=numeroR)
					haber.save()
					config= ConfiguracionVentaMaterial(id_cierre_venta_cliente=CCV,id_cliente=OCliente,configDecimales=str('2/2/2/2/2/2/2/2/2/2/2/2/2/2/2'))
					config.save()
			else:
				exito='saldo en la caja material insuficiente'

		except IntegrityError:
			exito='fail'#+str(sys.exc_info()[1])
		except:
			exito='fail'#+str(sys.exc_info()[1])

	else:
		exito='fail'+str(sys.exc_info()[1])

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def ActualizarBarraVenta_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idBarra=request.GET.get('idBarraVenta')
			cantidadInicial=request.GET.get('cantidadInicial')

			if cantidadInicial==None or cantidadInicial=='':
				cantidadInicial=0

			cantidad=request.GET.get('cantidad')

			if cantidad==None or cantidad=='':
				cantidad=0

			cantidadCierre=request.GET.get('cantidadCierre')

			if cantidadCierre==None or cantidadCierre=='':
				cantidadCierre=0


			fecha=request.GET.get('fechaCierre')
			if fecha!='' and fecha!=None:
				fecha1= datetime.strptime(fecha, '%Y-%m-%d')
			else:
				fecha1=datetime.now().strftime("%Y-%m-%d")



			precio=request.GET.get('precio')

			if precio==None or precio=='':
				precio=0

			ley=request.GET.get('ley')

			if ley==None or ley=='':
				ley=0

			descuento=request.GET.get('descuento')
			 
			if descuento==0 or descuento=='':
				descuento=0

			with transaction.atomic():
				BarrasVentaMaterial.objects.select_for_update().filter(pk=idBarra).update(cantidadInicial=cantidadInicial,cantidad=cantidad,cantidadCierre=cantidadCierre,fechaCierre=fecha1, precio=ConvertirDecimal(precio),ley=ley,descuento=descuento)
				exito='exito'	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def ActualizarTipoCambioVenta_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			tipoCambio=request.GET.get('tipoCambio')

			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)

			with transaction.atomic():
				CierreVentaCliente.objects.select_for_update().filter(pk=idCierre,id_cliente=idCliente).update(tipoCambio=tipoCambio)
				exito='exito'	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def ActualizarAnuladoCierreVenta_view(request):
	exito=''
	if request.is_ajax:
		try:
			nombreLote=''
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)
			with transaction.atomic():
				if CierreVentaCliente.objects.filter(pk=idCierre,id_cliente=idCliente).exists():
					sq1=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXCobrarCierreVentaMaterial.objects.get(id_cierre_venta_cliente=sq1.pk)
					if not ControlPagoVenta.objects.filter(id_cuentaxcobrar=sq2.pk,estado='CONFIRMADO').exists():
						CierreVentaCliente.objects.select_for_update().filter(pk=idCierre).update(estado='ANULADO')
						BarrasVentaMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_venta_cliente=idCierre).update(estado='ANULADO')
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRIM)+1
						NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRIM=numeroR)
						saldo=ConvertirDecimal(sq1.saldo)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						Sald=ConvertirDecimal(cons_saldo.saldo_Material)
						saldo_= Sald+saldo
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
						debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='IngresoMaterial',conceptoDetalle='Anulacion de Cierre Material de Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/IM',pesoGramos=saldo,estadoTransaccion='ANULADO',nroRecibo=numeroR)
						debe.save()
						exito='exito'
					else:
						exito='No se puede eliminar el cierre porque existen cobros adelantados'
				else:
					exito='fail'		
				 
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])

	else:
		exito='fail'+str(sys.exc_info()[1])

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def InsertarControlPagoVenta_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:

			idPago=request.GET.get('idPago')
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			monto=request.GET.get('monto')
			fecha=request.GET.get('fecha')
			if fecha!='' and fecha!=None:
				fecha1= datetime.strptime(fecha, '%Y-%m-%d')
			else:
				fecha1=datetime.now().strftime("%Y-%m-%d")

			montoTotalCuenta=request.GET.get('montoTotalCuenta')
			moneda=request.GET.get('moneda')
			tipoCambio=request.GET.get('tipoCambio')
			observaciones=request.GET.get('observaciones')
			 

			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)

			with transaction.atomic():
				if idPago=='-1' or idPago==-1:
					sq1=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXCobrarCierreVentaMaterial.objects.get(id_cierre_venta_cliente=sq1.pk)
					OCP=ControlPagoVenta(montoPagado=ConvertirDecimal(monto),docReferencia='NOCAJA',moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones,id_personal=C.id_usuario,id_cuentaxcobrar=sq2)
					OCP.save()
					SCP=ControlPagoVenta.objects.filter(id_cuentaxcobrar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					exito=str(OCP.pk)
				else:
					sq1=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXCobrarCierreVentaMaterial.objects.get(id_cierre_venta_cliente=sq1.pk)
					SCP=ControlPagoVenta.objects.filter(id_cuentaxcobrar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					ControlPagoVenta.objects.select_for_update().filter(pk=idPago).update(fechaEmision=fecha1, montoPagado=ConvertirDecimal(monto),moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones)
					OCP=ControlPagoVenta.objects.get(pk=idPago)
					exito=str(OCP.pk)	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def RecuperarCuentasCierreVentaAjax_view(request):
	lista=[]
	if request.is_ajax:
		try:
			consulta=list(CierreVentaCliente.objects.filter(estado='CONFIRMADO').values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['id_cliente']) 
				aux['pk']=obj['pk']
				aux['pkCierre']=str(OC.pk)
				aux['nombre']=OC.nombre+' '+OC.Apellido_paterno+' '+OC.Apellido_materno
				aux['fechaCierre']=str(obj['fechaCierre'].strftime("%Y-%m-%d"))
				aux['lote']=obj['lote']
				lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def RecuperarCuentasCierreVentaFiltroAjax(request):
	lista=[]
	if request.is_ajax:
		parametro=request.GET.get('parametro')
		try:
			consulta=list(Cliente.objects.filter(Q(nombre__icontains=parametro)|Q(Apellido_paterno__icontains=parametro)|Q(Apellido_materno__icontains=parametro)|Q(dni__icontains=parametro)).values('pk','nombre','Apellido_paterno','Apellido_materno')) 
			for obj in consulta:
				consulta1=list(CierreVentaCliente.objects.filter(estado='CONFIRMADO',id_cliente=obj['pk']).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
				for obj1 in consulta1:
					aux={}
					aux['pk']=obj1['pk']
					aux['pkCierre']=str(obj['pk'])
					aux['nombre']=obj['nombre']+' '+obj['Apellido_paterno']+' '+obj['Apellido_materno']
					aux['fechaCierre']=str(obj1['fechaCierre'].strftime("%Y-%m-%d"))
					aux['lote']=obj1['lote']
					lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def eliminarPagoVenta_view(request):
	if request.is_ajax:
		idPago=request.GET.get('idPago')
		try:
			with transaction.atomic():
				ControlPagoVenta.objects.select_for_update().filter(pk=idPago).update(estado='ANULADO')
				exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)



@login_required
def registrarVentaMovimientoCaja_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idPago=request.GET.get('idPago')
			cierreDetalle=request.GET.get('cierreDetalle')
			usr = request.user.username
			Ger = Gerente.objects.get(usuario=usr)
			C = Cajas.objects.get(id_usuario= Ger.id_usuario)
			O=Oficina.objects.get(id_usuario=Ger.id_usuario)

			with transaction.atomic():
				CPV=ControlPagoVenta.objects.get(pk=idPago)
				if ControlPagoVenta.objects.filter(pk=idPago,docReferencia='NOCAJA').exists():
					ControlPagoVenta.objects.select_for_update().filter(pk=idPago,docReferencia='NOCAJA').update(docReferencia='CAJA')
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
					numeroRI=int(Nrecibo.nroRI)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRI=numeroRI)
					saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
					
					if CPV.moneda=='soles':
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(ConvertirDecimal(saldosoles)-ConvertirDecimal(CPV.montoPagado)))
					else:
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(ConvertirDecimal(saldodolares)-ConvertirDecimal(CPV.montoPagado))) 
					
					CDebe=TCajaDebe(id_personal=C.id_usuario,tablaRelacional="TOtroIngreso",conceptoDetalle="Pago por Venta de Material de Cierre "+cierreDetalle,tipoDocumento="R/I",cantidadDinero=CPV.montoPagado,moneda=CPV.moneda,estadoTransaccion="realizado",nroRecibo=numeroRI,id_oficina=O,id_caja=C)
					CDebe.save()
					exito='exito'
				else:
					exito='fail'
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def RecuperarCuentasCierreVentaClienteAjax_view(request):
	lista=[]
	lista1=[]
	dato=''
	idCierre=''
	idCliente=''
	cadena=''
	tipoCambio=0

	html_cierres='<thead><tr><td class="td-center">Peso Bruto Inicial</td><td class="td-center">Peso Bruto(Grs)</td><td class="td-center">Merma (%)</td><td class="td-center">Ley (%)</td><td class="td-center">Peso Fino (Grs)</td><td class="td-center">Fecha Cierre</td> <td class="td-center">Peso Fino Cierre (Grs)</td><td class="td-center">Peso Fino Cierre (Oz)</td><td class="td-center">Precio US$/OZ</td><td class="td-center">Descuento Compra %</td><td class="td-center">Precio Gramo</td><td class="td-center">Precio Onza</td><td class="td-center">Retencion 1.50%</td><td class="td-center">Neto a Pagar US$</td><td class="td-center">Monto Pagado</td><td class="td-center">Saldo a Pagar US$</td><td class="td-center">observaciones</td></tr></thead>'

	#variables
	PesoBrutoInicial=0
	PesoBrutoGrs=0
	Merma=0
	PesoFinoCierreGrs=0
	PesoFinoCierreOnza=0
	Precio=0
	PesoFinoGrs=0
	PrecioOnzaCierre=0
	Descuento=0
	DescuentoCompra=0
	ImporteCompraUS=0
	NetoAPagar=0
	Ley=0
	PrecioOnza=0

	SumaPesoBrutoInicial=0
	SumaPesoBrutoGrs=0
	SumaLey=0
	SumaPesoFinoCierreGrs=0
	SumaPesoFinoCierreOnza=0
	SumaPesoFinoGrs=0
	SumaPrecioDolaresOnza=0
	SumaDescuentoCompra=0
	SumaPrecioGramo=0
	SumaNetoAPagarDolares=0
	SumaPagoCuenta=0
	SumaAdelanto=0
	IndicePromedio=0


	if request.is_ajax:
		idCC=request.GET.get('idCC')
		result=idCC.split('_')
		i=0
		for o in result:
			if i==0:
				idCliente=o
			else:
				idCierre=o
			i=i+1

		
		if idCierre!='' and idCliente!='':

			OCCV=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)

			if OCCV.tipoCambio!=None and OCCV.tipoCambio!='':
				tipoCambio=OCCV.tipoCambio
			else:
				tipoCambio=0

			consulta=list(BarrasVentaMaterial.objects.filter(id_cliente=idCliente,id_cierre_venta_cliente=idCierre).values('pk','fechaCierre','cantidadInicial','cantidad','cantidadCierre','precio','descuento','ley','observaciones','id_cliente'))
			consulta1=list(CuentaXCobrarCierreVentaMaterial.objects.filter(id_cliente=idCliente,id_cierre_venta_cliente=idCierre).values('pk'))
			

			if ConfiguracionVentaMaterial.objects.filter(id_cierre_venta_cliente=idCierre,id_cliente=idCliente).exists():
				OConfig=ConfiguracionVentaMaterial.objects.get(id_cierre_venta_cliente=idCierre,id_cliente=idCliente)
				cadena=str(OConfig.configDecimales)
				lista1.append(cadena)
			else:
				cadena=str('2/2/2/2/2/2/2/2/2/2/2/2/2/2/2')
				lista1.append(cadena)

			configDec=cadena.split('/')

			IndicePromedio=len(consulta)

			for obj in consulta:
				html_cierres=html_cierres+'<tr class="even warning">'

				html_cierres=html_cierres+'<td><span class="editable editable-click" style="display: inline;" id="'+str(obj['pk'])+'">'+str(redondeo(obj['cantidadInicial'],configDec[0]))+'</span></td>'
				
				SumaPesoBrutoInicial=SumaPesoBrutoInicial+ConvertirDecimal(redondeo(obj['cantidadInicial'],configDec[0]))
				
				html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(redondeo(obj['cantidad'],configDec[1]))+'</span></td>'
				
				SumaPesoBrutoGrs=SumaPesoBrutoGrs+ConvertirDecimal(redondeo(obj['cantidad'],configDec[1]))

				if obj['cantidadInicial']>0:
					html_cierres=html_cierres+'<td>'+str(redondeo(100-((ConvertirDecimal(redondeo(obj['cantidad'],configDec[1])))*100)/ConvertirDecimal(redondeo(obj['cantidadInicial'],configDec[0])),configDec[2]))+'</td>'
				else:
					html_cierres=html_cierres+'<td>'+str(redondeo(0,configDec[2]))+'</td>'

				SumaLey=SumaLey+ConvertirDecimal(redondeo(obj['ley'],configDec[3]))

				html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(redondeo(obj['ley'],configDec[3]))+'</span></td>'
				html_cierres =html_cierres+ '<td>'+str(redondeo((ConvertirDecimal(redondeo(obj['ley'],configDec[3]))/100)*ConvertirDecimal(redondeo(obj['cantidad'],configDec[1])),configDec[4]))+'</td>'

				SumaPesoFinoGrs=SumaPesoFinoGrs+((ConvertirDecimal(redondeo(obj['ley'],configDec[3]))/100)*ConvertirDecimal(redondeo(obj['cantidad'],configDec[1])))

				html_cierres =html_cierres+ '<td><span class="editable editable-click fecha" id="tbfecha" data-type="date" data-format="YYYY-MM-DD" data-viewformat="YYYY-MM-DD" style="display: inline;">'+str(obj['fechaCierre'].strftime("%Y-%m-%d"))+'</span></td>'
				html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(redondeo(obj['cantidadCierre'],configDec[5]))+'</span></td>'
				
				SumaPesoFinoCierreGrs=SumaPesoFinoCierreGrs+ConvertirDecimal(redondeo(obj['cantidadCierre'],configDec[5]))

				html_cierres =html_cierres+ '<td>'+str(redondeo(ConvertirDecimal(redondeo(obj['cantidadCierre'],configDec[5]))/ConvertirDecimal(31.1035),configDec[6]))+'</td>'
				
				SumaPesoFinoCierreOnza=SumaPesoFinoCierreOnza+(ConvertirDecimal(redondeo(obj['cantidadCierre'],configDec[5]))/ConvertirDecimal(31.1035))

				html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(redondeo(obj['precio'],configDec[7]))+'</span></td>'
				
				SumaPrecioDolaresOnza=SumaPrecioDolaresOnza+ConvertirDecimal(redondeo(obj['precio'],configDec[7]))

				PrecioOnzaCierre=ConvertirDecimal(redondeo(obj['precio'],configDec[7]))/ConvertirDecimal(31.1035)

				html_cierres =html_cierres+ '<td><span class="editable editable-click" style="display: inline;">'+str(redondeo(obj['descuento'],configDec[8]))+'</span></td>'
				
				DescuentoCompra= ConvertirDecimal(redondeo(obj['descuento'],configDec[8]))/100
				SumaDescuentoCompra=SumaDescuentoCompra+ConvertirDecimal(redondeo(obj['descuento'],configDec[8]))


				if PrecioOnzaCierre>0:
					ImporteCompraUS=ConvertirDecimal(PrecioOnzaCierre)-(ConvertirDecimal(PrecioOnzaCierre)*ConvertirDecimal(DescuentoCompra))
					html_cierres =html_cierres+ '<td>'+str(redondeo(ImporteCompraUS,configDec[9]))+'</td>'
				else:
					ImporteCompraUS=0
					html_cierres =html_cierres+ '<td>'+str(redondeo(ImporteCompraUS,configDec[9]))+'</td>'

				NetoAPagar=ConvertirDecimal(redondeo(obj['cantidadCierre'],configDec[5]))*ConvertirDecimal(redondeo(ImporteCompraUS,configDec[9]))
				SumaNetoAPagarDolares=SumaNetoAPagarDolares+ NetoAPagar
				PrecioOnza=ConvertirDecimal(redondeo(obj['precio'],configDec[7]))/ConvertirDecimal(31.1035)

				html_cierres =html_cierres+ '<td>'+str(redondeo(PrecioOnza,configDec[10]))+'</td>'
				html_cierres =html_cierres+ '<td></td>'
				html_cierres =html_cierres+ '<td>'+str(redondeo(NetoAPagar,configDec[12]))+'</td>'
				html_cierres =html_cierres+ '<td></td>'
				html_cierres =html_cierres+ '<td></td>'
				html_cierres =html_cierres+ '<td></td>'
				html_cierres =html_cierres+ '<td class="hidden">'+str(obj['pk'])+'</td>'
				html_cierres =html_cierres+ '</tr>'

			#------------ TIPO CAMBIO
			html_cierres = html_cierres+'<tr class="even warning">'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+ '<td></td>'
			html_cierres = html_cierres+ '<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td>Tipo Cambio</td>'
			html_cierres = html_cierres+'<td id="tc"><div class="profile-info-value"><span class="editable editable-click tbtipocambio" id="tbtipocambio" style="display: inline;">'+str('%.*f' %(int(configDec[11]),tipoCambio))+'</span></div></td>'
			html_cierres = html_cierres+'<td>S/ '+str(redondeo(SumaNetoAPagarDolares*ConvertirDecimal(tipoCambio),configDec[12]))+'</td>'
			html_cierres = html_cierres+'<td></td>'
			html_cierres = html_cierres+'<td>'+str(redondeo(SumaNetoAPagarDolares,configDec[14]))+'</td>'
			html_cierres = html_cierres+'<td> </td>'
			html_cierres = html_cierres+'</tr>'
			SumaAdelanto=SumaNetoAPagarDolares

			for obj1 in consulta1:
				consulta2= ControlPagoVenta.objects.filter(id_cuentaxcobrar=obj1['pk'],estado='CONFIRMADO').values('pk','fechaEmision','montoPagado','docReferencia','moneda','observaciones','tipoCambio')
				for obj2 in consulta2:
					SumaAdelantoDolares=ConvertirDecimal(obj2['montoPagado'])/ConvertirDecimal(obj2['tipoCambio'])
					SumaAPagar=SumaAdelanto-SumaAdelantoDolares

					if(obj2['moneda']=="dolares"):
						html_cierres=html_cierres+'<tr class="even success">'
						SumaPagoCuenta=SumaPagoCuenta+ConvertirDecimal(obj2['montoPagado'])*ConvertirDecimal(tipoCambio)
					else:
						html_cierres=html_cierres+'<tr class="even info">'
						SumaPagoCuenta=SumaPagoCuenta+ConvertirDecimal(obj2['montoPagado'])

					html_cierres=html_cierres+'<td></td>'
					html_cierres=html_cierres+'<td></td>'
					html_cierres=html_cierres+'<td></td>'
					html_cierres=html_cierres+'<td></td>'
					html_cierres=html_cierres+'<td></td>'
					html_cierres=html_cierres+'<td></td>'
					html_cierres=html_cierres+'<td></td>'
					
					if obj2['docReferencia']=='NOCAJA':
						html_cierres=html_cierres+'<td><button type="button" class="btn enviar btn-success btn-icon-text waves-effect" data-value="'+str(obj2['pk'])+'"><i class="md md-redo"></i>Enviar a Caja</button></td>'
					else:
						html_cierres=html_cierres+'<td></td>'

					html_cierres=html_cierres+'<td><button type="button" class="btn imprimir btn-primary btn-icon-text waves-effect" data-value="'+str(obj2['pk'])+'"><i class="md md-print"></i>Imprimir</button></td>'
					html_cierres=html_cierres+'<td><button type="button" class="btn eliminar btn-danger btn-icon-text waves-effect" data-value="'+str(obj2['pk'])+'">Eliminar</button></td>'
					html_cierres=html_cierres+'<td><span class="editable editable-click tbfecha" id="tbfecha" data-type="date" data-format="YYYY-MM-DD" data-viewformat="YYYY-MM-DD"  style="display: inline;">'+str(obj2['fechaEmision'].strftime("%Y-%m-%d"))+'<span></td>'
					html_cierres=html_cierres+'<td>($)'+str('%.*f' % (int(configDec[10]),SumaAdelantoDolares))+'</td>'
					html_cierres=html_cierres+'<td><span class="editable editable-click" id="tbObservaciones" style="display: inline;">'+str(obj2['tipoCambio'])+'</span></td>'
					html_cierres=html_cierres+'<td>'+obj2['moneda']+'</td>'
					html_cierres=html_cierres+'<td><span class="editable editable-click" id="tbtipocambio" style="display: inline;">'+str('%.*f' % (int(configDec[13]),obj2['montoPagado']))+'</span></td>'
					html_cierres=html_cierres+'<td>'+str('%.*f' % (int(configDec[14]),SumaAPagar))+'</td>'
					SumaAdelanto=SumaAdelanto-SumaAdelantoDolares
					html_cierres=html_cierres+'<td><span class="editable editable-click" id="tbObservaciones" style="display: inline;">'+obj2['observaciones']+'</span></td>' 
					html_cierres=html_cierres+'</tr>'

			#-------------- PROMEDIOS
			if IndicePromedio<=0:
				IndicePromedio=1
			
			html_cierres=html_cierres+'<tr class="even warning">'
			html_cierres=html_cierres+'<td>PROMEDIOS</td>'
			html_cierres=html_cierres+'<td>'+str('%.*f' % (int(configDec[1]),SumaPesoBrutoGrs/IndicePromedio))+'</td>'
			html_cierres=html_cierres+'<td></td>'
			html_cierres=html_cierres+'<td>'+str('%.*f' % (int(configDec[3]),SumaLey/IndicePromedio))+'</td>'
			html_cierres=html_cierres+'<td>'+str('%.*f' % (int(configDec[4]),SumaPesoFinoGrs/IndicePromedio))+'</td>'
			html_cierres=html_cierres+'<td></td>'
			html_cierres=html_cierres+'<td>'+str('%.*f' % (int(configDec[5]),SumaPesoFinoCierreGrs/IndicePromedio))+'</td>'
			html_cierres=html_cierres+ '<td>'+str('%.*f' % (int(configDec[6]),SumaPesoFinoCierreOnza/IndicePromedio))+'</td>'
			html_cierres=html_cierres+ '<td>'+str('%.*f' % (int(configDec[7]),SumaPrecioDolaresOnza/IndicePromedio))+'</td>'
			html_cierres=html_cierres+ '<td>'+str('%.*f' % (int(configDec[8]),SumaDescuentoCompra/IndicePromedio))+'</td>'
			html_cierres=html_cierres+ '<td>'+str('%.*f' % (int(configDec[9]),SumaPrecioGramo/IndicePromedio))+'</td>'
			html_cierres=html_cierres+ '<td></td>'
			html_cierres=html_cierres+ '<td></td>'
			html_cierres=html_cierres+ '<td></td>'
			html_cierres=html_cierres+ '<td><button type="button" id="idNuevoPago" class="btn btn-success aceptar1">Nuevo Pago</button></td>'
			html_cierres=html_cierres+ '<td></td>'
			html_cierres=html_cierres+ '<td></td>'
			html_cierres=html_cierres+ '</tr>'

			html_cierres =html_cierres+ '<tr class="even warning">'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[0]),SumaPesoBrutoInicial))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[1]),SumaPesoBrutoGrs))+'</td>'
			html_cierres =html_cierres+ '<td></td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[3]),SumaLey))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[4]),SumaPesoFinoGrs))+'</td>'
			html_cierres =html_cierres+ '<td></td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[5]),SumaPesoFinoCierreGrs))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[6]),SumaPesoFinoCierreOnza))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[7]),SumaPrecioDolaresOnza))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[8]),SumaDescuentoCompra))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[9]),SumaPrecioGramo))+'</td>'
			html_cierres =html_cierres+ '<td></td>'
			html_cierres =html_cierres+ '<td></td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[12]),SumaNetoAPagarDolares))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[13]),SumaPagoCuenta))+'</td>'
			html_cierres =html_cierres+ '<td>'+str('%.*f' % (int(configDec[14]),SumaAdelanto))+'</td>'
			html_cierres =html_cierres+ '<td></td>'
			html_cierres =html_cierres+ '</tr>'

			 
			lista.append(html_cierres)


		dato={'lista':lista,'lista1':lista1,'tipoCambio':str(tipoCambio)}
	else:
		dato='fail'+str(sys.exc_info()[1])
	 
	data= json.dumps(dato)

	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def RecuperarCuentasCierreVentaFiltroAjax_view(request):
	lista=[]
	if request.is_ajax:
		parametro=request.GET.get('parametro')
		try:
			consulta=list(Cliente.objects.filter(Q(nombre__icontains=parametro)|Q(Apellido_paterno__icontains=parametro)|Q(Apellido_materno__icontains=parametro)|Q(dni__icontains=parametro)).values('pk','nombre','Apellido_paterno','Apellido_materno')) 
			for obj in consulta:
				consulta1=list(CierreVentaCliente.objects.filter(estado='CONFIRMADO',id_cliente=obj['pk']).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
				for obj1 in consulta1:
					aux={}
					aux['pk']=obj1['pk']
					aux['pkCierre']=str(obj['pk'])
					aux['nombre']=obj['nombre']+' '+obj['Apellido_paterno']+' '+obj['Apellido_materno']
					aux['fechaCierre']=str(obj1['fechaCierre'].strftime("%Y-%m-%d"))
					aux['lote']=obj1['lote']
					lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def RecuperarCuentasCierreVentaAjax_view(request):
	lista=[]
	if request.is_ajax:
		try:
			consulta=list(CierreVentaCliente.objects.filter(estado='CONFIRMADO').values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['id_cliente']) 
				aux['pk']=obj['pk']
				aux['pkCierre']=str(OC.pk)
				aux['nombre']=OC.nombre+' '+OC.Apellido_paterno+' '+OC.Apellido_materno
				aux['fechaCierre']=str(obj['fechaCierre'].strftime("%Y-%m-%d"))
				aux['lote']=obj['lote']
				lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def registrarConfiguracionDecimalesVenta_view(request):
	if request.is_ajax: 
		idCierre= request.GET.get('idCierre')
		idCliente= request.GET.get('idCliente')
		configDecimal=request.GET.get('config')
		try:
			with transaction.atomic():
				if not ConfiguracionVentaMaterial.objects.filter(id_cierre_venta_cliente=idCierre,id_cliente=idCliente).exists():
					OCCV=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OC=Cliente.objects.get(pk=idCliente)
					config= ConfiguracionVentaMaterial(id_cierre_venta_cliente=OCCV,id_cliente=OC,configDecimales=str(configDecimal))
					config.save()
					exito='exito'
				else:
					ConfiguracionVentaMaterial.objects.select_for_update().filter(id_cierre_venta_cliente=idCierre,id_cliente=idCliente).update(configDecimales=str(configDecimal))
					exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)



@login_required
def registrarConfiguracionDecimalesVentaGeneral_view(request):
	if request.is_ajax:
		configDecimal=request.GET.get('config')
		try:
			with transaction.atomic():
				ConfiguracionVentaMaterial.objects.select_for_update().all().update(configDecimales=str(configDecimal))
				exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)

def sacar_balance_dolar(C,haber):
	if BalanceDolar.objects.filter(id_caja=C.pk).exists():
		ub= BalanceDolar.objects.filter(id_caja=C.pk).latest("pk")
		if ub.saldo_debe==0:
			clt= list(DebeDolar.objects.filter(pk__gt=ub.id_debeDolar.pk,idCajaDebe__id_caja=C.pk).values('pk','tipo_cambio','monto'))
			Sdebe=0
			k=0
			Stipoc=0
			pk_DebeIni=clt[0]['pk']
			pk_DebeFin=clt[0]['pk']
			while Sdebe<float(haber.monto):
				pk_DebeFin= clt[k]['pk']
				Sdebe= Sdebe+float(clt[k]['monto'])
				Stipoc= Stipoc+float(clt[k]['tipo_cambio'])
				k=k+1
			debe= DebeDolar.objects.get(pk=pk_DebeFin)
			bal= BalanceDolar(id_debeDolar=debe,id_haberDolar=haber,id_debeDolarIni=pk_DebeIni,id_haberDolarIni=haber.pk,saldo_debe=Sdebe-float(haber.monto),id_caja=C,id_personal=C.id_usuario,prom_TC_debe=Stipoc/k,prom_TC_haber=float(haber.tipo_cambio))
			bal.save()
		elif float(ub.saldo_debe) >= float(haber.monto):
			debe= DebeDolar.objects.get(pk=ub.id_debeDolar.pk)
			bal= BalanceDolar(id_debeDolar=debe,id_haberDolar=haber,id_debeDolarIni=debe.pk,id_haberDolarIni=haber.pk,saldo_debe=float(ub.saldo_debe) - float(haber.monto),id_caja=C,id_personal=C.id_usuario,prom_TC_debe=debe.tipo_cambio,prom_TC_haber=float(haber.tipo_cambio))
			bal.save()
		else:
			
			clt= list(DebeDolar.objects.filter(pk__gt=ub.id_debeDolar.pk,idCajaDebe__id_caja=C.pk).values('pk','tipo_cambio','monto'))
			
			Sdebe=float(ub.saldo_debe)
			le=len(clt)
			k=0
			Stipoc=float(ub.id_debeDolar.tipo_cambio)
			pk_DebeIni=ub.id_debeDolar.pk
			pk_DebeFin=clt[0]['pk']
			while Sdebe<float(haber.monto):
				pk_DebeFin= clt[k]['pk']
				Sdebe= Sdebe+float(clt[k]['monto'])
				Stipoc= Stipoc+float(clt[k]['tipo_cambio'])
				k=k+1
			debe= DebeDolar.objects.get(pk=pk_DebeFin)
			bal= BalanceDolar(id_debeDolar=debe,id_haberDolar=haber,id_debeDolarIni=pk_DebeIni,id_haberDolarIni=haber.pk,saldo_debe=Sdebe-float(haber.monto),id_caja=C,id_personal=C.id_usuario,prom_TC_debe=Stipoc/(k+1),prom_TC_haber=float(haber.tipo_cambio))
			bal.save()
	else:
		clt= list(DebeDolar.objects.filter(idCajaDebe__id_caja=C.pk).values('pk','tipo_cambio','monto'))
		Sdebe=0
		k=0
		Stipoc=0
		pk_DebeIni=clt[0]['pk']
		pk_DebeFin=clt[0]['pk']
		while Sdebe<float(haber.monto):
			pk_DebeFin= clt[k]['pk']
			Sdebe= Sdebe+float(clt[k]['monto'])
			Stipoc= Stipoc+float(clt[k]['tipo_cambio'])
			k=k+1
		debe= DebeDolar.objects.get(pk=pk_DebeFin)
		bal= BalanceDolar(id_debeDolar=debe,id_haberDolar=haber,id_debeDolarIni=pk_DebeIni,id_haberDolarIni=haber.pk,saldo_debe=Sdebe-float(haber.monto),id_caja=C,id_personal=C.id_usuario,prom_TC_debe=Stipoc/k,prom_TC_haber=float(haber.tipo_cambio))
		bal.save()
	return True

def es_asociado(cpk):
	es_ce=''#'si'
	ce=''#base central
	try:
		if asociado.objects.filter(id_caja=cpk).count() == 1:
			es_ce = 'si'
		if oficinas_por_asociado.objects.filter(id_caja=cpk,estado='activo').count()==1:
			oaso=oficinas_por_asociado.objects.get(id_caja=cpk,estado='activo')
			aso=asociado.objects.get(pk=oaso.id_asociado.pk)
			es_ce='no'
			ce= aso.id_caja.id_oficina.nombre_oficina+' ['+aso.id_caja.nombre+'/'+aso.id_caja.id_usuario.nombre+']'
	except:
		ce='fail'+ str(sys.exc_info()[1])
	return es_ce,ce

@login_required
@transaction.atomic
def EnviarOficinaOficina_view(request):
	usr= request.user.username
	idOfi= request.POST.get('oficina')
	idCa= request.POST.get('caja','')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	tipoc=request.POST.get('tipoc')
	comi=request.POST.get('comi')
	transac_= request.POST.get('transac')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	nombreof=''
	dol=0
	sol=0
	transac=''
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idOfi != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			with transaction.atomic():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					#boy validation
					if int(idOfi) < 0:# -2 tesoreria
						te = TConfiguracionSistema.objects.get(conf3='si')
						idOfi = te.id_oficina.pk
						idCa = te.id_caja.pk
					O1 = Oficina.objects.get(pk= idOfi)#destino
					nombreof= O1.nombre_oficina
					Monto = ConvertirDecimal(Monto)
					saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					if Monto > 0 and  comi >=0:
						#if (Moneda=='soles' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
						saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
						saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
						if Moneda=='dolares':
							if tipoc != None and tipoc !="":
								tipoc = float(tipoc)
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRE = int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
								
								C1= Cajas.objects.get(pk=idCa)
								THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCaja",conceptoDetalle="Envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
								THaber.save()
								#HaberDo= HaberDolar(idCajaHaber=THaber,tipo_cambio=tipoc,monto=Monto)
								#HaberDo.save()
								#sacar_balance_dolar(C,HaberDo)
								Ec= EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle="Envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,observaciones=Observaciones,estado="enviado")
								Ec.save()
								if saldoDP <Monto:
									sobreH=SobregiroHaber(idCajaHaber=THaber,tabla='EnvioCajaCaja',id_transaccion=Ec.pk,monto_sobregiro=saldoDP - Monto)
									sobreH.save()
								if comi >0:
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroRE1 = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
									CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
									CHaber.save()
									ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=Ec.pk,tabla='EnvioCajaCaja')
									ComiE.save()
									if (comi +Monto) >saldoDP:
										sobreHc=SobregiroHaber(idCajaHaber=CHaber,tabla='ComisionEnvio',id_transaccion=ComiE.pk,monto_sobregiro=saldoDP - (comi +Monto))
										sobreHc.save()
									#sacar_balance_dolar(C,CHaber)
								SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto-comi))
								exito='exito'
							else:
								exito = 'Ingrese un tipo de cambio dolar valido'
						else:
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							C1= Cajas.objects.get(pk=idCa)
							THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCaja",conceptoDetalle="Envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
							THaber.save()
							Ec= EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle="Envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,observaciones=Observaciones,estado="enviado")
							Ec.save()
							if saldoSP <Monto:
								sobreH=SobregiroHaber(idCajaHaber=THaber,tabla='EnvioCajaCaja',id_transaccion=Ec.pk,monto_sobregiro=saldoSP - Monto)
								sobreH.save()
							if comi >0:
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRE1 = int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
								CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
								CHaber.save()
								ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=Ec.pk,tabla='EnvioCajaCaja')
								ComiE.save()
								if (comi +Monto) >saldoSP:
									sobreHc=SobregiroHaber(idCajaHaber=CHaber,tabla='ComisionEnvio',id_transaccion=ComiE.pk,monto_sobregiro=saldoSP - (comi +Monto))
									sobreHc.save()
							SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto-comi))
							exito='exito'
						#else:
							#exito = 'Saldo insuficiente'
					else:
						exito = 'Montos no admitidos'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except:
			if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
				CTG.save()
				transac='1'
			else:
				cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
				transac='1'
			exito='fail'+ str(sys.exc_info()[1])

	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	es_ce,ce=es_asociado(C.pk)
	return render(request,"envioOficina.html",{"transac":transac,"es_ceA":es_ce,"ceA":ce,"resultado":exito,"cargo":cargo,"nombreRecibo":nombreof,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"comi":comi,"monedaRecibo":Moneda,"conceptoDetalleRecibo":"Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+ nombreof,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )


@login_required
@transaction.atomic
def EnviarCajaOperador_view(request):
	usr= request.user.username
	#afavord= request.POST.get('Afavorde')
	idCaja= request.POST.get('caja')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	tipoc=request.POST.get('tipoc')
	comi=request.POST.get('comi')
	transac_= request.POST.get('transac')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	para=''
	dol=0
	sol=0
	transac=''
	Concepto=""
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if idCaja != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			with transaction.atomic():
				#end campo de fechas
				if idCaja=='vacio':
					C1 = Cajas.objects.get(id_usuario= C.id_oficina.id_usuario.pk)#destino
				else:
					C1 = Cajas.objects.get(pk= idCaja)#destino
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					#validate
					para= C1.id_usuario.nombre+' '+C1.id_usuario.Apellido_paterno+' '+ C1.id_usuario.Apellido_materno
					Monto = ConvertirDecimal(Monto)
					Concepto="Envio de dinero para habilitacion de Caja "+ C1.nombre
					saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					if C !=C1:
						if Monto > 0 and  comi >=0:
							#if (Moneda=='soles' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
							saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
							saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
							if Moneda=='dolares':
								if tipoc != None and tipoc !="":
									tipoc = float(tipoc)
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroRE = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
									THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCaja",conceptoDetalle="Habilitacion de dinero para caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
									THaber.save()
									#HaberDo= HaberDolar(idCajaHaber=THaber,tipo_cambio=tipoc,monto=Monto)
									#HaberDo.save()
									#sacar_balance_dolar(C,HaberDo)
									cA=EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
									cA.save()
									if comi >0:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroRE1 = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
										CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de habilitacion de dinero para caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
										CHaber.save()
										ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=cA.pk,tabla='EnvioCajaCaja')
										ComiE.save()
										#sacar_balance_dolar(C,CHaber)
									SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto-comi))
									exito='exito'
								else:
									exito = 'Ingrese un tipo de cambio dolar valido'
							else:
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRE = int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
								THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCaja",conceptoDetalle="Habilitacion de dinero para caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
								THaber.save()
								cA=EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
								cA.save()
								if comi >0:
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroRE1 = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
									CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de habilitacion de dinero para caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
									CHaber.save()
									ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=cA.pk,tabla='EnvioCajaCaja')
									ComiE.save()
								SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto-comi))
								exito='exito'
							#else:
							#	exito = 'Saldo insuficiente'
						else:
							exito='Montos no admitidos'
					else:
						exito= 'error en operacion'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except:
			if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
				CTG.save()
				transac='1'
			else:
				cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
				transac='1'
			exito='fail'+ str(sys.exc_info()[1])
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	return render(request,"habilitarCaja.html",{"transac":transac,"resultado":exito,"cargo":cargo,"nombreRecibo":para,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"comi":comi,"monedaRecibo":Moneda,"conceptoDetalleRecibo":'Envio de dinero para habilitacion de caja',"horaRecibo":horaActual,"fechaRecibo":fechaActual} )


#********************************************************************************************************


@login_required
@transaction.atomic
def EnviarCajaMaterial_view(request):
	usr= request.user.username
	idCaja= request.POST.get('caja')
	Monto = request.POST.get('monto')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	para=''
	dol=0
	sol=0
	Concepto="Envio de Material para habilitacion de Caja Alterna"
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idCaja != None:
		try:
			with transaction.atomic():
				C1 = Cajas.objects.get(pk= idCaja)#destino
				para= C1.id_usuario.nombre+' '+C1.id_usuario.Apellido_paterno+' '+ C1.id_usuario.Apellido_materno
				Monto = ConvertirDecimal(Monto)
				saldoPrinsipal= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				if C !=C1:
					if ( Monto<=ConvertirDecimal(saldoPrinsipal.saldo_material) and Monto >0):
						saldo = ConvertirDecimal(saldoPrinsipal.saldo_material)
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroREM)+1
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroREM=numeroRE)
						THaber= TCajaMaterialHaber(id_personal=C.id_usuario,tablaRelacional="EnvioMaterialCajaCaja",conceptoDetalle="Envio de Material para habilitacion",tipoDocumento="R/EM",pesoGramos=Monto,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						THaber.save()
						cA=EnvioMaterialCajaCaja(idCajaMaterialHaber=THaber,id_CajaDestino=C1,Peso_gramos=Monto,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
						cA.save()
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_material=(saldo-Monto))
						exito='exito'
					else:
						exito = 'Saldo insuficiente'
				else:
					exito= 'error en operacion'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"EnvioCajaMaterial.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":para,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"conceptoDetalleRecibo":'Envio de dinero para habilitacion de caja',"horaRecibo":horaActual,"fechaRecibo":fechaActual} )


@login_required
@transaction.atomic
def CrearTransferenciaGlobal_view(request):#encargado de crear transferencias
	dniM=request.POST.get('menor','no')
	nroCtaBanco=request.POST.get('NroCta','')
	idCliente=request.POST.get('IdCliente','')#capturamos los atributos del formulario
	idBeneficiado=request.POST.get('IdBeneficiado','')#capturamos los atributos del formulario
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','TipoPersona','DniRucCln','NombreCln','PaternoCln','MaternoCln','DireccionCln','NombreBnf','PaternoBnf','MaternoBnf','OficinaDst','SucursalDst','moneda','txtCantidad','txtComicion','obs',)
	DniRucCliente= request.POST.get('DniRucCln','')
	NombreCliente= request.POST.get('NombreCln')
	A_paternoCliente= request.POST.get('PaternoCln')
	A_maternoCliente= request.POST.get('MaternoCln')
	#DireccionCliente= request.POST.get('DireccionCln')
	TipoPersonaBen=request.POST.get('TipoPersonaB')
	DniRucBen= request.POST.get('DniRucB','')
	NombreBenef= request.POST.get('NombreBnf')
	A_paternoBenef= request.POST.get('PaternoBnf')
	A_maternoBenef = request.POST.get('MaternoBnf')
	celular = request.POST.get('CelularBnf','')
	celularCli = request.POST.get('CelularCli','')
	OficinaDestino = request.POST.get('OficinaDst')
	OficinaOr = request.POST.get('OficinaOri')
	CajaOr = request.POST.get('CajaOri')
	Moneda= request.POST.get('moneda')
	Monto= request.POST.get('Monto')
	Comicion = request.POST.get('comicion')
	CodigoA = request.POST.get('CodigoAut')
	Observaciones = request.POST.get('obs','')
	banco = request.POST.get('banco','')
	clave = request.POST.get('clave','')
	celularRef = request.POST.get('CelularRef','')
	montoconcepto= request.POST.get('MontoConcepto')
	transac_= request.POST.get('transac')
	conceptoDetalle= request.POST.get('conceptoDet','')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	usr=request.user.username
	recibo_obs=''
	recibo_det=conceptoDetalle
	ODes= ''
	txtbanco= ''
	ODir=''
	idSTRecibo=''
	soliAp=''
	soli=''
	beneAp=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	canti=0
	transac=''
	nombre_ori=''
	obsvino=''
	aux_sms=''
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	Ca= Cajas.objects.get(id_usuario__usuario=usr)
	if Ca.id_usuario.pk == Ca.id_oficina.id_usuario.pk:
		cargo='administrador'
	if NombreBenef != None:
		#----
		bOri=''
		if OficinaOr[0]=='b':
			bOri=OficinaOr[1:]
			bx1=Base_Ext.objects.get(pk=OficinaOr[1:])
			OficinaOr= bx1.id_confSis.id_oficina.pk
			CajaOr=bx1.id_confSis.id_caja.pk
		ci=None
		bDes=''
		if OficinaDestino[0]=='b':
			bDes=OficinaDestino[1:]
			bx=Base_Ext.objects.get(pk=OficinaDestino[1:])
			OficinaDestino= bx.id_confSis.id_oficina.pk
			ci=bx.id_confSis.id_caja
		ciDes=''
		if str(OficinaDestino)[0]=='c':
			ciDes=OficinaDestino[1:]
			ci=Cajas.objects.get(pk=OficinaDestino[1:])
			obsvino= ci.nombre+" /"
			OficinaDestino= ci.id_oficina.pk

		#configuraciones de montos maximos en STs
		bnd_mt_st=True
		if ci == None:
			of_de=Oficina.objects.get(pk=OficinaDestino)
			ci=Cajas.objects.get(id_usuario=of_de.id_usuario.pk)
		CE_D= ConfiguracionExtra_caja.objects.get(id_oficina=OficinaDestino,id_caja=ci.pk)
		if  float(CE_D.monto_tope_st)>0 and  float(Monto)>float(CE_D.monto_tope_st):
			bnd_mt_st=False
		#---
		if bnd_mt_st:
			if OficinaDestino != OficinaOr:
				#consulta_ca= list(Cajas.objects.filter(id_oficina=OficinaOr).values('pk'))
				C= None
				if CajaOr != None and CajaOr != 0 and CajaOr != '':
					C= Cajas.objects.get(pk=CajaOr)
				else:
					ofiOrg= Oficina.objects.get(pk=OficinaOr)
					C= Cajas.objects.get(id_usuario=ofiOrg.id_usuario.pk)
				nombre_ori= C.id_oficina.nombre_oficina
				if DniRucCliente == None:
					DniRucCliente=''
				if montoconcepto ==''or montoconcepto == None:
					montoconcepto=0
				else:
					montoconcepto = ConvertirDecimal(montoconcepto)

				if TipoPersona ==''or TipoPersona == None:
					TipoPersona='Natural'
				bnc = 'si'
				txtbanco = banco
				Observaciones=txtbanco
				recibo_obs=txtbanco
				try:
					with transaction.atomic():
						confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=Ca.pk).values('pk','aux1')
						if str(confi[0]['aux1']) != str(transac_):
							auxt= str(confi[0]['aux1'])
							cnc=conf_permisos_Cajas.objects.filter(id_caja=Ca.pk).update(aux1=transac_)
							transac= auxt
							bene=NombreBenef
							beneAp=A_paternoBenef+' '+A_maternoBenef
							soli=NombreCliente
							soliAp=A_paternoCliente+' '+A_maternoCliente
							#*********
							cod_aut=False
							if CodigoA!=None and CodigoA != '':
								if Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).exists():
									cod_aut=True
							ver_st=True
							if bDes =='':
								if ciDes =='':
									if bOri=='':
										if not cod_aut:
											if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,id_caja=0).exists():
												confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,id_caja=0).values('comision')
												if float(confco[0]['comision'])<1:
													comi_ing=int(float(confco[0]['comision'])*float(Monto))
													if comi_ing<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
												else:
													if float(confco[0]['comision'])<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
									else:
										if not cod_aut:
											if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=bOri,id_caja=0).exists():
												confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=bOri,id_caja=0).values('comision')
												if float(confco[0]['comision'])<1:
													comi_ing=int(float(confco[0]['comision'])*float(Monto))
													if comi_ing<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
												else:
													if float(confco[0]['comision'])<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
								else:
									if bOri=='':
										if not cod_aut:
											if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,id_caja=ciDes).exists():
												confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,id_caja=ciDes).values('comision')
												if float(confco[0]['comision'])<1:
													comi_ing=int(float(confco[0]['comision'])*float(Monto))
													if comi_ing<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
												else:
													if float(confco[0]['comision'])<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
									else:
										if not cod_aut:
											if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=bOri,id_caja=ciDes).exists():
												confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=bOri,id_caja=ciDes).values('comision')
												if float(confco[0]['comision'])<1:
													comi_ing=int(float(confco[0]['comision'])*float(Monto))
													if comi_ing<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
												else:
													if float(confco[0]['comision'])<=float(Comicion):
														ver_st=True
													else:
														ver_st=False
							else:
								if bOri=='':
									if not cod_aut:
										if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=bDes).exists():
											confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=bDes).values('comision')
											if float(confco[0]['comision'])<1:
												comi_ing=int(float(confco[0]['comision'])*float(Monto))
												if comi_ing<=float(Comicion):
													ver_st=True
												else:
													ver_st=False
											else:
												if float(confco[0]['comision'])<=float(Comicion):
													ver_st=True
												else:
													ver_st=False
								else:
									if not cod_aut:
										if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=bDes,base_ori=bOri).exists():
											confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=bDes,base_ori=bOri).values('comision')
											if float(confco[0]['comision'])<1:
												comi_ing=int(float(confco[0]['comision'])*float(Monto))
												if comi_ing<=float(Comicion):
													ver_st=True
												else:
													ver_st=False
											else:
												if float(confco[0]['comision'])<=float(Comicion):
													ver_st=True
												else:
													ver_st=False

							if ver_st:
								sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,dni=DniRucCliente).values('pk')
								sqb=Cliente.objects.filter(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,dni=DniRucBen).values('pk')
								if idCliente == '' or idCliente== None:
									if sq.count()==0:
										cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
										cln.save()
										idCliente = str(cln.pk)
									else:
										lista5= list(sq)
										idCliente= str(lista5[0]['pk'])
								else:
									Cliente.objects.select_for_update().filter(id=idCliente).update(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona)

								if idBeneficiado == '' or idBeneficiado== None:
									if sqb.count()==0:
										cln = Cliente(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,tipo_persona=TipoPersona,idCaja=C.pk)
										cln.save()
										idBeneficiado = str(cln.pk)
									else:
										lista5= list(sqb)
										idBeneficiado= str(lista5[0]['pk'])
								else:
									Cliente.objects.select_for_update().filter(id=idBeneficiado).update(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef)
								Comi= ConvertirDecimal(Comicion)
								CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								#OCM=autorizacion_Extorno_completo.objects.get(id_oficina=C.id_oficina.pk)
								if Comi >= CE.comision_minima and montoconcepto >= CE.otros_conceptos_minimo:
									comi1=str(Comicion)
									Cantidad= ConvertirDecimal(Monto)
									capi1=str(Monto)
									otros1=str(montoconcepto)
									Ingres= Cantidad+Comi+montoconcepto
									canti=str(Ingres)
									cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
									idSaldo= str(cons_saldo.pk)
									SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
									SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
									"""
									bDes=''
									if OficinaDestino[0]=='b':
										bDes=OficinaDestino[1:]
										bx=Base_Ext.objects.get(pk=OficinaDestino[1:])
										OficinaDestino= bx.id_confSis.id_oficina.pk
									"""
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroST)+1
									nroReci=numeroR
									NroReciboCaja.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroST=numeroR)
									if Moneda=='dolares':
										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										Cli= Cliente.objects.get(pk=idCliente)
										OD= Oficina.objects.get(pk=OficinaDestino)#destino
										ODes=OD.nombre_oficina
										ODir=OD.direccion
										saldo= SaldoDolares+Ingres
										SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_dolares=saldo)
										transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='st-'+str(Ca.pk)+'-'+Ca.id_usuario.nombre,tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
										transferencia.save()
										idCajaD=transferencia.pk
										tipo_ope='giro'
										if len(nroCtaBanco)>8:
											tipo_ope='deposito'
										Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,nombre_solicitante=NombreCliente,Apellido_paterno_solicitante=A_paternoCliente,Apellido_materno_solicitante=A_maternoCliente,dni_solicitante=DniRucCliente,observaciones=obsvino + Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,id_beneficiario=idBeneficiado,aux1=idBeneficiado,dniMenor=dniM,nroCta=nroCtaBanco,banco=banco,tipo_operacion=tipo_ope,cel_referencia=celularRef,clave=clave)
										Stransferencia.save()
										idSTRecibo=Stransferencia.pk
										if cod_aut:
											Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())
										
										if bDes != '' or bOri != '':
											stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_ori=bOri,id_base_des=bDes)
											stbe.save()
										
										exito='exito'
									elif Moneda=='soles':
										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										Cli= Cliente.objects.get(pk=idCliente)
										OD= Oficina.objects.get(pk=OficinaDestino)#destino
										ODes=OD.nombre_oficina
										ODir=OD.direccion
										saldo= SaldoSoles+Ingres
										SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_soles=saldo)
										transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='st-'+str(Ca.pk)+'-'+Ca.id_usuario.nombre,tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
										transferencia.save()
										idCajaD=transferencia.pk
										tipo_ope='giro'
										if len(nroCtaBanco)>8:
											tipo_ope='deposito'
										Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,nombre_solicitante=NombreCliente,Apellido_paterno_solicitante=A_paternoCliente,Apellido_materno_solicitante=A_maternoCliente,dni_solicitante=DniRucCliente,observaciones=obsvino + Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,id_beneficiario=idBeneficiado,aux1=idBeneficiado,dniMenor=dniM,nroCta=nroCtaBanco,banco=banco,tipo_operacion=tipo_ope,cel_referencia=celularRef,clave=clave)
										Stransferencia.save()
										idSTRecibo=Stransferencia.pk

										if cod_aut:
											Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())
										
										if bDes != '' or bOri != '':
											stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_ori=bOri,id_base_des=bDes)
											stbe.save()
										
										exito='exito'
									else:
										exito='fail'
								else:
									exito=' comision u Otros Conceptos demasiado bajo... comuniquese con el gerente'
							else:
								exito='Comision no permitida'
						else:
							if transac_ =='0':
								transac='1'
							else:
								transac='0'
							exito=' Transaccion repetida!'

				except IntegrityError:
					exito='fail'
				except:
					exito='fail1'+ str(sys.exc_info()[1])
			else:
				exito='Seleccione oficinas diferentes'
		else:
			exito='El monto que esta enviando es muy alto para: '+ci.id_oficina.nombre_oficina+'. Solo puede enviar hasta '+str(CE_D.monto_tope_st)
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=Ca.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=Ca,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=Ca.pk).update(aux1='0')
			transac='1'
	return render(request,"CrearTransGlobales.html",{"transac":transac,"resultado":exito,"cargo":cargo,"idST":idSTRecibo,"oficinaRecibo":nombre_ori,"montoRecibo":canti,"comisionRecibo":comi1,"capitalRecibo":capi1,"otrosRecibo":otros1,"monedaRecibo":Moneda,"oficinadestino":ODes,"direccionofi":ODir,"nrorecibo":nroReci,"bene":bene,"beneAp":beneAp,"soli":soli,"soliAp":soliAp,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'recibo_obs':recibo_obs,'recibo_det':recibo_det,'celular':celular} )



@login_required
@transaction.atomic
def PagoTrans_global_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		obsp=request.GET.get('obs','')
		dnib=request.GET.get('dni','')
		egreso_pago=request.GET.get('egreso','')
		usr= request.user.username
		try:
			with transaction.atomic():
				monto_egreso_pago=0
				st= SolicitudTransferencia.objects.filter(pk=idTr).values('idCajaDebe','observaciones','comision','monto_conceptos','id_oficina','aux1')
				con_st= list(st)
				idBenef=con_st[0]['aux1']
				Ca= Cajas.objects.get(id_usuario__usuario=usr)
				consulta_ca= list(Cajas.objects.filter(id_oficina=con_st[0]['id_oficina']).values('pk'))
				C= Cajas.objects.get(pk=consulta_ca[0]['pk'])
				if conf_oficinas_para_TransGlobal.objects.filter(id_conf__id_caja=Ca.pk,id_oficina=con_st[0]['id_oficina'],aux1="si").exists():
					idTcajaD= str(con_st[0]['idCajaDebe'])
					CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
					con_CajaDebe= list(CDebe)
					moneda= str(con_CajaDebe[0]['moneda'])
					Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
					cons_saldo= list(Csaldo)
					idSaldo= str(cons_saldo[0]['pk'])
					SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
					SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
					MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
					#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
					if egreso_pago !='':
						monto_egreso_pago=float(egreso_pago)

					if moneda=='soles':
						if SaldoSoles >= (MontoEgreso+monto_egreso_pago):
							if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroPT)+1
								NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
								nr=numeroR
								CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='pt-'+str(Ca.pk)+'-'+Ca.id_usuario.nombre,tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
								CajaH.save()
								idCajaH= CajaH.pk
								idST = SolicitudTransferencia.objects.get(pk=idTr)
								PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
								PagoT.save()
								CDebe.update(estadoTransaccion='pagado')
								if monto_egreso_pago>0:
									numeroR_e=int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
									TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
									TCajaH.save()
								saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago
								Csaldo.update(saldo_soles=saldoEgreso)
								st.update(dni_beneficiado=dnib)
								if idBenef!=None and idBenef!='':
									Cliente.objects.select_for_update().filter(pk=idBenef).update(dni=dnib)
								#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
								data="exito"
							else:
								data ="error en operacion"
						else:
							data="saldo insuficiente"
					elif moneda=='dolares':
						if SaldoDolares>=(MontoEgreso+monto_egreso_pago):
							if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroPT)+1
								NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
								nr=numeroR
								CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='pt-'+str(Ca.pk)+'-'+Ca.id_usuario.nombre,tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
								CajaH.save()
								idCajaH= CajaH.pk
								idST = SolicitudTransferencia.objects.get(pk=idTr)
								PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
								PagoT.save()
								CDebe.update(estadoTransaccion='pagado')
								if monto_egreso_pago>0:
									numeroR_e=int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
									TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
									TCajaH.save()
								saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago
								Csaldo.update(saldo_dolares=saldoEgreso)
								st.update(dni_beneficiado=dnib)
								if idBenef!=None and idBenef!='':
									Cliente.objects.select_for_update().filter(pk=idBenef).update(dni=dnib)
								#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
								data="exito"
							else:
								data ="error en operacion"
						else:
							data="saldo insuficiente"
					else:
						data='fail'
				else:
					data='error'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	d= {'exito':data,'nr':nr}
	d= json.dumps(d)
	mimetype="application/json"
	return HttpResponse(d,mimetype)














#------ agregado integral


@login_required
def CierreInternoMaterial_operador_view(request):
	return render(request,"CierreCompraMaterialOperador.html" )


@login_required
def CuentasClientesCompra_operador_view(request):
	return render(request,"CuentasCierreCompraMaterialOperador.html" )


@login_required
def CierreInternoVentaMaterial_operador_view(request):
	return render(request,"CierreVentaMaterialOperador.html" )


@login_required
def CuentasClientesVenta_operador_view(request):
	return render(request,"CuentasCierreVentaMaterialOperador.html" )




@login_required
def CierreInternoMaterialOperadorAjax_view(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			consulta=list(Cliente.objects.filter(tablaRelacional='TCCM').values('pk','nombre','Apellido_paterno','Apellido_materno')[:10])
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['pk'])
				if CierreCompraCliente.objects.filter(id_cliente=OC,estado='PENDIENTE',id_oficina=C.id_oficina.pk,id_caja=C.pk).exists():
					consulta1=list(CierreCompraCliente.objects.filter(id_cliente=OC,estado='PENDIENTE',id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk'))
					aux['pk']=obj['pk']
					aux['pkCierre']=consulta1[0]['pk']
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
				else:
					aux['pk']=obj['pk']
					aux['pkCierre']='-1'
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
			 
			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def registrarCierreCompraMaterialOperador_view(request):
	if request.is_ajax:
		nombreLote=''
		idCierre=request.GET.get('idCierre')
		idCliente=request.GET.get('idCliente')
		fecha= request.GET.get('fechaCierre')
		cantidad= request.GET.get('cantidad')
		saldo= request.GET.get('saldo')
		nroBarras= request.GET.get('nroBarras')
		usr=request.user.username 
		C= Cajas.objects.get(id_usuario__usuario=usr)
		O=Oficina.objects.get(pk= C.id_oficina.pk)  
		try:
			OCliente=Cliente.objects.get(pk=idCliente)
			CCC=CierreCompraCliente.objects.get(pk=idCierre)
			ORecibo=NroReciboCaja.objects.get(id_oficina=O.pk,id_caja=C.pk)
			OLote=NroLoteOficina.objects.get(id_nroRecibo=ORecibo.pk) 
			nroL=OLote.nroLote+1
			NroLoteOficina.objects.select_for_update().filter(id_nroRecibo=ORecibo.pk).update(nroLote=nroL)
			nombreLote='LOTE '+ str(nroL) 

			with transaction.atomic():
				STB=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=idCierre,estado='PENDIENTE').aggregate(Count('pk'))
				nroFilas=STB['pk__count']
				CierreCompraCliente.objects.select_for_update().filter(pk=idCierre).update(lote=nombreLote,nroBarras=nroBarras,saldo=saldo,fechaCierre=fecha,estado='CONFIRMADO')
				BarrasCompraMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_compra_cliente=idCierre).update(estado='CONFIRMADO',descuento=0)
				if nroBarras>nroFilas:
					cantidadFilas=int(nroBarras)-int(nroFilas)
					for i in range(cantidadFilas):
						BCM=BarrasCompraMaterial(fechaCierre=fecha, cantidadInicial=0,cantidadCierre=0, cantidad=0,precio=0,ley=0,descuento=0,observaciones='',estado='CERRADO',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
						BCM.save()

					exito='exito'
				else:
					exito='exito1'

				cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
				Ingres= ConvertirDecimal(saldo) 
				Sald= ConvertirDecimal(cons_saldo.saldo_Material)
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
				numeroR = int(Nrecibo.nroRIM)+1
				NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRIM=numeroR)
				saldo_= Sald+Ingres
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
				debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='CompraMaterial',conceptoDetalle='Compra Material de Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/IM',pesoGramos=Ingres,estadoTransaccion='realizado',nroRecibo=numeroR)
				debe.save()
				config= ConfiguracionCompraMaterial(id_cierre_compra_cliente=CCC,id_cliente=OCliente,configDecimales=str('2/2/2/2/2/2/2/2/2/2/2/2/2/2/2'))
				config.save()

		except IntegrityError:
			exito='fail'+ str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def registrarCierreCompraClienteOperador_view(request):
	exito=''
	exito1=''
	saldoTotal=0
	if request.is_ajax:
		idCierre=request.GET.get('idCierre')
		idBarra=request.GET.get('idBarra')
		fecha= request.GET.get('fecha')
		cantidad= request.GET.get('cantidad')
		precio= request.GET.get('precio')
		ley= request.GET.get('ley')
		descuento= request.GET.get('descuento')
		observaciones = request.GET.get('obs')
		idCliente= request.GET.get('idCliente')
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		O=Oficina.objects.get(id_usuario=C.id_oficina.pk)  

		try:
			OCliente=Cliente.objects.get(pk=idCliente)
			ci=ConvertirDecimal(cantidad)
			c=ConvertirDecimal(cantidad)-ConvertirDecimal(descuento)
			with transaction.atomic():
				if idCierre=='' or idCierre==None or idCierre=='-1' or idCierre==-1:
					CCC= CierreCompraCliente(fechaCierre=fecha,estado='PENDIENTE',nroBarras=0,id_cliente=OCliente,id_caja=C,id_oficina=O)
					CCC.save()
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BCM=BarrasCompraMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,estado='PENDIENTE',observaciones=observaciones,id_cliente=OCliente,id_cierre_compra_cliente=CCC)
						BCM.save()

						SCI=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=CCC).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXPagarCierreCompraMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXP=CuentaXPagarCierreCompraMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
							else:
								CXP=CuentaXPagarCierreCompraMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
						else:
							CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).update(monto=SCI['total'],saldo=SCI['total'])

						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasCompraMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BCM.pk)
						exito=str(CCC.pk)
				else:
					CCC=CierreCompraCliente.objects.get(pk=idCierre)
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BCM=BarrasCompraMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones,estado='PENDIENTE',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
						BCM.save()
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasCompraMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						SCI=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=CCC).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXPagarCierreCompraMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXP=CuentaXPagarCierreCompraMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
							else:
								CXP=CuentaXPagarCierreCompraMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCC)
								CXP.save()
						else:
							CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).update(monto=SCI['total'],saldo=SCI['total'])

						exito1=str(BCM.pk)
						exito=str(CCC.pk)
					else:
						BarrasCompraMaterial.objects.select_for_update().filter(pk=idBarra,id_cliente=idCliente,id_cierre_compra_cliente=idCierre).update(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones)
						BCM=BarrasCompraMaterial.objects.get(pk=idBarra,id_cliente=idCliente,id_cierre_compra_cliente=idCierre)
						SCI=BarrasCompraMaterial.objects.filter(id_cierre_compra_cliente=CCC).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))
						CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCC.pk).update(monto=SCI['total'],saldo=SCI['total'])
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasCompraMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BCM.pk)
						exito=str(CCC.pk)


		except IntegrityError:
			exito='fail1'+ str(sys.exc_info()[1])
			exito1='fail1'+ str(sys.exc_info()[1])
			saldoTotal=str(0)
		except:
			exito='fail2'+ str(sys.exc_info()[1])
			exito1='fail2'+str(sys.exc_info()[1])
			saldoTotal=str(0)

	else:
		exito='fail3'+ str(sys.exc_info()[1])
		exito1='fail3'
		saldoTotal=str(0)

	dato={'exito':exito,'exito1':exito1,'saldoMaterial':saldoTotal}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def CierreInternoVentaMaterialAjax_view(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			consulta=list(Cliente.objects.filter(tablaRelacional='TCCM').values('pk','nombre','Apellido_paterno','Apellido_materno')[:10])
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['pk'])
				if CierreVentaCliente.objects.filter(id_cliente=OC,estado='PENDIENTE',id_oficina=C.id_oficina.pk,id_caja=C.pk).exists():
					consulta1=list(CierreVentaCliente.objects.filter(id_cliente=OC,estado='PENDIENTE').values('pk'))
					aux['pk']=obj['pk']
					aux['pkCierre']=consulta1[0]['pk']
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
				else:
					aux['pk']=obj['pk']
					aux['pkCierre']='-1'
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
			 
			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def registrarCierreVentaMaterialOperador_view(request):
	if request.is_ajax:
		nombreLote=''
		idCierre=request.GET.get('idCierre')
		idCliente=request.GET.get('idCliente')
		fecha= request.GET.get('fechaCierre')
		cantidad= request.GET.get('cantidad')
		saldo= request.GET.get('saldo')
		nroBarras= request.GET.get('nroBarras')
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		O=Oficina.objects.get(pk= C.id_oficina.pk) 
		try:
			cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			Sald= ConvertirDecimal(cons_saldo.saldo_Material)
			Egreso= ConvertirDecimal(saldo) 
			if Sald>=Egreso:
				OCliente=Cliente.objects.get(pk=idCliente)
				CCV=CierreVentaCliente.objects.get(pk=idCierre)
				ORecibo=NroReciboCaja.objects.get(id_oficina=O.pk,id_caja=C.pk)
				OLote=NroLoteOficina.objects.get(id_nroRecibo=ORecibo.pk) 
				nroL=OLote.nroLoteVenta+1
				NroLoteOficina.objects.select_for_update().filter(id_nroRecibo=ORecibo.pk).update(nroLoteVenta=nroL)
				nombreLote='LOTE '+ str(nroL) 

				with transaction.atomic():
					STB=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=idCierre,estado='PENDIENTE').aggregate(Count('pk'))
					nroFilas=STB['pk__count']
					CierreVentaCliente.objects.select_for_update().filter(pk=idCierre).update(lote=nombreLote,nroBarras=nroBarras,saldo=saldo,fechaCierre=fecha,estado='CONFIRMADO')
					BarrasVentaMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_venta_cliente=idCierre).update(estado='CONFIRMADO',descuento=0)
					if nroBarras>nroFilas:
						cantidadFilas=int(nroBarras)-int(nroFilas)
						for i in range(cantidadFilas):
							BVM=BarrasVentaMaterial(fechaCierre=fecha, cantidadInicial=0,cantidadCierre=0, cantidad=0,precio=0,ley=0,descuento=0,observaciones='',estado='CERRADO',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
							BVM.save()

						exito='exito'
					else:
						exito='exito1'

					cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
					numeroR = int(Nrecibo.nroREM)+1
					NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroREM=numeroR)
					saldo_= Sald-Egreso
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
					haber= TCajaMaterialHaber(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='VentaMaterial',conceptoDetalle='Venta Material al Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/EM',pesoGramos=Egreso,estadoTransaccion='realizado',nroRecibo=numeroR)
					haber.save()
					config= ConfiguracionVentaMaterial(id_cierre_venta_cliente=CCV,id_cliente=OCliente,configDecimales=str('2/2/2/2/2/2/2/2/2/2/2/2/2/2/2'))
					config.save()
			else:
				exito='saldo en la caja material insuficiente'

		except IntegrityError:
			exito='fail'#+str(sys.exc_info()[1])
		except:
			exito='fail'#+str(sys.exc_info()[1])

	else:
		exito='fail'+str(sys.exc_info()[1])

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def registrarCierreVentaClienteOperador_view(request):
	exito=''
	exito1=''
	saldoTotal=0
	if request.is_ajax:
		idCierre=request.GET.get('idCierre')
		idBarra=request.GET.get('idBarra')
		fecha= request.GET.get('fecha')
		cantidad= request.GET.get('cantidad')
		precio= request.GET.get('precio')
		ley= request.GET.get('ley')
		descuento= request.GET.get('descuento')
		observaciones = request.GET.get('obs')
		idCliente= request.GET.get('idCliente')
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		O=Oficina.objects.get(pk= C.id_oficina.pk)

		try:
			OCliente=Cliente.objects.get(pk=idCliente)
			ci=ConvertirDecimal(cantidad)
			c=ConvertirDecimal(cantidad)-ConvertirDecimal(descuento)
			with transaction.atomic():
				if idCierre=='' or idCierre==None or idCierre=='-1' or idCierre==-1:
					CCV= CierreVentaCliente(fechaCierre=fecha,estado='PENDIENTE',nroBarras=0,id_cliente=OCliente,id_caja=C,id_oficina=O)
					CCV.save()
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BVM=BarrasVentaMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,estado='PENDIENTE',observaciones=observaciones,id_cliente=OCliente,id_cierre_venta_cliente=CCV)
						BVM.save()

						SCI=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=CCV).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXCobrarCierreVentaMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXC=CuentaXCobrarCierreVentaMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
								CXC.save()
							else:
								CXC=CuentaXCobrarCierreVentaMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_compra_cliente=CCV)
								CXC.save()
						else:
							CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_compra_cliente=CCV.pk).update(monto=SCI['total'],saldo=SCI['total'])

						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasVentaMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BVM.pk)
						exito=str(CCV.pk)
				else:
					CCV=CierreVentaCliente.objects.get(pk=idCierre)
					if idBarra=='' or idBarra==None or idBarra==-1 or idBarra=='-1':
						BVM=BarrasVentaMaterial(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones,estado='PENDIENTE',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
						BVM.save()
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasVentaMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						SCI=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=CCV).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))	
						
						if not CuentaXCobrarCierreVentaMaterial.objects.filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).exists():
							if SCI['total']!=None and SCI['total']!='':
								CXC=CuentaXCobrarCierreVentaMaterial(monto=SCI['total'],saldo=SCI['total'],estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
								CXC.save()
							else:
								CXC=CuentaXCobrarCierreVentaMaterial(monto=0,saldo=0,estado='CONFIRMADO',moneda='DOLARES',id_cliente=OCliente,id_cierre_venta_cliente=CCV)
								CXC.save()
						else:
							CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).update(monto=SCI['total'],saldo=SCI['total'])

						exito1=str(BVM.pk)
						exito=str(CCV.pk)
					else:
						BarrasVentaMaterial.objects.select_for_update().filter(pk=idBarra,id_cliente=idCliente,id_cierre_venta_cliente=idCierre).update(fechaCierre=fecha, cantidadInicial=ci, cantidad=c,cantidadCierre=ci,precio=precio,ley=ley,descuento=descuento,observaciones=observaciones)
						BVM=BarrasVentaMaterial.objects.get(pk=idBarra,id_cliente=idCliente,id_cierre_venta_cliente=idCierre)
						SCI=BarrasVentaMaterial.objects.filter(id_cierre_venta_cliente=CCV).aggregate(total=Sum('cantidadInicial',field="cantidadInicial*precio"))
						CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(id_cliente=OCliente.pk,id_cierre_venta_cliente=CCV.pk).update(monto=SCI['total'],saldo=SCI['total'])
						saldoMaterial=SaldoDisponibleCajaMaterial.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).aggregate(Sum('saldo_Material'))
						saldoMaterialBarras=BarrasVentaMaterial.objects.filter(estado='PENDIENTE').aggregate(Sum('cantidadInicial'))
						saldoTotal=str(ConvertirDecimal(saldoMaterial['saldo_Material__sum'])+ConvertirDecimal(saldoMaterialBarras['cantidadInicial__sum']))
						exito1=str(BVM.pk)
						exito=str(CCV.pk)


		except IntegrityError:
			exito='fail1'#+ str(sys.exc_info()[1])
			exito1='fail1'#+ str(sys.exc_info()[1])
			saldoTotal=str(0)
		except:
			exito='fail2'#+ str(sys.exc_info()[1])
			exito1='fail2'#+str(sys.exc_info()[1])
			saldoTotal=str(0)

	else:
		exito='fail3'#+ str(sys.exc_info()[1])
		exito1='fail3'
		saldoTotal=str(0)

	dato={'exito':exito,'exito1':exito1,'saldoMaterial':saldoTotal}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)




@login_required
def InsertarControlPagoOperador_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:

			idPago=request.GET.get('idPago')
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			monto=request.GET.get('monto')
			fecha=request.GET.get('fecha')
			if fecha!='' and fecha!=None:
				fecha1= datetime.strptime(fecha, '%Y-%m-%d')
			else:
				fecha1=datetime.now().strftime("%Y-%m-%d")

			montoTotalCuenta=request.GET.get('montoTotalCuenta')
			moneda=request.GET.get('moneda')
			tipoCambio=request.GET.get('tipoCambio')
			observaciones=request.GET.get('observaciones')

			usr=request.user.username
			C= Cajas.objects.get(id_usuario__usuario=usr)
			O=Oficina.objects.get(pk= C.id_oficina.pk)

			with transaction.atomic():
				if idPago=='-1' or idPago==-1:
					sq1=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXPagarCierreCompraMaterial.objects.get(id_cierre_compra_cliente=sq1.pk)
					OCP=ControlPagoCompra(montoPagado=ConvertirDecimal(monto),docReferencia='NOCAJA',moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones,id_personal=C.id_usuario,id_cuentaxpagar=sq2)
					OCP.save()
					SCP=ControlPagoCompra.objects.filter(id_cuentaxpagar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					exito=str(OCP.pk)
				else:
					sq1=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXPagarCierreCompraMaterial.objects.get(id_cierre_compra_cliente=sq1.pk)
					SCP=ControlPagoCompra.objects.filter(id_cuentaxpagar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXPagarCierreCompraMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					ControlPagoCompra.objects.select_for_update().filter(pk=idPago).update(fechaEmision=fecha1, montoPagado=ConvertirDecimal(monto),moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones)
					OCP=ControlPagoCompra.objects.get(pk=idPago)
					exito=str(OCP.pk)	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def RecuperarCuentasCierreAjaxOperador_view(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		
		try:
			consulta=list(CierreCompraCliente.objects.filter(estado='CONFIRMADO',id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['id_cliente']) 
				aux['pk']=obj['pk']
				aux['pkCierre']=str(OC.pk)
				aux['nombre']=OC.nombre+' '+OC.Apellido_paterno+' '+OC.Apellido_materno
				aux['fechaCierre']=str(obj['fechaCierre'].strftime("%Y-%m-%d"))
				aux['lote']=obj['lote']
				lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def RecuperarCuentasCierreFiltroAjaxOperador_view(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		parametro=request.GET.get('parametro')
		try:
			consulta=list(Cliente.objects.filter(Q(nombre__icontains=parametro)|Q(Apellido_paterno__icontains=parametro)|Q(Apellido_materno__icontains=parametro)|Q(dni__icontains=parametro)).values('pk','nombre','Apellido_paterno','Apellido_materno')) 
			for obj in consulta:
				consulta1=list(CierreCompraCliente.objects.filter(estado='CONFIRMADO',id_cliente=obj['pk'],id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
				for obj1 in consulta1:
					aux={}
					aux['pk']=obj1['pk']
					aux['pkCierre']=str(obj['pk'])
					aux['nombre']=obj['nombre']+' '+obj['Apellido_paterno']+' '+obj['Apellido_materno']
					aux['fechaCierre']=str(obj1['fechaCierre'].strftime("%Y-%m-%d"))
					aux['lote']=obj1['lote']
					lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def registrarMovimientoCajaOperador_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idPago=request.GET.get('idPago')
			cierreDetalle=request.GET.get('cierreDetalle')
			usr=request.user.username
			C= Cajas.objects.get(id_usuario__usuario=usr)
			O=Oficina.objects.get(pk= C.id_oficina.pk)

			with transaction.atomic():
				CPC=ControlPagoCompra.objects.get(pk=idPago)
				if ControlPagoCompra.objects.filter(pk=idPago,docReferencia='NOCAJA').exists():
					ControlPagoCompra.objects.select_for_update().filter(pk=idPago,docReferencia='NOCAJA').update(docReferencia='CAJA')
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
					numeroRE=int(Nrecibo.nroRE)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRE=numeroRE)
					saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
					
					if CPC.moneda=='soles':
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(ConvertirDecimal(saldosoles)-ConvertirDecimal(CPC.montoPagado)))
					else:
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(ConvertirDecimal(saldodolares)-ConvertirDecimal(CPC.montoPagado))) 
					
					Chaber=TCajaHaber(id_personal=C.id_usuario,tablaRelacional="TOtroEgreso",conceptoDetalle="Pago por Compra de Material de Cierre "+cierreDetalle,tipoDocumento="R/E",cantidadDinero=CPC.montoPagado,moneda=CPC.moneda,estadoTransaccion="realizado",nroRecibo=numeroRE,id_oficina=O,id_caja=C)
					Chaber.save()
					exito='exito'
				else:
					exito='fail'
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def ActualizarAnuladoCierreVentaOperador_view(request):
	exito=''
	if request.is_ajax:
		try:
			nombreLote=''
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			usr=request.user.username
			C= Cajas.objects.get(id_usuario__usuario=usr)
			O=Oficina.objects.get(pk= C.id_oficina.pk)

			with transaction.atomic():
				if CierreVentaCliente.objects.filter(pk=idCierre,id_cliente=idCliente).exists():
					sq1=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXCobrarCierreVentaMaterial.objects.get(id_cierre_venta_cliente=sq1.pk)
					if not ControlPagoVenta.objects.filter(id_cuentaxcobrar=sq2.pk,estado='CONFIRMADO').exists():
						CierreVentaCliente.objects.select_for_update().filter(pk=idCierre).update(estado='ANULADO')
						BarrasVentaMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_venta_cliente=idCierre).update(estado='ANULADO')
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRIM)+1
						NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroRIM=numeroR)
						saldo=ConvertirDecimal(sq1.saldo)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						Sald=ConvertirDecimal(cons_saldo.saldo_Material)
						saldo_= Sald+saldo
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
						debe= TCajaMaterialDebe(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='IngresoMaterial',conceptoDetalle='Anulacion de Cierre Material de Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/IM',pesoGramos=saldo,estadoTransaccion='ANULADO',nroRecibo=numeroR)
						debe.save()
						exito='exito'
					else:
						exito='No se puede eliminar el cierre porque existen cobros adelantados'
				else:
					exito='fail'		
				 
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])

	else:
		exito='fail'+str(sys.exc_info()[1])

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def ActualizarAnuladoCierreCompraOperador_view(request):
	exito=''
	if request.is_ajax:
		try:
			nombreLote=''
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			usr=request.user.username
			C= Cajas.objects.get(id_usuario__usuario=usr)
			O=Oficina.objects.get(pk= C.id_oficina.pk)

			with transaction.atomic():
				if CierreCompraCliente.objects.filter(pk=idCierre,id_cliente=idCliente).exists():
					sq1=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXPagarCierreCompraMaterial.objects.get(id_cierre_compra_cliente=sq1.pk)
					if not ControlPagoCompra.objects.filter(id_cuentaxpagar=sq2.pk,estado='CONFIRMADO').exists():
						CierreCompraCliente.objects.select_for_update().filter(pk=idCierre).update(estado='ANULADO')
						BarrasCompraMaterial.objects.select_for_update().filter(id_cliente=idCliente,id_cierre_compra_cliente=idCierre).update(estado='ANULADO')
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
						numeroR = int(Nrecibo.nroREM)+1
						NroReciboCaja.objects.select_for_update().filter(pk=Nrecibo.pk).update(nroREM=numeroR)
						saldo=ConvertirDecimal(sq1.saldo)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						Sald=ConvertirDecimal(cons_saldo.saldo_Material)
						saldo_= Sald-saldo
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja= C.pk).update(saldo_Material=saldo_)
						haber= TCajaMaterialHaber(id_personal=C.id_usuario,id_oficina=O,id_caja=C,tablaRelacional='EgresoMaterial',conceptoDetalle='Anulacion de Cierre Material de Sr(a) '+OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno,tipoDocumento='R/EM',pesoGramos=saldo,estadoTransaccion='ANULADO',nroRecibo=numeroR)
						haber.save()
						exito='exito'
					else:
						exito='No se puede eliminar el cierre porque existen pagos adelantados'
				else:
					exito='fail'		
				 
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])

	else:
		exito='fail'+str(sys.exc_info()[1])

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def InsertarControlPagoVentaOperador_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:

			idPago=request.GET.get('idPago')
			idCierre=request.GET.get('idCierre')
			idCliente=request.GET.get('idCliente')
			monto=request.GET.get('monto')
			fecha=request.GET.get('fecha')
			if fecha!='' and fecha!=None:
				fecha1= datetime.strptime(fecha, '%Y-%m-%d')
			else:
				fecha1=datetime.now().strftime("%Y-%m-%d")

			montoTotalCuenta=request.GET.get('montoTotalCuenta')
			moneda=request.GET.get('moneda')
			tipoCambio=request.GET.get('tipoCambio')
			observaciones=request.GET.get('observaciones')
			 

			usr=request.user.username
			C= Cajas.objects.get(id_usuario__usuario=usr)
			O=Oficina.objects.get(pk= C.id_oficina.pk)

			with transaction.atomic():
				if idPago=='-1' or idPago==-1:
					sq1=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXCobrarCierreVentaMaterial.objects.get(id_cierre_venta_cliente=sq1.pk)
					OCP=ControlPagoVenta(montoPagado=ConvertirDecimal(monto),docReferencia='NOCAJA',moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones,id_personal=C.id_usuario,id_cuentaxcobrar=sq2)
					OCP.save()
					SCP=ControlPagoVenta.objects.filter(id_cuentaxcobrar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					exito=str(OCP.pk)
				else:
					sq1=CierreVentaCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OCliente=Cliente.objects.get(pk=idCliente)
					sq2=CuentaXCobrarCierreVentaMaterial.objects.get(id_cierre_venta_cliente=sq1.pk)
					SCP=ControlPagoVenta.objects.filter(id_cuentaxcobrar=sq2.pk).aggregate(Sum('montoPagado'))
					sumMontoPagado=SCP['montoPagado__sum']
					CuentaXCobrarCierreVentaMaterial.objects.select_for_update().filter(pk=sq2.pk).update(monto=ConvertirDecimal(montoTotalCuenta),saldo=ConvertirDecimal(montoTotalCuenta)-ConvertirDecimal(sumMontoPagado))
					ControlPagoVenta.objects.select_for_update().filter(pk=idPago).update(fechaEmision=fecha1, montoPagado=ConvertirDecimal(monto),moneda=moneda,estado='CONFIRMADO',tipoCambio=tipoCambio,observaciones=observaciones)
					OCP=ControlPagoVenta.objects.get(pk=idPago)
					exito=str(OCP.pk)	
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)




@login_required
def RecuperarCuentasCierreVentaOperadorAjax_view(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		O=Oficina.objects.get(pk= C.id_oficina.pk)
		try:
			consulta=list(CierreVentaCliente.objects.filter(estado='CONFIRMADO',id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['id_cliente']) 
				aux['pk']=obj['pk']
				aux['pkCierre']=str(OC.pk)
				aux['nombre']=OC.nombre+' '+OC.Apellido_paterno+' '+OC.Apellido_materno
				aux['fechaCierre']=str(obj['fechaCierre'].strftime("%Y-%m-%d"))
				aux['lote']=obj['lote']
				lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def RecuperarCuentasCierreVentaOperadorFiltroAjax(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		parametro=request.GET.get('parametro')
		try:
			consulta=list(Cliente.objects.filter(Q(nombre__icontains=parametro)|Q(Apellido_paterno__icontains=parametro)|Q(Apellido_materno__icontains=parametro)|Q(dni__icontains=parametro)).values('pk','nombre','Apellido_paterno','Apellido_materno')) 
			for obj in consulta:
				consulta1=list(CierreVentaCliente.objects.filter(estado='CONFIRMADO',id_cliente=obj['pk'],id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
				for obj1 in consulta1:
					aux={}
					aux['pk']=obj1['pk']
					aux['pkCierre']=str(obj['pk'])
					aux['nombre']=obj['nombre']+' '+obj['Apellido_paterno']+' '+obj['Apellido_materno']
					aux['fechaCierre']=str(obj1['fechaCierre'].strftime("%Y-%m-%d"))
					aux['lote']=obj1['lote']
					lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def registrarVentaMovimientoCajaOperador_view(request):
	exito=''
	OCliente=None
	if request.is_ajax:
		try:
			idPago=request.GET.get('idPago')
			cierreDetalle=request.GET.get('cierreDetalle')
			usr=request.user.username
			C= Cajas.objects.get(id_usuario__usuario=usr)
			O=Oficina.objects.get(pk= C.id_oficina.pk)

			with transaction.atomic():
				CPV=ControlPagoVenta.objects.get(pk=idPago)
				if ControlPagoVenta.objects.filter(pk=idPago,docReferencia='NOCAJA').exists():
					ControlPagoVenta.objects.select_for_update().filter(pk=idPago,docReferencia='NOCAJA').update(docReferencia='CAJA')
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
					numeroRI=int(Nrecibo.nroRI)+1
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRI=numeroRI)
					saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					saldodolares =ConvertirDecimal(saldoDis.saldo_dolares)
					
					if CPV.moneda=='soles':
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(ConvertirDecimal(saldosoles)-ConvertirDecimal(CPV.montoPagado)))
					else:
						aux=SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(ConvertirDecimal(saldodolares)-ConvertirDecimal(CPV.montoPagado))) 
					
					CDebe=TCajaDebe(id_personal=C.id_usuario,tablaRelacional="TOtroIngreso",conceptoDetalle="Pago por Venta de Material de Cierre "+cierreDetalle,tipoDocumento="R/I",cantidadDinero=CPV.montoPagado,moneda=CPV.moneda,estadoTransaccion="realizado",nroRecibo=numeroRI,id_oficina=O,id_caja=C)
					CDebe.save()
					exito='exito'
				else:
					exito='fail'
				 
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def RecuperarCuentasCierreVentaOperadorFiltroAjax_view(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		O=Oficina.objects.get(pk= C.id_oficina.pk)
		parametro=request.GET.get('parametro')
		try:
			consulta=list(Cliente.objects.filter(Q(nombre__icontains=parametro)|Q(Apellido_paterno__icontains=parametro)|Q(Apellido_materno__icontains=parametro)|Q(dni__icontains=parametro)).values('pk','nombre','Apellido_paterno','Apellido_materno')) 
			for obj in consulta:
				consulta1=list(CierreVentaCliente.objects.filter(estado='CONFIRMADO',id_cliente=obj['pk'],id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','lote','fechaCierre','saldo','tipoCambio','nroBarras','estado','id_cliente'))
				for obj1 in consulta1:
					aux={}
					aux['pk']=obj1['pk']
					aux['pkCierre']=str(obj['pk'])
					aux['nombre']=obj['nombre']+' '+obj['Apellido_paterno']+' '+obj['Apellido_materno']
					aux['fechaCierre']=str(obj1['fechaCierre'].strftime("%Y-%m-%d"))
					aux['lote']=obj1['lote']
					lista.append(aux)

			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)





@login_required
def CierreInternoVentaMaterialOperadorAjax_view(request):
	lista=[]
	if request.is_ajax:
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		O=Oficina.objects.get(pk= C.id_oficina.pk)
		try:
			consulta=list(Cliente.objects.filter(tablaRelacional='TCCM').values('pk','nombre','Apellido_paterno','Apellido_materno')[:10])
			for obj in consulta:
				aux={}
				OC=Cliente.objects.get(pk=obj['pk'])
				if CierreVentaCliente.objects.filter(id_cliente=OC,estado='PENDIENTE',id_oficina=C.id_oficina.pk,id_caja=C.pk).exists():
					consulta1=list(CierreVentaCliente.objects.filter(id_cliente=OC,estado='PENDIENTE').values('pk'))
					aux['pk']=obj['pk']
					aux['pkCierre']=consulta1[0]['pk']
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
				else:
					aux['pk']=obj['pk']
					aux['pkCierre']='-1'
					aux['nombre']=obj['nombre']
					aux['Apellido_paterno']=obj['Apellido_paterno']
					aux['Apellido_materno']=obj['Apellido_materno']
					lista.append(aux)
			 
			data= json.dumps(lista)
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'+str(sys.exc_info()[1])

	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def ActualizarBarraDivision_view(request):
	exito=''
	if request.is_ajax:
		try:
			idBarra=request.GET.get('idBarraDivision')
			idCliente=request.GET.get('idCliente')
			idCierre=request.GET.get('idCierre')
			onza=request.GET.get('onza')
			precioOnza=request.GET.get('precioOnza')
			descuento=request.GET.get('descuento')
			fecha=request.GET.get('fecha')
			if fecha!='' and fecha!=None:
				fecha1= datetime.strptime(fecha, '%Y-%m-%d')
			else:
				fecha1=datetime.now().strftime("%Y-%m-%d")

			if onza==None or onza=='':
				onza=0

			if precioOnza==None or precioOnza=='':
				precioOnza=0

			if descuento==0 or descuento=='':
				descuento=0

			with transaction.atomic():
				if not BarrasDivision.objects.filter(pk=idBarra).exists():
					OCCC=CierreCompraCliente.objects.get(pk=idCierre,id_cliente=idCliente)
					OC=Cliente.objects.get(pk=idCliente)
					bd = BarrasDivision(fecha=fecha1,onzas=onza,precioOnzas=precioOnza,descuento=descuento,id_cliente=OC,id_cierre_compra_cliente=OCCC)
					bd.save()
					exito=bd.pk
				else:
					BarrasDivision.objects.select_for_update().filter(pk=idBarra).update(fecha=fecha1,onzas=onza,precioOnzas=precioOnza,descuento=descuento)
					exito=idBarra
				 
		except IntegrityError:
			exito='fail'#+str(sys.exc_info()[1])
		except:
			exito='fail'#+str(sys.exc_info()[1])

	else:
		exito='fail'

	data= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def eliminarRegistroCompra_view(request):
	if request.is_ajax:
		idR=request.GET.get('idR')
		try:
			with transaction.atomic():
				BarrasDivision.objects.filter(pk=idR).delete()
				exito='exito'
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail1 '+ str(sys.exc_info()[1])
	else:
		exito='fail'
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def CrearTransferencia_base_externo_view(request):#encargado de crear transferencias
	dniM=request.POST.get('valorCHB','')
	nroCtaBanco=request.POST.get('NroCta','')
	idCliente=request.POST.get('IdCliente','')#capturamos los atributos del formulario
	idBeneficiado=request.POST.get('IdBeneficiado','')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','TipoPersona','DniRucCln','NombreCln','PaternoCln','MaternoCln','DireccionCln','NombreBnf','PaternoBnf','MaternoBnf','OficinaDst','SucursalDst','moneda','txtCantidad','txtComicion','obs',)
	DniRucCliente= request.POST.get('DniRucCln','')
	NombreCliente= request.POST.get('NombreCln')
	A_paternoCliente= request.POST.get('PaternoCln')
	A_maternoCliente= request.POST.get('MaternoCln')
	#DireccionCliente= request.POST.get('DireccionCln')
	TipoPersonaBen=request.POST.get('TipoPersonaB')
	DniRucBen= request.POST.get('DniRucB','')
	NombreBenef= request.POST.get('NombreBnf')
	A_paternoBenef= request.POST.get('PaternoBnf')
	A_maternoBenef = request.POST.get('MaternoBnf')
	celular = request.POST.get('CelularBnf','')
	celularCli = request.POST.get('CelularCli','')
	OficinaDestino = request.POST.get('OficinaDst')#si b1,b2,b3 (baseExterna pk)
	BaseOrigen = request.POST.get('OficinaOri')
	Moneda= request.POST.get('moneda')
	Monto= request.POST.get('Monto')
	Comicion = request.POST.get('comicion')
	CodigoA = request.POST.get('CodigoAut')
	Observaciones = request.POST.get('obs','')
	montoconcepto= request.POST.get('MontoConcepto')
	conceptoDetalle= request.POST.get('conceptoDet','')
	transac_= request.POST.get('transac')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	usr=request.user.username
	recibo_obs=Observaciones
	recibo_det=conceptoDetalle
	ODes= ''
	ODir=''
	idSTRecibo=''
	soliAp=''
	soli=''
	beneAp=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	transac=''
	canti=0
	obsvino=''
	exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
	C= Cajas.objects.get(id_usuario__usuario=usr)
	asociado= saldo_disponible_asociado(C.pk)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if NombreBenef != None:
		if DniRucCliente == None:
			DniRucCliente=''
		if montoconcepto ==''or montoconcepto == None:
			montoconcepto=0
		else:
			montoconcepto = ConvertirDecimal(montoconcepto)

		if TipoPersona ==''or TipoPersona == None:
			TipoPersona='Natural'
		try:
			with transaction.atomic():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					bene=NombreBenef
					beneAp=A_paternoBenef+' '+A_maternoBenef
					soli=NombreCliente
					soliAp=A_paternoCliente+' '+A_maternoCliente
					#*********
					cod_aut=False
					if CodigoA!=None and CodigoA != '':
						if Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).exists():
							cod_aut=True
					ver_st=True
					if OficinaDestino.isdigit():
						if not cod_aut:
							if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=BaseOrigen,id_caja=0).exists():
								confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=BaseOrigen,id_caja=0).values('comision')
								if float(confco[0]['comision'])<1:
									comi_ing=int(float(confco[0]['comision'])*float(Monto))
									if comi_ing<=float(Comicion):
										ver_st=True
									else:
										ver_st=False
								else:
									if float(confco[0]['comision'])<=float(Comicion):
										ver_st=True
									else:
										ver_st=False
					else:
						if OficinaDestino[0]=='b':
							if not cod_aut:
								if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_ori=BaseOrigen,base_des=OficinaDestino[1:]).exists():
									confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_ori=BaseOrigen,base_des=OficinaDestino[1:]).values('comision')
									if float(confco[0]['comision'])<1:
										comi_ing=int(float(confco[0]['comision'])*float(Monto))
										if comi_ing<=float(Comicion):
											ver_st=True
										else:
											ver_st=False
									else:
										if float(confco[0]['comision'])<=float(Comicion):
											ver_st=True
										else:
											ver_st=False
						else:
							if not cod_aut:
								if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_ori=BaseOrigen,id_caja=OficinaDestino[1:]).exists():
									confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_ori=BaseOrigen,id_caja=OficinaDestino[1:]).values('comision')
									if float(confco[0]['comision'])<1:
										comi_ing=int(float(confco[0]['comision'])*float(Monto))
										if comi_ing<=float(Comicion):
											ver_st=True
										else:
											ver_st=False
									else:
										if float(confco[0]['comision'])<=float(Comicion):
											ver_st=True
										else:
											ver_st=False

					if ver_st:
						sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,dni=DniRucCliente).values('pk')
						sqb=Cliente.objects.filter(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,dni=DniRucBen).values('pk')

						if idCliente == '' or idCliente== None:
							if sq.count()==0:
								cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
						else:
							Cliente.objects.select_for_update().filter(id=idCliente).update(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona)

						if idBeneficiado == '' or idBeneficiado== None:
							if sqb.count()==0:
								cln = Cliente(dni=DniRucBen,nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,tipo_persona=TipoPersonaBen,idCaja=C.pk)
								cln.save()
								idBeneficiado = str(cln.pk)
							else:
								lista5= list(sqb)
								idBeneficiado= str(lista5[0]['pk'])
						else:
							Cliente.objects.select_for_update().filter(id=idBeneficiado).update(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef)


						Comi= ConvertirDecimal(Comicion)
						CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if Comi >= CE.comision_minima and montoconcepto >= CE.otros_conceptos_minimo:
							#base ext
							ci=None
							bDes=''
							if OficinaDestino[0]=='b':
								bDes=OficinaDestino[1:]
								bx=Base_Ext.objects.get(pk=OficinaDestino[1:])
								OficinaDestino= bx.id_confSis.id_oficina.pk
								ci=bx.id_confSis.id_caja
							if str(OficinaDestino)[0]=='c':
								#bDes=OficinaDestino[1:]
								ci=Cajas.objects.get(pk=OficinaDestino[1:])
								obsvino=ci.nombre+ " /"
								OficinaDestino= ci.id_oficina.pk
							#configuracion montos maximos en STs
							bnd_mt_st=True
							if ci == None:
								of_de=Oficina.objects.get(pk=OficinaDestino)
								ci=Cajas.objects.get(id_usuario=of_de.id_usuario.pk)
							CE_D= ConfiguracionExtra_caja.objects.get(id_oficina=OficinaDestino,id_caja=ci.pk)
							if  float(CE_D.monto_tope_st)>0 and  float(Monto)>float(CE_D.monto_tope_st):
								bnd_mt_st=False
							if bnd_mt_st:
								comi1=str(Comicion)
								Cantidad= ConvertirDecimal(Monto)
								capi1=str(Monto)
								otros1=str(montoconcepto)
								Ingres= Cantidad+Comi+montoconcepto
								canti=str(Ingres)
								#C = Cajas.objects.get(id_usuario__usuario=usr)
								cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
								idSaldo= str(cons_saldo.pk)
								SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
								SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
								

								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroST)+1
								nroReci=numeroR
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroST=numeroR)
								if Moneda=='dolares':
									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									Cli= Cliente.objects.get(pk=idCliente)
									OD= Oficina.objects.get(pk=OficinaDestino)#destino
									ODes=OD.nombre_oficina
									ODir=OD.direccion
									saldo= SaldoDolares+Ingres
									SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldo)
									transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='transferencias',tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
									transferencia.save()
									idCajaD=transferencia.pk
									Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=obsvino + Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,aux1=idBeneficiado,dniMenor=dniM,nroCta=nroCtaBanco)
									Stransferencia.save()
									idSTRecibo=Stransferencia.pk

									#be= Base_Ext.objects.get(pk=BaseOrigen)
									stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_ori=BaseOrigen,id_base_des=bDes)
									stbe.save()
									if cod_aut:
										Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())
									#socket
									if celular != None and celular!="":
											Cliente.objects.filter(pk=idBeneficiado).update(telefono=celular)
											aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a "+OD.direccion +"\nAtte. Consorcio Imperial"
											sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
											sms.save()
											aux_host= host_socket_io()
											aux_puerto= puerto_socket_io()
											mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
											with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
												socketIO.emit('mensaje_imperial',mensaje)
									else:
										clB=Cliente.objects.get(pk=idBeneficiado)
										if clB.telefono!= None and clB.telefono!='':
											sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
											sms.save()
											aux_host= host_socket_io()
											aux_puerto= puerto_socket_io()
											mensaje={'numero':clB.telefono,'sms':aux_sms,'id':sms.pk}
											with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
												socketIO.emit('mensaje_imperial',mensaje)

									if celularCli != None and celularCli!="":
										Cliente.objects.filter(pk=idCliente).update(telefono=celularCli)
										aux_sms="Sr(a). "+soli+"\nGracias por su preferencia!\nAtte. Consorcio Imperial"
										aux_host= host_socket_io()
										aux_puerto= puerto_socket_io()
										mensaje={'numero':celularCli,'sms':aux_sms,'id':'-1'}
										with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
											socketIO.emit('mensaje_imperial',mensaje)
									else:
										clS=Cliente.objects.get(pk=idCliente)
										if clS.telefono!= None and clS.telefono!='':
											aux_sms="Sr(a). "+soli+"\nGracias por su preferencia!\nAtte. Consorcio Imperial"
											aux_host= host_socket_io()
											aux_puerto= puerto_socket_io()
											mensaje={'numero':clS.telefono,'sms':aux_sms,'id':'-1'}
											with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
												socketIO.emit('mensaje_imperial',mensaje)
									#endsocket
									exito='exito'
								elif Moneda=='soles':
									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									Cli= Cliente.objects.get(pk=idCliente)
									OD= Oficina.objects.get(pk=OficinaDestino)#destino
									ODes=OD.nombre_oficina
									ODir=OD.direccion
									saldo= SaldoSoles+Ingres
									SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo)
									transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='transferencias',tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
									transferencia.save()
									idCajaD=transferencia.pk
									Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=obsvino + Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,aux1=idBeneficiado,dniMenor=dniM,nroCta=nroCtaBanco)
									Stransferencia.save()
									idSTRecibo=Stransferencia.pk

									stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_ori=BaseOrigen,id_base_des=bDes)
									stbe.save()
									if cod_aut:
										Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())
									#socket
									if celular != None and celular!="":
										Cliente.objects.filter(pk=idBeneficiado).update(telefono=celular)
										aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a "+OD.direccion +"\nAtte. Consorcio Imperial"
										sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
										sms.save()
										aux_host= host_socket_io()
										aux_puerto= puerto_socket_io()
										mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
										with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
											socketIO.emit('mensaje_imperial',mensaje)
									else:
										clB=Cliente.objects.get(pk=idBeneficiado)
										if clB.telefono!= None and clB.telefono!='':
											sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
											sms.save()
											aux_host= host_socket_io()
											aux_puerto= puerto_socket_io()
											mensaje={'numero':clB.telefono,'sms':aux_sms,'id':sms.pk}
											with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
												socketIO.emit('mensaje_imperial',mensaje)

									if celularCli != None and celularCli!="":
										Cliente.objects.filter(pk=idCliente).update(telefono=celularCli)
										aux_sms="Sr(a). "+soli+"\nGracias por su preferencia!\nAtte. Consorcio Imperial"
										aux_host= host_socket_io()
										aux_puerto= puerto_socket_io()
										mensaje={'numero':celularCli,'sms':aux_sms,'id':'-1'}
										with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
											socketIO.emit('mensaje_imperial',mensaje)
									else:
										clS=Cliente.objects.get(pk=idCliente)
										if clS.telefono!= None and clS.telefono!='':
											aux_sms="Sr(a). "+soli+"\nGracias por su preferencia!\nAtte. Consorcio Imperial"
											aux_host= host_socket_io()
											aux_puerto= puerto_socket_io()
											mensaje={'numero':clS.telefono,'sms':aux_sms,'id':'-1'}
											with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
												socketIO.emit('mensaje_imperial',mensaje)
									#endsocket
									exito='exito'
								else:
									exito='fail'
							else:
								exito='El monto que esta enviando es muy alto para: '+ci.id_oficina.nombre_oficina+'. Solo puede enviar hasta '+str(CE_D.monto_tope_st)
						else:
							exito=' comision u Otros Conceptos demasiado bajo... comuniquese con el gerente'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	env_p=envio_pendiente(C.pk)
	return render(request,"CrearTransExt.html",{"aso_e":asociado['e'],"aso_me":asociado['me'],"aso_ss":asociado['ss'],"aso_sd":asociado['sd'],"aso_mt":asociado['mt'],"env":env_p,"transac":transac,"resultado":exito,"cargo":cargo,"idST":idSTRecibo,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":canti,"comisionRecibo":comi1,"capitalRecibo":capi1,"otrosRecibo":otros1,"monedaRecibo":Moneda,"oficinadestino":ODes,"direccionofi":ODir,"nrorecibo":nroReci,"bene":bene,"beneAp":beneAp,"soli":soli,"soliAp":soliAp,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'recibo_obs':recibo_obs,'recibo_det':recibo_det,'celular':celular} )


#*************** cierres caja externa ***************
@login_required
def cierreCajaGlobal_tem_view(request):
	pko = request.POST.get('OficinaOri')
	pkca = request.POST.get('CajaOri')
	usr=request.user.username
	pkc=''
	caja=''
	oficina=''
	operador=''
	tipoSis=''
	try:
		C= Cajas.objects.get(id_usuario__usuario=usr)
		if conf_oficinas_para_TransGlobal.objects.filter(id_conf__id_caja=C.pk,id_conf__Trans_global='si',id_oficina=pko).exists():
			o= Oficina.objects.get(pk=pko)
			cajaglo=None
			if pkca != None and  pkca != '0' and  pkca != '':
				cajaglo= Cajas.objects.get(pk=pkca)
			else:
				cajaglo= Cajas.objects.get(id_usuario=o.id_usuario.pk)
			pkc = cajaglo.pk
			caja = cajaglo.nombre
			oficina = o.nombre_oficina
			operador = cajaglo.id_usuario.nombre +' '+cajaglo.id_usuario.Apellido_paterno+' '+cajaglo.id_usuario.Apellido_materno
			if TConfiguracionSistema.objects.filter(id_caja=pkc).exists():
				ts=TConfiguracionSistema.objects.get(id_caja=pkc)
				tipoSis=ts.tipoSistema
	except:
		pko=-1
	return render(request,"cerrarCajaGlobal.html",{"reim":"no","pko":pko,"pkc":pkc,"caja":caja,"oficina":oficina,"operador":operador,"tipoSis":tipoSis} )

@login_required
def ver_cierre_global_caja_view(request):
	#pko = request.POST.get('pkO')
	pkc = request.POST.get('pkC')
	ca= Cajas.objects.get(pk=pkc)
	obs= request.POST.get('obs','')
	#caja = request.POST.get('caja')
	oficina = ca.id_oficina.nombre_oficina
	operador = ca.id_usuario.nombre + ' '+ ca.id_usuario.Apellido_paterno +' '+ca.id_usuario.Apellido_materno
	debe_soles = request.POST.get('is')
	haber_soles = request.POST.get('es')
	debe_dolares = request.POST.get('id')
	haber_dolares = request.POST.get('ed')
	saldo_soles = request.POST.get('ss')
	saldo_dolares = request.POST.get('sd')
	#saldo_material=request.POST.get('sm')
	saldo_inicial_soles = request.POST.get('sis')
	saldo_inicial_dolares = request.POST.get('sid')
	#saldo_inicial_material=request.POST.get('sim')
	fechad = request.POST.get('F1')
	fechah = request.POST.get('F2')
	fechac = request.POST.get('fc')
	tipoSis=''
	if TConfiguracionSistema.objects.filter(id_caja=pkc).exists():
		ts=TConfiguracionSistema.objects.get(id_caja=pkc)
		tipoSis=ts.tipoSistema
	return render(request,"cerrarCajaGlobal.html",{"reim":"si","pkc":pkc,"oficina":oficina,"operador":operador,"sis":saldo_inicial_soles,"sid":saldo_inicial_dolares,"fd":fechad,"fh":fechah,"fc":fechac,"tipoSis":tipoSis,'obs':obs} )

@login_required
@transaction.atomic
def cerrarCajaSDGlobal_ajax_view(request):
	data=''
	if request.is_ajax:
		pkc = request.GET.get('pkC')
		ingresoS=request.GET.get('IS')
		ingresoD=request.GET.get('ID')
		egresoS=request.GET.get('ES')
		egresoD=request.GET.get('ED')
		saldoS=request.GET.get('SS')
		saldoD=request.GET.get('SD')
		fdesde=request.GET.get('fd','')#----
		fhasta=request.GET.get('fh','')#----
		obse= request.GET.get('obs','')
		ingresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoS)))
		ingresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoD)))
		egresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoS)))
		egresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoD)))
		saldoS=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoS)))
		saldoD=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoD)))
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(pk=pkc)
			with transaction.atomic():
				if fdesde !='' and fhasta!='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta= datetime.strptime(fhasta, '%Y-%m-%d')
				elif fdesde !='' and fhasta=='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta=fecha_desde
				else:
					fecha_desde=date.today()
					fecha_hasta=fecha_desde
				if not CajaCierre.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists():
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					if CajaCierre.objects.filter(id_caja=C.pk,estado="cancelado").exists():
						Uc= CajaCierre.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
						SI_soles=float(Uc.saldo_soles)
						SI_dolares=float(Uc.saldo_dolares)
					else:
						Sin=SaldoInicialCaja.objects.get(id_caja=C.pk)
						SI_soles=float(Sin.saldo_soles)
						SI_dolares=float(Sin.saldo_dolares)
					saldoS= SI_soles + ingresoS - egresoS
					saldoD =SI_dolares + ingresoD - egresoD
					#if C.id_oficina.id_usuario.pk == C.id_usuario.pk:
					cierre= CajaCierre(id_oficina= C.id_oficina,id_caja=C,totalDebeSoles=ingresoS,totalDebeDolares=ingresoD,totalHaberSoles=egresoS,totalHaberDolares=egresoD,observaciones=obse,saldo_soles=saldoS,saldo_dolares=saldoD,fechaDesde=fecha_desde,fechaHasta=fecha_hasta,estado='cerrado',saldoInicial_soles=SI_soles,saldoInicial_dolares=SI_dolares)
					cierre.save()
					
					SI= SaldoInicialCaja.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=saldoS,saldo_dolares=saldoD)
					data='exito'
				else:
					data= 'caja cerrada'
		except IntegrityError:
			data='fail'+ str(sys.exc_info()[1])
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)



@login_required
@transaction.atomic
def modificarBeneficiado_ajax(request):
	data=''
	if request.is_ajax:
		idB=request.GET.get('IdBeneficiado','')
		idST=request.GET.get('idST')
		nombreB=request.GET.get('nombreB')
		dniB=request.GET.get('dniB','')
		apB=request.GET.get('apB')
		amB=request.GET.get('amB')
		dniM=request.GET.get('dniMenor')
		cambio=request.GET.get('cambio','')#'si','no'
		error=''
		exito=''
		idCliente=''
		usr = request.user.username
		u= Personal.objects.get(usuario=usr)
		C=Cajas.objects.get(id_usuario=u.pk)
		try:
			with transaction.atomic():
				if SolicitudTransferencia.objects.filter(pk=idST,idCajaDebe__estadoTransaccion='activo').exists():
					OST=SolicitudTransferencia.objects.get(pk=idST,idCajaDebe__estadoTransaccion='activo')
					if QuitarEspacios(idB) =='' or idB ==None:
						if cambio=='si':#cambio
							if not Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).exists():
								Cli=Cliente(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB)
								Cli.save()
								SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,id_beneficiario=Cli.pk,dniMenor=dniM)
							else:
								lista5= list(Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).values('pk'))
								idCliente= lista5[0]['pk']
								Cli=Cliente.objects.get(pk=idCliente)
								SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,id_beneficiario=Cli.pk,dniMenor=dniM)
						else:#correccion
							if not Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).exists():
								Cliente.objects.filter(pk=OST.id_beneficiario).update(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB,dni=dniB)
								SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,dniMenor=dniM)
							else:
								lista5= list(Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).values('pk'))
								idCliente= lista5[0]['pk']
								Cli=Cliente.objects.get(pk=idCliente)
								SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,id_beneficiario=Cli.pk,dniMenor=dniM)
					else:
						Cli=Cliente.objects.get(pk=idB)
						SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,id_beneficiario=Cli.pk,dniMenor=dniM)
					#SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,aux1=idCliente,dniMenor=dniM)
					exito='1'
				else:
					exito='-1'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def modificarBeneficiado_st_banco_ajax(request):
	data=''
	if request.is_ajax:
		idB=request.GET.get('IdBeneficiado','')
		idST=request.GET.get('idST')
		nombreB=request.GET.get('nombreB')
		dniB=request.GET.get('dniB','')
		apB=request.GET.get('apB')
		amB=request.GET.get('amB')
		dniM=request.GET.get('dniMenor')
		cambio=request.GET.get('cambio','')#'si','no'
		error=''
		exito=''
		idCliente=''
		usr = request.user.username
		u= Personal.objects.get(usuario=usr)
		C=Cajas.objects.get(id_usuario=u.pk)
		try:
			with transaction.atomic():
				if SolicitudTransferenciaBancoa.objects.filter(pk=idST,idCajaDebe__estadoTransaccion='activo').exists():
					OST=SolicitudTransferenciaBancoa.objects.get(pk=idST,idCajaDebe__estadoTransaccion='activo')
					if QuitarEspacios(idB) =='' or idB ==None:
						if cambio=='si':#cambio
							if not Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).exists():
								Cli=Cliente(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB)
								Cli.save()
								SolicitudTransferenciaBancoa.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,paterno_beneficiado=apB,materno_beneficiado=amB,id_beneficiario=Cli.pk)
							else:
								lista5= list(Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).values('pk'))
								idCliente= lista5[0]['pk']
								Cli=Cliente.objects.get(pk=idCliente)
								SolicitudTransferenciaBancoa.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,paterno_beneficiado=apB,materno_beneficiado=amB,id_beneficiario=Cli.pk)
						else:#correccion
							if not Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).exists():
								Cliente.objects.filter(pk=OST.id_beneficiario).update(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB,dni=dniB)
								SolicitudTransferenciaBancoa.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,paterno_beneficiado=apB,materno_beneficiado=amB)
							else:
								lista5= list(Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).values('pk'))
								idCliente= lista5[0]['pk']
								Cli=Cliente.objects.get(pk=idCliente)
								SolicitudTransferenciaBancoa.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,paterno_beneficiado=apB,materno_beneficiado=amB,id_beneficiario=Cli.pk)
					else:
						Cli=Cliente.objects.get(pk=idB)
						SolicitudTransferenciaBancoa.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,paterno_beneficiado=apB,materno_beneficiado=amB,id_beneficiario=Cli.pk)
					#SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(dni_beneficiado=dniB,nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,aux1=idCliente,dniMenor=dniM)
					exito='1'
				else:
					exito='-1'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def modificarSolicitante_ajax(request):
	data=''
	if request.is_ajax:
		idSo=request.GET.get('IdCliente','')
		idST=request.GET.get('idST')
		nombreB=request.GET.get('nombreS')
		dniB=request.GET.get('dniS','')
		apB=request.GET.get('apS')
		amB=request.GET.get('amS')
		#dniM=request.GET.get('dniMenor')
		error=''
		exito=''
		idCliente=''
		usr = request.user.username
		u= Personal.objects.get(usuario=usr)
		C=Cajas.objects.get(id_usuario=u.pk)
		try:
			with transaction.atomic():
				if SolicitudTransferencia.objects.filter(pk=idST,idCajaDebe__estadoTransaccion='activo').exists():
					OST=SolicitudTransferencia.objects.get(pk=idST,idCajaDebe__estadoTransaccion='activo')
					if QuitarEspacios(idSo) =='' or idso ==None:
						if not Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).exists():
							Cliente.objects.filter(pk=OST.id_cliente.pk).update(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB,dni=dniB)
						else:
							lista5= list(Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).values('pk'))
							idCliente= lista5[0]['pk']
							Cli=Cliente.objects.get(pk=idCliente)
							SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(id_cliente=Cli)
					else:
						Cli=Cliente.objects.get(pk=idSo)
						SolicitudTransferencia.objects.select_for_update().filter(pk=idST,idCajaDebe__estadoTransaccion='activo').update(id_cliente=Cli)
					exito='1'
				else:
					exito='-1'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
@transaction.atomic
def modificarBeneficiadoSI_ajax(request):
	data=''
	if request.is_ajax:
		idSI=request.GET.get('idSI')
		nombreB=request.GET.get('nombreB')
		apB=request.GET.get('apB')
		amB=request.GET.get('amB')
		error=''
		exito=''
		idCliente=''
		usr = request.user.username
		u= Personal.objects.get(usuario=usr)
		C=Cajas.objects.get(id_usuario=u.pk)
		try:
			with transaction.atomic():
				if Intercambio.objects.filter(pk=idSI,idCajaDebe__estadoTransaccion='activo').exists():
					OSI=Intercambio.objects.get(pk=idSI,idCajaDebe__estadoTransaccion='activo')
					
					if not Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).values('pk').exists():
						cln = Cliente(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB,tipo_persona='')
						cln.save()
						idCliente = cln.pk
					else:
						lista5= list(Cliente.objects.filter(nombre=nombreB,Apellido_paterno=apB,Apellido_materno=amB).values('pk'))
						idCliente= lista5[0]['pk']
					Cliente.objects.filter(pk=idCliente).update(verificado=True)
					Cli=Cliente.objects.get(pk=idCliente)
					bst = BeneficiadoSI(idSI=OSI,id_personal=u,id_cliente=Cli)
					bst.save()
					Intercambio.objects.select_for_update().filter(pk=idSI,idCajaDebe__estadoTransaccion='activo').update(nombre_beneficiado=nombreB,Apellido_paterno_beneficiado=apB,Apellido_materno_beneficiado=amB,aux1=idCliente)
					exito='1'
				else:
					exito='-1'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

def admin_cerrar(pkc,fecha):
	re=True
	exito=""
	try:
		C = Cajas.objects.get(pk=pkc)
		horamin= datetime.combine(fecha,dtime_.time.min)
		horamax= datetime.combine(fecha,dtime_.time.max)
		debe= TCajaDebe.objects.filter(id_caja=C.pk,fecha__range=(horamin,horamax)).values('pk','moneda','cantidadDinero')
		haber= TCajaHaber.objects.filter(id_caja=C.pk,fecha__range=(horamin,horamax)).values('pk','moneda','cantidadDinero')
		Uc= CajaCierre.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
		SI_soles=float(Uc.saldo_soles)
		SI_dolares=float(Uc.saldo_dolares)
		ins=debe.filter(moneda='soles').aggregate(Sum('cantidadDinero'))
		ind=debe.filter(moneda='dolares').aggregate(Sum('cantidadDinero'))
		es=haber.filter(moneda='soles').aggregate(Sum('cantidadDinero'))
		ed=haber.filter(moneda='dolares').aggregate(Sum('cantidadDinero'))
		ingresoS=0
		if ins['cantidadDinero__sum'] != None:
			ingresoS=float(ins['cantidadDinero__sum'])
		egresoS=0
		if es['cantidadDinero__sum'] != None:
			egresoS=float(es['cantidadDinero__sum'])
		ingresoD=0
		if ind['cantidadDinero__sum'] != None:
			ingresoD=float(ind['cantidadDinero__sum'])
		egresoD=0
		if ed['cantidadDinero__sum'] != None:
			egresoD=float(ed['cantidadDinero__sum'])
		saldoS= SI_soles + ingresoS - egresoS
		saldoD =SI_dolares + ingresoD - egresoD
		cierre= CajaCierre(id_oficina= C.id_oficina,id_caja=C,totalDebeSoles=ingresoS,totalDebeDolares=ingresoD,totalHaberSoles=egresoS,totalHaberDolares=egresoD,observaciones='Cerrado por Sistema',saldo_soles=saldoS,saldo_dolares=saldoD,fechaDesde=fecha,fechaHasta=fecha,estado='cerrado',saldoInicial_soles=SI_soles,saldoInicial_dolares=SI_dolares)
		cierre.save()
		SI= SaldoInicialCaja.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=saldoS,saldo_dolares=saldoD)
		re=True
		exito="exito"
	except:
		re=False
		exito=str(sys.exc_info()[1])
	return re,exito
	
@login_required
@permission_required('Main.add_oficina')
def actualizarCieres_caja_admin(request):
	if request.is_ajax:
		data=''
		pkc = request.GET.get('idCaja')
		F1 = request.GET.get('fechai')
		F2 = request.GET.get('fechaf')
		fecha1= datetime.strptime(F1, '%Y-%m-%d')
		fecha2= datetime.strptime(F2, '%Y-%m-%d')
		if not CajaCierre.objects.filter(id_caja=pkc,fechaDesde__gte=fecha1,fechaHasta__lte=fecha2,estado='cerrado').exists() and fecha2.date() < date.today():
			while fecha1<=fecha2:
				re,exito=admin_cerrar(pkc,fecha1)
				if(re):
					nf= fecha1 + timedelta(days=1)
					fecha1= nf
					data='exito'
				else:
					data='no se completo el cierre ' +exito
					break
		else:
			data="error en rango de fechas"
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)

def admin_cerrar_material(pkc,fecha):
	re=True
	exito=""
	try:
		C = Cajas.objects.get(pk=pkc)
		horamin= datetime.combine(fecha,dtime_.time.min)
		horamax= datetime.combine(fecha,dtime_.time.max)
		debe= TCajaDebeM.objects.filter(id_caja=C.pk,fecha__range=(horamin,horamax)).values('pk','moneda','cantidadDinero')
		haber= TCajaHaberM.objects.filter(id_caja=C.pk,fecha__range=(horamin,horamax)).values('pk','moneda','cantidadDinero')
		debe_m =TCajaMaterialDebe.objects.filter(id_caja=C.pk,fecha__range=(horamin,horamax)).values('pk','pesoGramos')
		haber_m= TCajaMaterialHaber.objects.filter(id_caja=C.pk,fecha__range=(horamin,horamax)).values('pk','pesoGramos')
		
		Uc= CajaCierreMaterial.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
		SI_soles=float(Uc.saldo_soles)
		SI_dolares=float(Uc.saldo_dolares)
		SI_material=float(Uc.saldo_material)

		ins=debe.filter(moneda='soles').aggregate(Sum('cantidadDinero'))
		ind=debe.filter(moneda='dolares').aggregate(Sum('cantidadDinero'))
		es=haber.filter(moneda='soles').aggregate(Sum('cantidadDinero'))
		ed=haber.filter(moneda='dolares').aggregate(Sum('cantidadDinero'))
		ingresoS=0
		if ins['cantidadDinero__sum'] != None:
			ingresoS=float(ins['cantidadDinero__sum'])
		egresoS=0
		if es['cantidadDinero__sum'] != None:
			egresoS=float(es['cantidadDinero__sum'])
		ingresoD=0
		if ind['cantidadDinero__sum'] != None:
			ingresoD=float(ind['cantidadDinero__sum'])
		egresoD=0
		if ed['cantidadDinero__sum'] != None:
			egresoD=float(ed['cantidadDinero__sum'])

		inm = debe_m.aggregate(Sum('pesoGramos'))
		em = haber_m.aggregate(Sum('pesoGramos'))
		ingresoM=0
		if inm['pesoGramos__sum'] != None:
			ingresoM=float(inm['pesoGramos__sum'])
		egresoM=0
		if em['pesoGramos__sum'] != None:
			egresoM=float(em['pesoGramos__sum'])

		saldoS= SI_soles + ingresoS - egresoS
		saldoD =SI_dolares + ingresoD - egresoD
		saldoM =SI_material + ingresoM - egresoM

		cierre= CajaCierreMaterial(id_oficina= C.id_oficina,id_caja=C,totalDebeSoles=ingresoS,totalDebeDolares=ingresoD,totalDebeMaterial=ingresoM,totalHaberSoles=egresoS,totalHaberDolares=egresoD,totalHaberMaterial=egresoM,observaciones='Cerrado por Sistema',saldo_soles=saldoS,saldo_dolares=saldoD,saldo_material=saldoM,fechaDesde=fecha,fechaHasta=fecha,estado='cerrado',saldoInicial_soles=SI_soles,saldoInicial_dolares=SI_dolares,saldoInicial_material=SI_material)
		cierre.save()

		SI= SaldoInicialCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=saldoS,saldo_dolares=saldoD,saldo_material=saldoM)
		re=True
		exito="exito"
	except:
		re=False
		exito=str(sys.exc_info()[1])
	return re,exito
	
@login_required
@permission_required('Main.add_oficina')
def actualizarCieresMaterial_caja_admin(request):
	if request.is_ajax:
		data=''
		pkc = request.GET.get('idCaja')
		F1 = request.GET.get('fechai')
		F2 = request.GET.get('fechaf')
		fecha1= datetime.strptime(F1, '%Y-%m-%d')
		fecha2= datetime.strptime(F2, '%Y-%m-%d')
		if not CajaCierreMaterial.objects.filter(id_caja=pkc,fechaDesde__gte=fecha1,fechaHasta__lte=fecha2,estado='cerrado').exists() and fecha2.date() < date.today():
			while fecha1<=fecha2:
				re,exito=admin_cerrar_material(pkc,fecha1)
				if(re):
					nf= fecha1 + timedelta(days=1)
					fecha1= nf
					data='exito'
				else:
					data='no se completo el cierre ' +exito
					break
		else:
			data="error en rango de fechas"
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def CtaAhorrosInsertarPeticionCtaAhorros(request):#encargado de crear transferencias
	data=''
	exito=''
	if request.is_ajax:
		idctaahorros=request.GET.get('idctaahorros')#capturamos los atributos del formulario
		moneda=request.GET.get('moneda')#atributos('IdCliente','TipoPersona','DniRucCln','NombreCln','PaternoCln','MaternoCln','DireccionCln','NombreBnf','PaternoBnf','MaternoBnf','OficinaDst','SucursalDst','moneda','txtCantidad','txtComicion','obs',)
		monto= request.GET.get('monto')
		montoSobregiro= request.GET.get('montoSobregiro')
		interes= request.GET.get('interes')
		tiempo= request.GET.get('tiempo')
		CodigoA= request.GET.get('codAut')
		usr=request.user.username
		C = Cajas.objects.get(id_usuario__usuario=usr)
		cargo =''
		exito='' #en caso de ser exitosala creacion.. devolver un string 'exito'caso contrario retornar'fail'
		Cta= CtaAhorros.objects.get(pk=idctaahorros)

		if tiempo ==''or tiempo == None:
			tiempo=0

		if interes ==''or interes == None:
			interes=0
		else:
			interes = ConvertirDecimal(interes)

		if monto ==''or monto == None:
			monto=0
		else:
			monto = ConvertirDecimal(monto)

		if montoSobregiro=='' or montoSobregiro==None:
			montoSobregiro=0
		else:
			montoSobregiro=ConvertirDecimal(montoSobregiro)

		try:
			with transaction.atomic():
				if not PeticionesCtaAhorros.objects.filter(idctaahorros=idctaahorros,id_personal=C.id_usuario,estado='ESPERANDO').exists(): 
					O=Oficina.objects.get(pk=C.id_oficina.pk)
					peticiones= PeticionesCtaAhorros(idctaahorros= Cta,tipoMoneda=moneda,monto=ConvertirDecimal(monto),estado='ESPERANDO',id_personal=C.id_usuario,saldo=0,montoSobregiro=ConvertirDecimal(montoSobregiro),interesSobregiro=ConvertirDecimal(interes),nroDiasSobregiro=tiempo,id_oficina=O)
					peticiones.save()
					Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=idctaahorros,tipoCta='Ahorros',aux1=montoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())	 
					exito='exito'
				else:
					exito='Solo es admitido una Peticion por Cuenta Corriente'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+str(sys.exc_info()[1])
	
	dato={'resultado':exito}
	data= json.dumps(dato)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#************************** SERVICIOS  DESKTOP **************************************
#****************** logueo desktop **********
@transaction.atomic
def loggin_desktop_ajax_view(request):
	dato={}
	error=''
	exito=''
	usua=request.GET.get('usuario')
	contra=request.GET.get('password')
	mac=request.GET.get('mac')
	if usua!=None and contra!=None and mac != None and len(mac)>=10:
		try:
			with transaction.atomic():
				if Personal.objects.filter(usuario=usua,password=contra).exists():
					P= Personal.objects.get(usuario=usua,password=contra)
					if not Usuario_Desktop.objects.filter(id_usuario=P.pk).exists():
						Ud= Usuario_Desktop(id_usuario=P,mac=mac)
						Ud.save()
						C= Cajas.objects.get(id_usuario=P.pk)
						dato['idUsuario']=C.id_usuario.pk
						lista1=[]
						consulta=list(Oficina.objects.values('pk','nombre_oficina','id_usuario','estado_oficina'))
						for obj in consulta:
							listaCa=[]
							ca= list(Cajas.objects.filter(id_oficina=obj['pk']).values('pk','nombre','id_usuario','estado'))
							for obj1 in ca:
								tpCaja=''
								if obj1['id_usuario']==obj['id_usuario']:
									tpCaja='principal'
								p= Personal.objects.get(pk=obj1['id_usuario'])
								listaCa.append({'idCaja':obj1['pk'],'nombreCaja':obj1['nombre'],'estadoCaja':obj1['estado'],'idOpe':p.pk,'nombreOpe':p.nombre,'apOpe':p.Apellido_paterno,'amOpe':p.Apellido_materno,'tipoCaja':tpCaja})
							lista1.append({'idOficina':obj['pk'],'nombreOficina':obj['nombre_oficina'],'estadoOficina': obj['estado_oficina'] ,'Cajas':listaCa})
						dato['oficinas']=lista1
						#data= json.dumps(dato)
						exito='1'
					else:
						if Usuario_Desktop.objects.filter(id_usuario=P.pk,mac=mac).exists():
							C= Cajas.objects.get(id_usuario=P.pk)
							dato['idUsuario']=C.id_usuario.pk
							lista1=[]
							consulta=list(Oficina.objects.values('pk','nombre_oficina','id_usuario','estado_oficina'))
							for obj in consulta:
								listaCa=[]
								ca= list(Cajas.objects.filter(id_oficina=obj['pk']).values('pk','nombre','id_usuario','estado'))
								for obj1 in ca:
									tpCaja=''
									if obj1['id_usuario']==obj['id_usuario']:
										tpCaja='principal'
									p= Personal.objects.get(pk=obj1['id_usuario'])
									listaCa.append({'idCaja':obj1['pk'],'nombreCaja':obj1['nombre'],'estadoCaja':obj1['estado'],'idOpe':p.pk,'nombreOpe':p.nombre,'apOpe':p.Apellido_paterno,'amOpe':p.Apellido_materno,'tipoCaja':tpCaja})
								lista1.append({'idOficina':obj['pk'],'nombreOficina':obj['nombre_oficina'],'estadoOficina': obj['estado_oficina'],'Cajas':listaCa})
							dato['oficinas']=lista1
							#data= json.dumps(dato)
							exito='1'
						else:
							exito='-1'
							error='error mac autentificacion'
				else:
					exito='-1'
					error='error autentificacion'
		except IntegrityError:
			exito='-1'
			error='error integridad: '+str(sys.exc_info()[1])
		except:
			exito='-1'
			error='error '+ str(sys.exc_info()[1])
	else:
		exito='-1'
		error='error '
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#***************** crear solicitud de trasnferencia... Desktop*******
@transaction.atomic
def CrearTransferenciaDesktop_view(request):#encargado de crear transferencias
	OficinaOr = request.GET.get('OficinaOrg')
	CajaOri = request.GET.get('CajaOrg')
	idCliente=request.GET.get('IdCliente','')#capturamos los atributos del formulario
	TipoPersona=request.GET.get('TipoPersona')
	TipoPersona=TipoPersona.capitalize()
	DniRucCliente= request.GET.get('DniRucCln','')
	NombreCliente= request.GET.get('NombreCln')
	A_paternoCliente= request.GET.get('PaternoCln')
	A_maternoCliente= request.GET.get('MaternoCln')
	#DireccionCliente= request.POST.get('DireccionCln')
	NombreBenef= request.GET.get('NombreBnf')
	A_paternoBenef= request.GET.get('PaternoBnf')
	A_maternoBenef = request.GET.get('MaternoBnf')
	celular = request.GET.get('CelularBnf','')
	OficinaDestino = request.GET.get('OficinaDst')
	BaseOrigen = request.GET.get('BaseOrg','')
	Moneda= request.GET.get('moneda')
	Moneda= str(Moneda).lower()
	Monto= request.GET.get('Monto')
	Comicion = request.GET.get('comision')
	Observaciones = request.GET.get('obs','')
	montoconcepto= request.GET.get('MontoConcepto')
	#transac_= request.GET.get('transac')
	conceptoDetalle= request.GET.get('conceptoDet','')
	idTD= request.GET.get('IdSTOrg')
	mac= request.GET.get('mac')
	CodigoA= request.GET.get('codigo')
	recibo_obs=Observaciones
	recibo_det=conceptoDetalle
	ODes= ''
	ODir=''
	soli=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	canti=0
	transac=''
	nombre_ori=''
	dato={}
	error=''
	exito=''
	if NombreBenef != None:
		if OficinaDestino != OficinaOr:
			if DniRucCliente == None:
				DniRucCliente=''
			if montoconcepto ==''or montoconcepto == None:
				montoconcepto=0
			else:
				montoconcepto = ConvertirDecimal(montoconcepto)

			if TipoPersona ==''or TipoPersona == None:
				TipoPersona='Natural'
			try:
				with transaction.atomic():
					C= Cajas.objects.get(pk=CajaOri)
					if not Transferencias_Desktop.objects.filter(id_solicitud_desktop=idTD,mac=mac).exists() and idTD!= None:
						cod_aut=False
						if CodigoA!=None and CodigoA != '':
							if Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=OficinaDestino).exists():
								cod_aut=True
						ver_st=True
						ofides_original=OficinaDestino
						if BaseOrigen ==None or BaseOrigen=='':
							if OficinaDestino.isdigit():
								if not cod_aut:
									if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino).exists():
										confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino).values('comision')
										if float(confco[0]['comision'])<1:
											comi_ing=int(float(confco[0]['comision'])*float(Monto))
											if comi_ing<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'
										else:
											if float(confco[0]['comision'])<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'
							else:
								if not cod_aut:
									if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=OficinaDestino[1:]).exists():
										confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_des=OficinaDestino[1:]).values('comision')
										if float(confco[0]['comision'])<1:
											comi_ing=int(float(confco[0]['comision'])*float(Monto))
											if comi_ing<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'
										else:
											if float(confco[0]['comision'])<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'
						else:
							if OficinaDestino.isdigit():
								if not cod_aut:
									if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=BaseOrigen).exists():
										confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),id_oficina=OficinaDestino,tipo='subbase',base_ori=BaseOrigen).values('comision')
										if float(confco[0]['comision'])<1:
											comi_ing=int(float(confco[0]['comision'])*float(Monto))
											if comi_ing<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'
										else:
											if float(confco[0]['comision'])<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'
							else:
								if not cod_aut:
									if Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_ori=BaseOrigen,base_des=OficinaDestino[1:]).exists():
										confco= Configuracion_comision.objects.filter(id_config__id_caja=C.pk,montomin__lte=float(Monto),montomax__gte=float(Monto),tipo='subbase',base_ori=BaseOrigen,base_des=OficinaDestino[1:]).values('comision')
										if float(confco[0]['comision'])<1:
											comi_ing=int(float(confco[0]['comision'])*float(Monto))
											if comi_ing<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'
										else:
											if float(confco[0]['comision'])<=float(Comicion):
												ver_st=True
											else:
												ver_st=False
												error='error en comision, usted necesita un codigo de autorizacion valido'

						bene=NombreBenef+', '+A_paternoBenef+' '+A_maternoBenef
						soli=NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente
						sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,dni=DniRucCliente).values('pk')
						if idCliente == '' or idCliente== None:
							if sq.count()==0:
								cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
						Comi= ConvertirDecimal(Comicion)
						CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						bex='no'
						bandera=True
						if BaseOrigen !='' and BaseOrigen != None:
							bex='si'
							if not TConfiguracionSistema.objects.filter(id_caja=C.pk,conf2='externa').exists():
								bandera= False
								error="Actualice las bases"
							else:
								if OficinaDestino[0]=='b' and not Base_Ext.objects.filter(pk=OficinaDestino[1:],id_confSis__conf2='externa').exists():
									bandera=False
									error="Actualice las bases"
								else:
									if not Base_Ext.objects.filter(pk=BaseOrigen,id_confSis__id_caja=C.pk).exists():
										bandera= False
										error="Error en base externa seleccionada"

						if bandera and ver_st: #falta completar update de codigo de autorizacion
							if Comi >= CE.comision_minima and montoconcepto >= CE.otros_conceptos_minimo:
								comi1=str(Comicion)
								Cantidad= ConvertirDecimal(Monto)
								capi1=str(Monto)
								otros1=str(montoconcepto)
								Ingres= Cantidad+Comi+montoconcepto
								canti=str(Ingres)
								cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
								idSaldo= str(cons_saldo.pk)
								SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
								SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroST)+1
								nroReci=numeroR
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroST=numeroR)
								bDes=''
								if OficinaDestino[0]=='b':
									bDes=OficinaDestino[1:]
									bx=Base_Ext.objects.get(pk=OficinaDestino[1:])
									OficinaDestino= bx.id_confSis.id_oficina.pk
								if Moneda=='dolares':
									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									Cli= Cliente.objects.get(pk=idCliente)
									OD= Oficina.objects.get(pk=OficinaDestino)#destino
									ODes=OD.nombre_oficina
									ODir=OD.direccion
									saldo= SaldoDolares+Ingres
									SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_dolares=saldo)
									transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='st-'+str(C.pk)+'-'+C.id_usuario.nombre,tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
									transferencia.save()
									idCajaD=transferencia.pk
									Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto)
									Stransferencia.save()
									td= Transferencias_Desktop(id_solicitud_transferencia=Stransferencia,id_solicitud_desktop=idTD,mac=mac,nroRecibo=nroReci)
									td.save()
									if (BaseOrigen != '' and BaseOrigen != None)or(bDes !='' and bDes != None):
										stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_ori=BaseOrigen,id_base_des=bDes)
										stbe.save()
									if cod_aut:
										Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=ofides_original).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())
									dato={'idSTLocal':idTD,'idSTRemoto':Stransferencia.pk,'nroRecibo':nroReci}
									#socket
									if celular != None and celular!="":
										"""
										aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a: "+OD.direccion +"\nAtte. Consorcio Imperial"
										sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
										sms.save()
										aux_host= host_socket_io();
										aux_puerto= puerto_socket_io();
										mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
										with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
											socketIO.emit('mensaje_imperial',mensaje)
										"""
									#endsocket
									exito='1'
								elif Moneda=='soles':
									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									Cli= Cliente.objects.get(pk=idCliente)
									OD= Oficina.objects.get(pk=OficinaDestino)#destino
									ODes=OD.nombre_oficina
									ODir=OD.direccion
									saldo= SaldoSoles+Ingres
									SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_soles=saldo)
									transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferencia',conceptoDetalle='st-'+str(C.pk)+'-'+C.id_usuario.nombre,tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
									transferencia.save()
									idCajaD=transferencia.pk
									Stransferencia= SolicitudTransferencia(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto)
									Stransferencia.save()
									td= Transferencias_Desktop(id_solicitud_transferencia=Stransferencia,id_solicitud_desktop=idTD,mac=mac,nroRecibo=nroReci)
									td.save()
									if (BaseOrigen != '' and BaseOrigen != None)or(bDes !='' and bDes != None):
										stbe= ST_BaseExterna(id_transferencia=Stransferencia,id_base_ori=BaseOrigen,id_base_des=bDes)
										stbe.save()
									if cod_aut:
										Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_oficina_des=ofides_original).update(id_st=Stransferencia.pk,estado='utilizado',fecha_creacion_st=datetime.now())
									dato={'idSTLocal':idTD,'idSTRemoto':Stransferencia.pk,'nroRecibo':nroReci}
									#socket
									if celular != None and celular!="":
										"""
										aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a la "+OD.direccion +"\nAtte. Consorcio Imperial"
										sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
										sms.save()
										aux_host= host_socket_io();
										aux_puerto= puerto_socket_io();
										mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
										with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
											socketIO.emit('mensaje_imperial',mensaje)
										"""
									#endsocket
									exito='1'
								else:
									exito='-1'
									error='error tipo de moneda'
							else:
								exito='-1'
								error=' comision u Otros Comceptos demasiado bajo... comuniquese con el gerente'
						else:
							exito='-1'
					else:
						if idTD == None:
							exito='-1'
							error='ID trasnferencia invalido'
						else:
							if Transferencias_Desktop.objects.filter(id_solicitud_desktop=idTD,mac=mac).exists():
								TD= Transferencias_Desktop.objects.get(id_solicitud_desktop=idTD,mac=mac)
								exito='1'
								dato={'idSTLocal':idTD,'idSTRemoto':TD.id_solicitud_transferencia.pk,'nroRecibo':TD.nroRecibo}
			except IntegrityError:
				exito='-2'
				error='error de integridad'
			except:
				exito='-2'
				error='fail1'+ str(sys.exc_info()[1])
		else:
			exito='-1'
			error='seleccione una oficina destino valido'
	else:
		exito='-1'
		error='Error'
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)
#****************** extornar transferencia **********************
@transaction.atomic
def extornarTransDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idTr=request.GET.get('idSTRemoto')
		idTrDes=request.GET.get('idSTLocal')
		dnib=request.GET.get('dni','')
		mac=request.GET.get('mac','')
		obsp=request.GET.get('obs','')
		dato={}
		error=''
		exito=''
		tipoEx= 'r'
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if Transferencias_Desktop.objects.filter(id_solicitud_transferencia=idTr,id_solicitud_desktop=idTrDes,mac=mac).count()==1 and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					if SolicitudTransferencia.objects.filter(pk=idTr,idCajaDebe__id_caja=C.pk,idCajaDebe__estadoTransaccion='activo').exists():
						con_st= SolicitudTransferencia.objects.get(pk=idTr,idCajaDebe__id_caja=C.pk,idCajaDebe__estadoTransaccion='activo')
						idTcajaD= str(con_st.idCajaDebe.pk)
						conceptoDetall= 'Extornado a ' + con_st.id_cliente.nombre + ' ' + con_st.id_cliente.Apellido_paterno + ' ' + con_st.id_cliente.Apellido_materno
						Moneda= str(con_st.idCajaDebe.moneda)
						Csaldo= SaldoDisponibleCajas.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
						cons_saldo= list(Csaldo)
						idSaldo= str(cons_saldo[0]['pk'])
						SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
						SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
						MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero) - ConvertirDecimal(con_st.comision)- ConvertirDecimal(con_st.monto_conceptos)
						CE=ConfiguracionExtra_caja.objects.get(id_caja=C.pk)
						if CE.extorno_total=='si':
							MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero)
							TCajaDebe.objects.select_for_update().filter(pk=idTcajaD).update(aux1='todo')
							tipoEx= 'c'
						if Moneda=='soles':
							if SaldoSoles >= MontoEgreso:
								if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
									TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
									saldoEgreso=SaldoSoles-MontoEgreso
									Csaldo.update(saldo_soles=saldoEgreso)
									CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='TtransferenciaExtorno',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
									CajaH.save()
									auxx=SolicitudTransferencia.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

									OST= SolicitudTransferencia.objects.get(pk=idTr)
									EST=ExtornoTransferencia(idCajaHaber=CajaH,id_solicitud_transferencia=OST,observaciones=obsp)
									EST.save()

									#CDebe.update(estadoTransaccion='pagado')
									#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
									exito='1'
									dato={'idSTRemoto':idTr,'idSTLocal':idTrDes ,'tipo':tipoEx}
								else:
									exito='-1'
									error='error en la operacion'
							else:
								exito='-1'
								error="saldo insuficiente"
						elif Moneda=='dolares':
							if SaldoDolares>=MontoEgreso:
								if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
									TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
									saldoEgreso=SaldoDolares-MontoEgreso
									Csaldo.update(saldo_dolares=saldoEgreso)
									CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='TtransferenciaExtorno',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
									CajaH.save()
									auxx=SolicitudTransferencia.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

									OST= SolicitudTransferencia.objects.get(pk=idTr)
									EST=ExtornoTransferencia(idCajaHaber=CajaH,id_solicitud_transferencia=OST,observaciones=obsp)
									EST.save()
									#CDebe.update(estadoTransaccion='pagado')
									#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
									exito="1"
									dato={'idSTRemoto':idTr,'idSTLocal':idTrDes,'tipo':tipoEx}
								else:
									exito='-1'
									error='error en la operacion'
							else:
								exito='-1'
								error="saldo insuficiente"
						else:
							exito='-1'
							error="error moneda"
					else:
						st1=SolicitudTransferencia.objects.get(pk=idTr)
						exito='0'
						dato={'idSTLocal':idTrDes,'idSTRemoto':idTr,'estado':st1.idCajaDebe.estadoTransaccion}
						error= 'la transferencia esta '+st1.idCajaDebe.estadoTransaccion
				else:
					exito='-1'
					error='error verificacion st'
		except IntegrityError:
			exito='-1'
			error="serror de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#******************** transferecnias guardado en desktop ***************
@transaction.atomic
def guardadoTransDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idTr=request.GET.get('idSTRemoto')
		idTrDesktop=request.GET.get('idSTLocal')
		mac=request.GET.get('mac','')
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if SolicitudTransferencia.objects.filter(pk=idTr).exists() and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					if not Transferencias_recibidas_Desktop.objects.filter(id_solicitud_transferencia=idTr,aux2__icontains='.'+str(idCaja)+'.').exists():
						st= SolicitudTransferencia.objects.get(pk=idTr)
						if not Transferencias_recibidas_Desktop.objects.filter(id_solicitud_transferencia=idTr).exists():
							st_recibido= Transferencias_recibidas_Desktop(id_solicitud_transferencia=st,id_solicitud_desktop=idTrDesktop,mac=mac,estado=st.idCajaDebe.estadoTransaccion,aux2='.'+str(idCaja)+'.')
							st_recibido.save()
						else:
							trans_reci_desktop=Transferencias_recibidas_Desktop.objects.get(id_solicitud_transferencia=idTr)
							aux=''
							if trans_reci_desktop.aux2 !=None:
								aux=trans_reci_desktop.aux2
							Transferencias_recibidas_Desktop.objects.filter(id_solicitud_transferencia=idTr).update(aux2=aux+'.'+str(idCaja)+'.')
						exito='1'
					else:
						exito='1'
				else:
					exito='-1'
					error='error verificacion st'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

def id_generator(size=6, chars=string.ascii_lowercase + string.digits):
	return ''.join(random.choice(chars) for _ in range(size))

#******************* pagar transferencias *************************
@transaction.atomic
def PagoTransDesktop_view(request):
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		mac=request.GET.get('mac')
		idTr=request.GET.get('idSTRemoto')
		idTrDesktop=request.GET.get('idSTLocal')
		obsp=request.GET.get('obs','')
		dnib=request.GET.get('dni','')
		egreso_pago=request.GET.get('egreso','')
		cod_aut=request.GET.get('codigo','')
		offline=request.GET.get('offline','')#'si','no'
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				#if Transferencias_recibidas_Desktop.objects.filter(id_solicitud_transferencia=idTr,id_solicitud_desktop=idTrDesktop).count()==1 and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
				if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					monto_egreso_pago=0
					if SolicitudTransferencia.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='activo').exists():
						st= SolicitudTransferencia.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos')
						con_st= list(st)
						idTcajaD= str(con_st[0]['idCajaDebe'])
						CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
						con_CajaDebe= list(CDebe)
						moneda= str(con_CajaDebe[0]['moneda'])
						Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
						cons_saldo= list(Csaldo)
						idSaldo= str(cons_saldo[0]['pk'])
						SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
						SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
						MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
						#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
						if egreso_pago !='':
							monto_egreso_pago=float(egreso_pago)
						aut_ret=True
						if conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
							rta= conf_permisos_Cajas.objects.get(id_caja=C.pk)
							if rta.aux2 !='si':
								aut_ret= False
						if offline=='si':
							aut_ret=False
						SolTr= SolicitudTransferencia.objects.get(pk=idTr)
						delta= datetime.now() - SolTr.idCajaDebe.fecha
						if moneda=='soles':
							if SaldoSoles >= (MontoEgreso+monto_egreso_pago):
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									bandera=True
									if aut_ret:
										if delta.days >=5:
											if cod_aut !='':
												if Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
											else:
												bandera=False
									if bandera:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroPT)+1
										NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
										nr=numeroR
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										idCajaH= CajaH.pk
										idST = SolicitudTransferencia.objects.get(pk=idTr)
										PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
										PagoT.save()
										CDebe.update(estadoTransaccion='pagado')
										if monto_egreso_pago>0:
											numeroR_e=int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
											TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
											TCajaH.save()
											eex= EgresoExtraTransferencia(idCajaHaber=TCajaH,id_pago_transferencia=PagoT,monto=monto_egreso_pago)
											eex.save()
										saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago
										Csaldo.update(saldo_soles=saldoEgreso)
										st.update(dni_beneficiado=dnib)
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										Transferencias_recibidas_Desktop.objects.filter(id_solicitud_transferencia=idTr,id_solicitud_desktop=idTrDesktop,mac=mac).update(estado='pagado')
										exito="1"
										dato={'idSTLocal':idTrDesktop,'idSTRemoto':idTr,'nroRecibo':numeroR}
									else:
										if not Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk).exists():
											srT=Sol_Aut_Ret_Transferencias(id_st=SolTr,codigo_aut=id_generator(),estado='pendiente',id_user_solicitante=C.id_usuario)
											srT.save()
										exito='-2'
										error="Solicite codigo de autorizacion al Gerente"
								else:
									exito='-1'
									error ="error en operacion"
							else:
								exito='-1'
								error="saldo insuficiente"
						elif moneda=='dolares':
							if SaldoDolares>=(MontoEgreso+monto_egreso_pago):
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									bandera=True
									if aut_ret:
										if delta.days >=5:
											if cod_aut !='':
												if Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
											else:
												bandera=False
									if bandera:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroPT)+1
										NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
										nr=numeroR
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										idCajaH= CajaH.pk
										idST = SolicitudTransferencia.objects.get(pk=idTr)
										PagoT= PagoTransferencia(idCajaHaber= CajaH,id_solicitud_transferencia=idST,observaciones=obsp)
										PagoT.save()
										CDebe.update(estadoTransaccion='pagado')
										if monto_egreso_pago>0:
											numeroR_e=int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
											TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
											TCajaH.save()
											eex= EgresoExtraTransferencia(idCajaHaber=TCajaH,id_pago_transferencia=PagoT,monto=monto_egreso_pago)
											eex.save()
										saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago
										Csaldo.update(saldo_dolares=saldoEgreso)
										st.update(dni_beneficiado=dnib)
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										Transferencias_recibidas_Desktop.objects.filter(id_solicitud_transferencia=idTr,id_solicitud_desktop=idTrDesktop,mac=mac).update(estado='pagado')
										exito="1"
										dato={'idSTLocal':idTrDesktop,'idSTRemoto':idTr,'nroRecibo':numeroR}
									else:
										if not Sol_Aut_Ret_Transferencias.objects.filter(id_st=SolTr.pk).exists():
											srT=Sol_Aut_Ret_Transferencias(id_st=SolTr,codigo_aut=id_generator(),estado='pendiente',id_user_solicitante=C.id_usuario)
											srT.save()
										exito='-2'
										error="Solicite codigo de autorizacion al Gerente"
								else:
									exito='-1'
									error ="error en operacion"
							else:
								exito='-1'
								error="saldo insuficiente"
						else:
							exito='-1'
							error='fail'
					else:
						if SolicitudTransferencia.objects.filter(pk=idTr).exists():
							st1=SolicitudTransferencia.objects.get(pk=idTr)
							exito='0'
							dato={'idSTLocal':idTrDesktop,'idSTRemoto':idTr,'estado':st1.idCajaDebe.estadoTransaccion}
							error= 'la transferencia esta '+st1.idCajaDebe.estadoTransaccion
						else:
							exito='-1'
							error='No existe la Transferencia'
				else:
					exito='-1'
					error='error autentificacion'
		except IntegrityError:
			exito='-1'
			error='error de integridad'
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)
#---------------------------- Envios --------------------------------

@transaction.atomic
def EnviarInternoDesktop_view(request):
	idEnvioDesktop= request.GET.get('idEnvioLocal')
	idCajaO= request.GET.get('idCajaOrg')
	idCaja= request.GET.get('idCajaDst')
	Moneda= request.GET.get('moneda')
	Moneda= str(Moneda).lower()
	Monto = request.GET.get('monto')
	comi = request.GET.get('egreso')
	tipoc=request.GET.get('tipoC')
	tablaDesktop = request.GET.get('tabla')
	mac = request.GET.get('mac')
	Observaciones= request.GET.get('obs')
	para=''
	dol=0
	sol=0
	Concepto="Envio de dinero para habilitacion de Caja Alterna"
	dato={}
	error=''
	exito=''
	if idCaja != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			with transaction.atomic():
				C= Cajas.objects.get(pk=idCajaO)
				if idCaja=='' or idCaja==None:
					C1 = Cajas.objects.get(id_usuario= C.id_oficina.id_usuario.pk)#destino
				else:
					C1 = Cajas.objects.get(pk= idCaja)#destino
				para= C1.id_usuario.nombre+' '+C1.id_usuario.Apellido_paterno+' '+ C1.id_usuario.Apellido_materno
				Monto = ConvertirDecimal(Monto)
				saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if not Envios_dinero_Desktop.objects.filter(id_envioDesktop=idEnvioDesktop,tabla='enviocaja',mac=mac).exists():
					if C !=C1 or not Cajas.objects.filter(pk=C1.pk,id_oficina=C.id_oficina.pk):
						if Monto > 0 and  comi >=0:
							if (Moneda=='soles' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
								saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
								saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
								if Moneda=='dolares':
									if tipoc != None and tipoc !="":
										tipoc= float(tipoc)
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroRE = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
										THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Envio de dinero para habilitacion",tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
										THaber.save()
										cA=EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
										cA.save()
										if comi >0:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroRE1 = int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
											CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de habilitacion de dinero para caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
											CHaber.save()
											ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=cA.pk,tabla='EnvioCajaCaja')
											ComiE.save()
											#sacar_balance_dolar(C,CHaber)
										SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto))
										envioDesktop= Envios_dinero_Desktop(id_haber=THaber, tabla='enviocaja',id_envio=cA.pk,id_envioDesktop=idEnvioDesktop, mac=mac,estado='enviado',aux1=tablaDesktop)
										envioDesktop.save()

										exito='1'
										dato={'idEnvioLocal':idEnvioDesktop,'idEnvioRemoto':cA.pk,'nroRecibo':THaber.nroRecibo}
									else:
										exito='-1'
										error='Ingrese un tipo de cambio dolar valido'
								elif Moneda=='soles':
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroRE = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
									THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Envio de dinero para habilitacion",tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
									THaber.save()
									cA=EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
									cA.save()
									if comi >0:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroRE1 = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
										CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de habilitacion de dinero para caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
										CHaber.save()
										ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=cA.pk,tabla='EnvioCajaCaja')
										ComiE.save()
									SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto))
									envioDesktop= Envios_dinero_Desktop(id_haber=THaber, tabla='enviocaja',id_envio=cA.pk,id_envioDesktop=idEnvioDesktop, mac=mac,estado='enviado',aux1=tablaDesktop)
									envioDesktop.save()
									exito='1'
									dato={'idEnvioLocal':idEnvioDesktop,'idEnvioRemoto':cA.pk,'nroRecibo':THaber.nroRecibo}
								else:
									exito='-1'
									error='moneda no valida'
							else:
								exito='-1'
								error = 'Saldo insuficiente'
						else:
							exito='-1'
							error='Montos no admitidos'
					else:
						exito='-1'
						error= 'Caja destino no valida'
				else:
					Envios=Envios_dinero_Desktop.objects.get(id_envioDesktop=idEnvioDesktop,tabla='enviocaja',mac=mac)
					Env=0
					if Envios.tabla=='enviocaja':
						Env= EnvioCajaCaja.objects.get(pk=Envios.id_envio)
					if Envios.tabla=='enviooficina':
						Env = EnvioOficinaOficina.objects.get(pk=Envios.id_envio)
					dato={'idEnvioRemoto':Envios.id_envio,'idEnvioLocal':idEnvioDesktop,'estado':Env.estado,'nroRecibo':Envios.id_haber.nroRecibo}
					exito='0'
					error='Este envio ya esta en el sistema'
		except IntegrityError:
			exito='-1'
			error='error de integridad'
		except:
			exito='-1'
			error= str(sys.exc_info()[1])
	else:
		error='Caja destino invalido'
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@transaction.atomic
def EnviarExternoDesktop_view(request):#actuqlizado
	idEnvioDesktop= request.GET.get('idEnvioLocal')
	idCajaO= request.GET.get('idCajaOrg')
	idOficina= request.GET.get('idOficinaDst')
	idCa= request.GET.get('idCajaDst')
	Moneda= request.GET.get('moneda')
	tablaDesktop = request.GET.get('tabla')
	Moneda= str(Moneda).lower()
	Monto = request.GET.get('monto')
	tipoc=request.GET.get('tipoCambio')
	comi = request.GET.get('egreso')
	mac = request.GET.get('mac')
	Observaciones= request.GET.get('obs')
	#exito=''
	cargo=''
	nombreof=''
	dol=0
	sol=0
	dato={}
	error=''
	exito=''
	if idOficina != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			C= Cajas.objects.get(pk=idCajaO)
			O1 = Oficina.objects.get(pk= idOficina)#destino
			nombreof= O1.nombre_oficina
			Monto = ConvertirDecimal(Monto)
			saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
			if idCajaO != idCa:
				tab='enviooficina'
				if idCa != "" and idCa!=None:
					#Cdes= Cajas.objects.get(pk=idCa)
					#if Cdes.id_usuario.pk !=Cdes.id_oficina.id_usuario.pk:
					tab='enviocaja'
				if not Envios_dinero_Desktop.objects.filter(id_envioDesktop=idEnvioDesktop,tabla=tab,mac=mac).exists():
					if Monto > 0 and  comi >=0:
						if (Moneda=='soles' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and Monto<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
							saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
							saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
							if Moneda=='dolares':
								if tipoc != None and tipoc !="":
									tipoc = float(tipoc)
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroRE = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
									if tab == 'enviooficina':
										THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="|cina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+O1.nombre_oficina,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
										THaber.save()
										Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=O1,idCajaHaber=THaber,monto=Monto,moneda=Moneda,conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+O1.nombre_oficina,observaciones=Observaciones,estado='enviado')
										Eo.save()
										envioDesktop= Envios_dinero_Desktop(id_haber=THaber, tabla='enviooficina',id_envio=Eo.pk,id_envioDesktop=idEnvioDesktop, mac=mac,estado='enviado',aux1=tablaDesktop)
										envioDesktop.save()
										if comi >0:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroRE1 = int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
											CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de envio de dinero para oficina "+O1.nombre_oficina,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
											CHaber.save()
											ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=Eo.pk,tabla='EnvioOficinaOficina')
											ComiE.save()
											#sacar_balance_dolar(C,CHaber)
										exito='1'
										dato={'idEnvioLocal':idEnvioDesktop,'idEnvioRemoto':Eo.pk,'nroRecibo':THaber.nroRecibo,'tabla':tablaDesktop}
									else:
										C1= Cajas.objects.get(pk=idCa)
										THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+O1.nombre_oficina,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
										THaber.save()
										Ec= EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,observaciones=Observaciones,estado="enviado")
										Ec.save()
										envioDesktop= Envios_dinero_Desktop(id_haber=THaber, tabla='enviocaja',id_envioDesktop=idEnvioDesktop,id_envio=Ec.pk, mac=mac,estado='enviado',aux1=tablaDesktop)
										envioDesktop.save()
										if comi >0:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroRE1 = int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
											CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
											CHaber.save()
											ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=Ec.pk,tabla='EnvioCajaCaja')
											ComiE.save()
											#sacar_balance_dolar(C,CHaber)
										exito='1'
										dato={'idEnvioLocal':idEnvioDesktop,'idEnvioRemoto':Ec.pk,'nroRecibo':THaber.nroRecibo,'tabla':tablaDesktop}
									SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto))
								else:
									exito='-1'
									error='Ingrese un tipo de cambio dolar valido'
							elif Moneda=='soles':
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRE = int(Nrecibo.nroRE)+1
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
								if tab == 'enviooficina':
									THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+O1.nombre_oficina,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
									THaber.save()
									Eo=EnvioOficinaOficina(id_usuario=C.id_usuario,id_oficinaDestino=O1,idCajaHaber=THaber,monto=Monto,moneda=Moneda,conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+O1.nombre_oficina,observaciones=Observaciones,estado='enviado')
									Eo.save()
									envioDesktop= Envios_dinero_Desktop(id_haber=THaber, tabla='enviooficina',id_envioDesktop=idEnvioDesktop,id_envio=Eo.pk, mac=mac,estado='enviado',aux1=tablaDesktop)
									envioDesktop.save()
									if comi >0:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroRE1 = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
										CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de envio de dinero para oficina "+O1.nombre_oficina,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
										CHaber.save()
										ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=Eo.pk,tabla='EnvioOficinaOficina')
										ComiE.save()
									exito='1'
									dato={'idEnvioLocal':idEnvioDesktop,'idEnvioRemoto':Eo.pk,'nroRecibo':THaber.nroRecibo,'tabla':tablaDesktop}
								else:
									C1= Cajas.objects.get(pk=idCa)
									THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+O1.nombre_oficina,tipoDocumento="R/E",cantidadDinero=Monto,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
									THaber.save()
									Ec= EnvioCajaCaja(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,moneda=Moneda,observaciones=Observaciones,estado="enviado")
									Ec.save()
									envioDesktop= Envios_dinero_Desktop(id_haber=THaber, tabla='enviocaja',id_envioDesktop=idEnvioDesktop,id_envio=Ec.pk, mac=mac,estado='enviado',aux1=tablaDesktop)
									envioDesktop.save()
									if comi >0:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroRE1 = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE1)
										CHaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="ComisionEnvio",conceptoDetalle="Comision de envio de dinero para oficina "+O1.nombre_oficina+" caja "+C1.nombre,tipoDocumento="R/E",cantidadDinero=comi,moneda=Moneda,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE1,id_oficina=C.id_oficina,id_caja=C,aux1='falta_descontar')
										CHaber.save()
										ComiE=ComisionEnvio(idCajaHaber=CHaber,id_envio=Ec.pk,tabla='EnvioCajaCaja')
										ComiE.save()
									exito='1'
									dato={'idEnvioLocal':idEnvioDesktop,'idEnvioRemoto':Ec.pk,'nroRecibo':THaber.nroRecibo,'tabla':tablaDesktop}
								SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto))
							else:
								exito='-1'
								error='moneda no valida'
						else:
							error = 'Saldo insuficiente'
							exito='-1'
					else:
						exito='-1'
						error='Montos no admitidos'
				else:
					Envios=Envios_dinero_Desktop.objects.get(id_envioDesktop=idEnvioDesktop,tabla=tab,mac=mac)
					Env=0
					if Envios.tabla=='enviocaja':
						Env= EnvioCajaCaja.objects.get(pk=Envios.id_envio)
					if Envios.tabla=='enviooficina':
						Env = EnvioOficinaOficina.objects.get(pk=Envios.id_envio)
					dato={'idEnvioRemoto':Envios.id_envio,'idEnvioLocal':idEnvioDesktop,'estado':Env.estado,'nroRecibo':Envios.id_haber.nroRecibo,'tabla':tablaDesktop}
					exito='0'
					error='Este envio ya esta en el sistema'
			else:
				exito='-1'
				error= 'Caja destino no valido'
		except IntegrityError:
			error='error de integridad'
			exito='-1'
		except:
			error= str(sys.exc_info()[1])
			exito='-1'
	else:
		exito='-1'
		error='Oficina destino no valido'
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@transaction.atomic
def RecepcionarDineroDesktop_view(request):
	if request.is_ajax:
		idCaja= request.GET.get('idCaja')
		idDebe= request.GET.get('idEnvioRemoto','')
		idDebeDesktop= request.GET.get('idEnvioLocal','')
		tabla= request.GET.get('tabla','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		mac= request.GET.get('mac')
		dato={}
		error=''
		exito=''
		try:
			C = Cajas.objects.get(pk=idCaja)
			if Recepcion_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,id_caja=C.pk,tabla=tabla).count()==1 and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
				if C.id_usuario.pk == C.id_oficina.id_usuario.pk:#caja prinsipal	
					if tabla=='deposito':
						if DepositoCaja.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=DepositoCaja.objects.get(pk=idDebe,estado='enviado')
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="DepositoCaja",conceptoDetalle="Envio de dinero de Gerencia a "+C.id_oficina.nombre_oficina,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()
							Rd= RecepcionDepositoCaja(idCajaDebe=CajaD,idDepositoCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido")
							Rd.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= DepositoCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
							Recepcion_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,id_caja=C.pk,tabla=tabla).update(estado='recibido')
							exito='1'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
						else:
							e=DepositoCaja.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					elif tabla=='enviooficina':
						if EnvioOficinaOficina.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=EnvioOficinaOficina.objects.get(pk=idDebe,estado='enviado')
							c1 = Cajas.objects.get(id_usuario=Dn.id_usuario.pk)
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficina",conceptoDetalle="Envio de dinero de "+c1.id_oficina.nombre_oficina+" a "+C.id_oficina.nombre_oficina,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()
							Ro= RecepcionEnvioOficinaOficina(idCajaDebe=CajaD,idEnvioOficinaOficina=Dn,monto=Dn.monto,moneda=Dn.moneda,estado='recibido')
							Ro.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= EnvioOficinaOficina.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
							Recepcion_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,id_caja=C.pk,tabla=tabla).update(estado='recibido')
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
							exito='1'
						else:
							e=EnvioOficinaOficina.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					elif tabla=='enviocaja':
						if EnvioCajaCaja.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=EnvioCajaCaja.objects.get(pk=idDebe,estado='enviado')
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Habilitacion de dinero de Caja Prinsipal",tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()
							Rc= RecepcionEnvioCajaCaja(idCajaDebe=CajaD,idEnvioCajaCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido")
							Rc.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= EnvioCajaCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
							Recepcion_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,id_caja=C.pk,tabla=tabla).update(estado='recibido')
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
							exito='1'
						else:
							e=EnvioCajaCaja.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					else:
						exito='-1'
						error='error en operacion'
				else:
					if tabla=='deposito':
						if DepositoCaja.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=DepositoCaja.objects.get(pk=idDebe,estado='enviado')
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="DepositoCaja",conceptoDetalle="Envio de dinero de Gerencia a "+C.id_oficina.nombre_oficina,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()
							Rd= RecepcionDepositoCaja(idCajaDebe=CajaD,idDepositoCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido")
							Rd.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= DepositoCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
							Recepcion_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,id_caja=C.pk,tabla=tabla).update(estado='recibido')
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
							exito='1'
						else:
							e=DepositoCaja.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					if tabla=='enviocaja':
						if EnvioCajaCaja.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=EnvioCajaCaja.objects.get(pk=idDebe,estado='enviado')
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCaja",conceptoDetalle="Habilitacion de dinero de Caja Prinsipal",tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()
							Rc= RecepcionEnvioCajaCaja(idCajaDebe=CajaD,idEnvioCajaCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido")
							Rc.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= EnvioCajaCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
							Recepcion_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,id_caja=C.pk,tabla=tabla).update(estado='recibido')
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
							exito='1'
						else:
							e=EnvioCajaCaja.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					else:
						exito='-1'
						error='error en operacion'
			else:
				exito='-1'
				error='error en autentificacion'
		except IntegrityError:
			exito='-1'
			error='error de integridad'
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@transaction.atomic
def AnularEnvioDesktop_view(request):
	if request.is_ajax:
		idCaja= request.GET.get('idCaja')
		idDebe= request.GET.get('idEnvioRemoto','')
		idDebeDesktop= request.GET.get('idEnvioLocal','')
		tablaDesktop= request.GET.get('tabla','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		mac= request.GET.get('mac')
		dato={}
		error=''
		exito=''
		try:
			C = Cajas.objects.get(pk=idCaja)
			if Envios_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,aux1=tablaDesktop,mac=mac).count()==1 and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
				EDes= Envios_dinero_Desktop.objects.get(id_envio=idDebe,id_envioDesktop=idDebeDesktop,aux1=tablaDesktop,mac=mac)
				if C.id_usuario.pk == C.id_oficina.id_usuario.pk:#caja prinsipal
					if EDes.tabla=='enviooficina':
						if EnvioOficinaOficina.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=EnvioOficinaOficina.objects.get(pk=idDebe,estado='enviado')
							c1 = Cajas.objects.get(id_usuario=Dn.id_usuario.pk)
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioOficinaOficinaAnulacion",conceptoDetalle=" Anulacion Envio de dinero de "+c1.id_oficina.nombre_oficina+" a "+C.id_oficina.nombre_oficina,tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="anulado",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()
							Ao= EnvioOficinaOficinaAnulacion(idCajaDebe=CajaD,id_EnvioOficina=Dn)
							Ao.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= EnvioOficinaOficina.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
							Envios_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,tabla=EDes.tabla,mac=mac).update(estado='anulado')
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
							exito='1'
						else:
							e=EnvioOficinaOficina.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					elif EDes.tabla=='enviocaja':
						if EnvioCajaCaja.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=EnvioCajaCaja.objects.get(pk=idDebe,estado='enviado')
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaAnulacion",conceptoDetalle="Anulacion Habilitacion de dinero de Caja Prinsipal",tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="anulado",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()

							Ac= EnvioCajaCajaAnulacion(idCajaDebe=CajaD,id_EnvioCaja=Dn)
							Ac.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= EnvioCajaCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
							Envios_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,tabla=EDes.tabla,mac=mac).update(estado='anulado')
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
							exito='1'
						else:
							e=EnvioCajaCaja.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					else:
						exito='-1'
						error='error en operacion'
				else:
					if EDes.tabla=='enviocaja':
						if EnvioCajaCaja.objects.filter(pk=idDebe,estado='enviado').exists():
							Dn=EnvioCajaCaja.objects.get(pk=idDebe,estado='enviado')
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRI = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
							CajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaAnulacion",conceptoDetalle=" Anulacion Habilitacion de dinero de Caja Prinsipal",tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="anulado",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
							CajaD.save()
							Ac= EnvioCajaCajaAnulacion(idCajaDebe=CajaD,idEnvioCajaCaja=Dn)
							Ac.save()
							saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							if Dn.moneda=='soles':
								saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
							elif Dn.moneda =='dolares':
								saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
							aux= EnvioCajaCaja.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
							Envios_dinero_Desktop.objects.filter(id_envio=idDebe,id_envioDesktop=idDebeDesktop,tabla=EDes.tabla,mac=mac).update(estado='anulado')
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'nroRecibo':numeroRI}
							exito='1'
						else:
							e=EnvioCajaCaja.objects.get(pk=idDebe)
							exito='0'
							dato={'idEnvioLocal':idDebeDesktop,'idEnvioRemoto':idDebe,'estado':e.estado}
							error= 'El envio esta en estado: '+e.estado
					else:
						exito='-1'
						error='error en operacion'
			else:
				exito='-1'
				error='error en autentificacion'
		except IntegrityError:
			exito='-1'
			error='error de integridad'
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@transaction.atomic
def guardadoEnvioDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idEnvio=request.GET.get('idEnvioRemoto')
		idEnvioDesktop=request.GET.get('idEnvioLocal')
		mac=request.GET.get('mac','')
		tabla=request.GET.get('tabla')
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					if not Recepcion_dinero_Desktop.objects.filter(id_caja=idCaja,tabla=tabla,id_envio=idEnvio).exists():
						Env= 0
						if tabla=='deposito':
							Env= DepositoCaja.objects.get(pk=idEnvio)
						if tabla=='enviooficina':
							Env = EnvioOficinaOficina.objects.get(pk=idEnvio)
						if tabla=='enviocaja':
							Env = EnvioCajaCaja.objects.get(pk=idEnvio)
						envio_recibido= Recepcion_dinero_Desktop(id_haber=Env.idCajaHaber,tabla=tabla,mac=mac,id_envio=idEnvio,estado=Env.estado,id_caja=C,id_oficina=C.id_oficina,id_envioDesktop=idEnvioDesktop)
						envio_recibido.save()
						exito='1'
					else:
						exito='1'
				else:
					exito='-1'
					error='error verificacion st'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@transaction.atomic
def crearCtaCteDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idCtaLocal=request.GET.get('idLocal')
		TipoPersona=request.GET.get('tipoPersona','')
		NombreCliente=request.GET.get('nombre','')
		A_paternoCliente=request.GET.get('ap','')
		A_maternoCliente=request.GET.get('am','')
		DniRucCliente=request.GET.get('dni','')
		email=request.GET.get('email','')
		MontoApertura=request.GET.get('monto','')
		Moneda=request.GET.get('moneda','')
		Observacion=request.GET.get('obs','')
		comision=request.GET.get('comision','')
		fecha_nac=request.GET.get('fechaNac','')
		mac=request.GET.get('mac','')
		nombreRecibo=NombreCliente+" "+A_paternoCliente+" "+A_maternoCliente
		montoRecibo=MontoApertura
		Moneda=Moneda.lower()
		conceptoDetalleRecibo="APERTURA DE CUENTA CORRIENTE EN "+ Moneda
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				TipoPersona= TipoPersona.capitalize()
				if TipoPersona=='Natural' or TipoPersona=='Juridica':
					C = Cajas.objects.get(pk=idCaja)
					if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
						if  not CtaCte_Desktop.objects.filter(idDesktop=idCtaLocal, id_caja=C.pk).exists():
							sq= Cliente.objects.filter(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
							if sq.count()==0:
								cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
							cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
							idSaldo= str(cons_saldo.pk)
							Ingres= ConvertirDecimal(MontoApertura) 
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
							if Moneda=='dolares':
								C1= Cajas.objects.get(pk=C.pk)#origen
								O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
								Cli= Cliente.objects.get(pk=idCliente)
								saldo= SaldoDolares+Ingres
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldo)
								ctacte= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCte',conceptoDetalle='Apertura de Cuenta Corriente de Sr(a) '+NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente,tipoDocumento='R/I',cantidadDinero=Ingres,moneda=Moneda,observaciones='',estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
								ctacte.save()
								rctacte= CtaCte(idCajaDebe=ctacte,id_cliente=Cli,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='NO',tipoCuenta='',claveAcceso=fecha_nac)
								rctacte.save()
								CtaDes= CtaCte_Desktop(idCtaCte=rctacte,idDesktop= idCtaLocal,id_caja=C,mac=mac)
								CtaDes.save()
								mctacte= CtaCteMovimientos(id_ctacte=rctacte,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Monto con el que se aperturó la cuenta',tipoDocumento='R/I',nroRecibo=str(numeroR))
								mctacte.save()
								CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac)
								CtaMovDes.save()
								dato={'idLocal':idCtaLocal,'idRemoto':rctacte.pk}
								exito='1'
							elif Moneda=='soles':
								C1= Cajas.objects.get(pk=C.pk)#origen
								O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
								Cli= Cliente.objects.get(pk=idCliente)
								saldo= SaldoSoles+Ingres
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo)
								ctacte= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCte',conceptoDetalle='Apertura de Cuenta Corriente de Sr(a) '+NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente,tipoDocumento='R/I',cantidadDinero=Ingres,moneda=Moneda,observaciones='',estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
								ctacte.save()
								rctacte= CtaCte(idCajaDebe=ctacte,id_cliente=Cli,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='NO',tipoCuenta='',claveAcceso=fecha_nac)
								rctacte.save()
								CtaDes= CtaCte_Desktop(idCtaCte=rctacte,idDesktop= idCtaLocal,id_caja=C,mac=mac)
								CtaDes.save()
								mctacte= CtaCteMovimientos(id_ctacte=rctacte,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Monto con el que se aperturó la cuenta',tipoDocumento='R/I',nroRecibo=str(numeroR))
								mctacte.save()
								CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac)
								CtaMovDes.save()
								dato={'idLocal':idCtaLocal,'idRemoto':rctacte.pk}
								exito='1'
							else:
								exito='-1'
								error='error en tipo de moneda'
						else:
							dcta=CtaCte_Desktop.objects.get(idDesktop=idCtaLocal, id_caja=C.pk)
							dato={'idLocal':idCtaLocal,'idRemoto':dcta.idCtaCte.pk}
							exito='1'
					else:
						exito='-1'
						error='error de autentificacion'
				else:
					exito='-1'
					error='error en tipo de persona'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@transaction.atomic
def AbonarCtaCteDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idCtaLocal=request.GET.get('idLocal')
		IdCtaCte=request.GET.get('idRemoto')
		idMovCtaLocal=request.GET.get('idMovLocal')
		montoDeposito=request.GET.get('monto','')
		observaciones=request.GET.get('obs','')
		comision=request.GET.get('comision','')
		mac=request.GET.get('mac','')
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					if  CtaCte.objects.filter(pk=IdCtaCte).exists():
						if not CtaCteMov_Desktop.objects.filter(idDesktop=idMovCtaLocal,id_caja=C.pk).exists():
							#ctaDes= CtaCte_Desktop.objects.get(idDesktop=idCtaLocal, id_caja=C.pk)
							#IdCtaCte= ctaDes.idCtaCte.pk
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroRI)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
							ObjSaldo= CtaCte.objects.get(pk=IdCtaCte)
							nombre=ObjSaldo.id_cliente.nombre
							ap=ObjSaldo.id_cliente.Apellido_paterno
							am=ObjSaldo.id_cliente.Apellido_materno
							moneda=ObjSaldo.idCajaDebe.moneda
							if ObjSaldo.saldo>=0:
								C1= Cajas.objects.get(pk=C.pk)#origen
								O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
								ctacte= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am,tipoDocumento='R/I',cantidadDinero=montoDeposito,moneda=moneda,observaciones='',estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
								ctacte.save()
								octacte= CtaCte.objects.get(pk=IdCtaCte)
								mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=(float(ObjSaldo.saldo)+float(montoDeposito)), observacionesMovimientos=observaciones,tipoDocumento='R/I',nroRecibo=str(numeroR))
								mctacte.save()
								CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
								CtaMovDes.save()
								aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo)+float(montoDeposito)),fechaCierre=fechaActual)
							else:
								#sobregiro? pagando intereses?
								ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro','pk').reverse()[:1]
								montoSobregiroRestante=ctacte[0]['montoSobregiro']
								if montoSobregiroRestante =='' or montoSobregiroRestante == None:
									montoSobregiroRestante=0
								else:
									montoSobregiroRestante=ConvertirDecimal(montoSobregiroRestante)

								saldoUMov=ctacte[0]['saldo']
								sobregiroNro=ctacte[0]['sobregiroNro']
								interesSobregiro=ctacte[0]['interesSobregiro']
								nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']
								if nroDiasSobregiro =='' or nroDiasSobregiro == None:
									nroDiasSobregiro=0
								if interesSobregiro=='' or interesSobregiro==None:
									interesSobregiro=0 
								
								fechaDelSobregiro=ctacte[0]['fechaHora'].strftime("%d-%m-%Y")

								formato_fecha = "%d-%m-%Y"
								fecha_inicial = datetime.datetime.strptime(str(fechaDelSobregiro), formato_fecha)
								fecha_final = datetime.datetime.strptime(str(fechaActual_), formato_fecha)
								diferencia = fecha_final-fecha_inicial

								#calculamos los dias excedidos
								nroDiasExcedidosSobregiro=diferencia.days
								nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro-nroDiasSobregiro
								interesMoraSobregiro=0

								if montoSobregiroRestante>0:
									if nroDiasExcedidosSobregiro>0:
										if (montoSobregiroRestante-montoDeposito)<=0:
											interesMoraSobregiro=montoSobregiroRestante*(interesSobregiro/100)
											interesMoraSobregiro=interesMoraSobregiro*nroDiasExcedidosSobregiro
										else:
											interesMoraSobregiro=montoDeposito*(interesSobregiro/100)
											interesMoraSobregiro=interesMoraSobregiro*nroDiasExcedidosSobregiro
									else:
										nroDiasExcedidosSobregiro=0

									montoSobregiroRestante=montoSobregiroRestante-montoDeposito
									if montoSobregiroRestante<=0:
										montoSobregiroRestante=0
									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									ctacte= TCajaDebe(id_personal=C.id_usuario, tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am+' '+', <Pago de Sobregiro>',tipoDocumento='R/I',cantidadDinero=montoDeposito,moneda=moneda,observaciones='',estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
									ctacte.save()
									saldoUMovAhora=0

									if (float(saldoUMov)+float(montoDeposito))<=0:
										#saldo (-)
										saldoUMov=(float(saldoUMov)+float(montoDeposito))-float(interesMoraSobregiro)
									elif (float(saldoUMov)+float(montoDeposito))>=float(interesMoraSobregiro):
										#saldo (+)
										saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-float(interesMoraSobregiro)
									else:
										saldoUMovAhora=(-1)*(float(interesMoraSobregiro)-(float(saldoUMov)+float(montoDeposito)))

									octacte= CtaCte.objects.get(pk=IdCtaCte)
									mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=saldoUMovAhora,sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiroRestante,nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro,interesMoraSobregiro=interesMoraSobregiro,saldoConMoraSobregiro=(saldoUMov-interesMoraSobregiro),observacionesMovimientos=' Pago de Sobregiro '+observaciones,auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR))
									mctacte.save()
									CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
									CtaMovDes.save()
									aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoUMovAhora,fechaCierre=fechaActual)

								else:
									if nroDiasExcedidosSobregiro>0:
										if (float(saldoUMov)-float(montoDeposito))<=0:
											interesMoraSobregiro=float(saldoUMov)*(float(interesSobregiro)/100)
											interesMoraSobregiro=float(interesMoraSobregiro)*nroDiasExcedidosSobregiro
										else:
											interesMoraSobregiro=float(montoDeposito)*(float(interesSobregiro)/100)
											interesMoraSobregiro=float(interesMoraSobregiro)*nroDiasExcedidosSobregiro
									else:
										nroDiasExcedidosSobregiro=0

									montoSobregiroRestante=0
									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									ctacte= TCajaDebe(id_personal=C.id_usuario, tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am+' '+', <Pago de Intereses de Sobregiro>',tipoDocumento='R/I',cantidadDinero=montoDeposito,moneda=moneda,observaciones='',estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
									ctacte.save()
									if (float(saldoUMov)+float(montoDeposito))<=0:
										#saldo (-)
										saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-interesMoraSobregiro
									elif (float(saldoUMov)+float(montoDeposito))>=interesMoraSobregiro:
										#saldo (+)
										saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-interesMoraSobregiro
									else:
										saldoUMovAhora=(-1)*(float(interesMoraSobregiro)-(float(saldoUMov)+float(montoDeposito)))						

									octacte= CtaCte.objects.get(pk=IdCtaCte)
									mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=saldoUMovAhora,sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiroRestante,nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro,interesMoraSobregiro=interesMoraSobregiro,saldoConMoraSobregiro=(float(saldoUMov)-interesMoraSobregiro),observacionesMovimientos=' Pago de Intereses de Sobregiro '+observaciones,auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR))
									mctacte.save()
									CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
									CtaMovDes.save()
									aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoUMovAhora,fechaCierre=fechaActual)

							cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
							idSaldo= str(cons_saldo.pk) 
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							if moneda=='dolares':
								saldo= SaldoDolares+montoDeposito
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldo,fecha=fechaActual)
							else:
								saldo=float(SaldoSoles)+float(montoDeposito)
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo,fecha=fechaActual)
							exito='1'
							dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaCte}
						else:
							exito='1'
							dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaCte}
					else:
						error='La Cta Corriente no existe'
						exito='-1'
				else:
					exito='-1'
					error='error en autentificacion'
		except IntegrityError:
			exito='-1'
			error="error de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])

	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@transaction.atomic
def RetirarCtaCteDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idCtaLocal=request.GET.get('idLocal')
		IdCtaCte=request.GET.get('idRemoto')
		idMovCtaLocal=request.GET.get('idMovLocal')
		montoRetiro=request.GET.get('monto','')
		observaciones=request.GET.get('obs','')
		nroDias=request.GET.get('nroDias','')
		interes=request.GET.get('interes','')
		mac=request.GET.get('mac','')
		#IdCtaCte=request.GET.get('idLocal','')
		estadoConf=request.GET.get('estado','')
		tipoC=request.GET.get('tc','')
		if montoRetiro ==''or montoRetiro == None:
			montoRetiro=0
		else:
			montoRetiro = ConvertirDecimal(montoRetiro)
		if interes ==''or interes == None:
			interes=0
		else:
			interes = ConvertirDecimal(interes)

		if nroDias ==''or nroDias == None:
			nroDias=0
		else:
			nroDias = ConvertirDecimal(nroDias)

		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")
		dato={}
		error=''
		exito=''
		if montoRetiro>0:
			try:
				with transaction.atomic():
					C = Cajas.objects.get(pk=idCaja)
					if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
						if CtaCte.objects.filter(pk=IdCtaCte).exists():
							if not CtaCteMov_Desktop.objects.filter(idDesktop=idMovCtaLocal,id_caja=C.pk).exists():
								#cta_desktop=CtaCte_Desktop.objects.get(idDesktop=idCtaLocal, id_caja=C.pk)
								#IdCtaCte=cta_desktop.idCtaCte.pk
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroRE)+1
								ObjSaldo= CtaCte.objects.get(pk=IdCtaCte)
								ObjDebe=TCajaDebe.objects.get(pk=ObjSaldo.idCajaDebe.pk)
								moneda=ObjDebe.moneda
								ObjCliente=Cliente.objects.get(pk=ObjSaldo.id_cliente.pk)
								ObjSaldoCaja= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								SaldoSoles= ConvertirDecimal(ObjSaldoCaja.saldo_soles)
								SaldoDolares= ConvertirDecimal(ObjSaldoCaja.saldo_dolares)
								if ObjSaldo.estado!='bloqueado':
									if (float(ObjSaldo.saldo)-float(montoRetiro))>=0: 
										if moneda=='soles':
											if (SaldoSoles >= montoRetiro): 
												saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
												SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoRetiro),fecha=fechaActual)
												C1= Cajas.objects.get(pk=C.pk)#origen
												O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
												NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
												cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
												cajah.save()
												octacte= CtaCte.objects.get(pk=IdCtaCte)
												mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
												mctacte.save()
												CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
												CtaMovDes.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoEgreso,fechaCierre=fechaActual)
												#conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
												#nroRecibo=str(numeroR)
												#saldoTotalRecibo='S/. '+str(saldoEgreso)
												#importeRecibo='S/. '+str(montoRetiro)
												exito='1'
												#data='exito'
												dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte ,'idMovLocal':idMovCtaLocal}
											else:
												if estadoConf==0 or estadoConf=='0':
													exito="-1"
													error='Saldo insuficiente en la caja de soles. ¿Desea retirar de la caja de dolares?'
												else:
													montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
													if montoDolarizado<=SaldoDolares:
														saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
														SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoDolarizado),fecha=fechaActual)
														C1= Cajas.objects.get(pk=C.pk)#origen
														O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
														NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
														cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de dinero dolarizado Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoDolarizado,moneda='dolares',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
														cajah.save()
														octacte= CtaCte.objects.get(pk=IdCtaCte)
														mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoDolarizado,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero dolarizado de la Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
														mctacte.save()
														CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
														CtaMovDes.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro),fechaCierre=fechaActual)
														#conceptoRecibo='Retiro de dinero dolarizado de la Cta Cte Nro. '+str(IdCtaCte)
														#nroRecibo=str(numeroR)
														#saldoTotalRecibo='S/. '+str(saldoEgreso)
														#importeRecibo='$/. '+str(montoDolarizado)
														#importeRecibo='S/. '+str(montoRetiro)
														#importeReciboDolarizadoSolarizado='$/. '+str(montoDolarizado)
														#tcRecibo=str(tipoC)
														exito='1'
														dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
													else:
														exito='-1'
														error='Saldo insuficiente en la caja de dolares'
										elif moneda=='dolares':
											if (SaldoDolares>=montoRetiro):
												saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
												SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoRetiro),fecha=fechaActual)
												C1= Cajas.objects.get(pk=C.pk)#origen
												O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
												NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
												cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
												cajah.save()
												octacte= CtaCte.objects.get(pk=IdCtaCte)
												mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
												mctacte.save()
												CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
												CtaMovDes.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoEgreso,fechaCierre=fechaActual)
												#conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
												#nroRecibo=str(numeroR)
												#saldoTotalRecibo='$/. '+str(saldoEgreso)
												#importeRecibo='$/. '+str(montoRetiro)
												#est=1
												exito='1'
												dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
											else:
												if estadoConf==0 or estadoConf=='0':
													exito='-1'
													error='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
												else:
													montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
													if montoSolarizado<=SaldoSoles:
														saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
														SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoSolarizado),fecha=fechaActual)
														C1= Cajas.objects.get(pk=C.pk)#origen
														O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
														NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
														cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoSolarizado,moneda='soles',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
														cajah.save()
														octacte= CtaCte.objects.get(pk=IdCtaCte)
														mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoSolarizado,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero solarizado de la Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
														mctacte.save()
														CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
														CtaMovDes.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro),fechaCierre=fechaActual)
														#conceptoRecibo='Retiro de dinero solarizado de la Cta Cte Nro. '+str(IdCtaCte)
														#nroRecibo=str(numeroR)
														#saldoTotalRecibo='$/. '+str(saldoEgreso)
														#importeRecibo='S/. '+str(montoSolarizado)
														#importeRecibo='$/. '+str(montoRetiro)
														#importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
														#tcRecibo=str(tipoC)
														exito-'1'
														dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
													else:
														exito='-1'
														error='Saldo insuficiente en la caja de soles'

									else:
										if moneda=='soles':
											if (SaldoSoles >= montoRetiro):
												saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
												if ConvertirDecimal(ObjSaldo.saldo)>=0:
													saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
												else:
													saldoSobregiro=ConvertirDecimal(montoRetiro)

												SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoRetiro),fecha=fechaActual)
												CtaCteM=CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
												nroSG=CtaCteM['sobregiroNro__count']+1
												NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
												cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro con Sobregiro de Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
												cajah.save()
												octacte= CtaCte.objects.get(pk=IdCtaCte)
												mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
												mctacte.save()
												CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
												CtaMovDes.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoEgreso,fechaCierre=fechaActual)
												#conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
												#nroRecibo=str(numeroR)
												#saldoTotalRecibo='S/. '+str(saldoEgreso)
												#importeRecibo='S/. '+str(montoRetiro)
												exito='1'
												dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
											else:
												if estadoConf==0 or estadoConf=='0':
													exito='-1'
													error='Saldo insuficiente en la caja de soles. ¿Desea hacer el sobregiro en dolares?'
												else:
													montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
													if montoDolarizado<=SaldoDolares:
														saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
														if ConvertirDecimal(ObjSaldo.saldo)>=0:
															saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
														else:
															saldoSobregiro=ConvertirDecimal(montoRetiro)

														SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoDolarizado),fecha=fechaActual)
														CtaCteM=CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
														nroSG=CtaCteM['sobregiroNro__count']+1
														NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
														cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro con Sobregiro Dolarizado de Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoDolarizado,moneda='dolares',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
														cajah.save()
														octacte= CtaCte.objects.get(pk=IdCtaCte)
														mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoDolarizado,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro Dolarizado de Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
														mctacte.save()
														CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
														CtaMovDes.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoEgreso,fechaCierre=fechaActual)
														#conceptoRecibo='Retiro con Sobregiro Dolarizado de Cta Cte Nro. '+str(IdCtaCte)
														#nroRecibo=str(numeroR)
														#saldoTotalRecibo='S/. '+str(saldoEgreso)
														#importeRecibo='$/. '+str(montoDolarizado)
														#importeRecibo='S/. '+str(montoRetiro)
														#importeReciboDolarizadoSolarizado='$/. '+str(montoDolarizado)
														#tcRecibo=str(tipoC)
														exito='1'
														dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
													else:
														exito='-1'
														error='Saldo insuficiente en la caja de dolares'


										elif moneda=='dolares':
											if (SaldoDolares>=montoRetiro):
												saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
												if ConvertirDecimal(ObjSaldo.saldo)>=0:
													saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
												else:
													saldoSobregiro=ConvertirDecimal(montoRetiro)
												SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoRetiro),fecha=fechaActual)
												CtaCteM=CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
												nroSG=CtaCteM['sobregiroNro__count']+1
												NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
												cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro con Sobregiro de Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
												cajah.save()
												octacte= CtaCte.objects.get(pk=IdCtaCte)
												mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
												mctacte.save()
												CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
												CtaMovDes.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoEgreso,fechaCierre=fechaActual)
												#conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
												#nroRecibo=str(numeroR)
												#saldoTotalRecibo='$/. '+str(saldoEgreso)
												#importeRecibo='$/. '+str(montoRetiro)
												exito='1'
												dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
											else:
												if estadoConf==0 or estadoConf=='0':
													exito='-1'
													error='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
												else:
													montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
													if montoSolarizado<=SaldoSoles:
														saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)
														if ConvertirDecimal(ObjSaldo.saldo)>=0:
															saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
														else:
															saldoSobregiro=ConvertirDecimal(montoRetiro)
														SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoSolarizado),fecha=fechaActual)
														CtaCteM=CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
														nroSG=CtaCteM['sobregiroNro__count']+1
														NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
														cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro con Sobregiro Solarizado de Cta Cte '+str(IdCtaCte)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoSolarizado,moneda='soles',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
														cajah.save()
														octacte= CtaCte.objects.get(pk=IdCtaCte)
														mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoSolarizado,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro Solarizado de Cta Cte Nro. '+str(IdCtaCte),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
														mctacte.save()
														CtaMovDes= CtaCteMov_Desktop(idCtaCteMov=mctacte,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
														CtaMovDes.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=saldoEgreso,fechaCierre=fechaActual)
														#conceptoRecibo='Retiro con Sobregiro Solarizado de Cta Cte Nro. '+str(IdCtaCte)
														#nroRecibo=str(numeroR)
														#saldoTotalRecibo='$/. '+str(saldoEgreso)
														#importeRecibo='$/. '+str(montoRetiro)
														#importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
														#importeRecibo='S/. '+str(montoSolarizado)
														#tcRecibo=str(tipoC)
														exito='1'
														dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
													else:
														exito-='1'
														error='Saldo insuficiente en la caja de soles'

								else:
									exito='-1'
									error='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'
							else:
								exito='1'
								dato={'idLocal':idCtaLocal,'idRemoto':IdCtaCte,'idMovLocal':idMovCtaLocal}
						else:
							error='La Cta Corriente no existe'
							exito='-1'
					else:
						exito='-1'
						error='error en autentificacion'
			except IntegrityError:
				exito='-1'
				error="error de integridad"
			except:
				exito='-1'
				error=str(sys.exc_info()[1])
		else:
			exito='-1'
			error='Monto ingresado es incorrecto'
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#****** cta de ahorros Desktop*********
@transaction.atomic
def CrearCtaAhorrosDesktop_view(request):
	idCtaLocal=request.GET.get('idLocal')
	idCaja=request.GET.get('idCaja')
	mac=request.GET.get('mac','')
	TipoPersona=request.GET.get('tipoPersona','')
	TipoPersona=TipoPersona.capitalize()
	DniRucCliente= request.GET.get('dni','')
	NombreCliente= request.GET.get('nombre')
	A_paternoCliente= request.GET.get('ap')
	A_maternoCliente= request.GET.get('am','')
	TelefonoCli= request.GET.get('telefono','')
	DireccionCli= request.GET.get('direccion')
	EmailCli= request.GET.get('email','')
	MontoApertura= request.GET.get('monto','')
	Moneda= request.GET.get('moneda','')
	comision = request.GET.get('comision','')
	frecNroDias=request.GET.get('frecuenciaDias')
	NroDias=request.GET.get('nroDias','')
	frecInteres=request.GET.get('freTnteres')
	Interes= request.GET.get('interes')
	Observacion = request.GET.get('obs','')
	FechaNacimiento = request.GET.get('fechaNac')
	usr=request.user.username
	nombreRecibo=''
	dato={}
	error=''
	exito=''
	if MontoApertura ==''or MontoApertura == None:
		MontoApertura=0
	else:
		MontoApertura = ConvertirDecimal(MontoApertura)

	if comision=='' or comision==None:
		comision=0
	else:
		comision=ConvertirDecimal(comision)

	if Interes=='' or Interes==None:
		Interes=0
	else:
		Interes=ConvertirDecimal(Interes)

	if NroDias=='' or NroDias==None:
		NroDias=0

	if NombreCliente != None:
		nombreRecibo=NombreCliente+" "+A_paternoCliente+" "+A_maternoCliente

	montoRecibo=str(MontoApertura)
	nroR=0
	comisionRecibo=str(comision)
	montoTotalRecibo=str(ConvertirDecimal(MontoApertura)+ConvertirDecimal(comision))
	monedaRecibo=Moneda
	if Moneda != None:
		conceptoDetalleRecibo="Apertura de Cta. Ahorros en "+ Moneda.upper()+ " "+Observacion
	C = Cajas.objects.get(pk=idCaja)
	dniRecibo=DniRucCliente[:4]+"****"
	oficinaRecibo=''
	fechaActual = time.strftime("%Y-%m-%d")
	horaActual = time.strftime("%H:%M:%S")
	
	if DniRucCliente ==''or DniRucCliente == None:
		DniRucCliente='00000000'
	if MontoApertura ==''or MontoApertura == None:
		MontoApertura=0
	else:
		MontoApertura = ConvertirDecimal(MontoApertura)

	if TipoPersona ==''or TipoPersona == None:
		TipoPersona='Natural'
	try:
		with transaction.atomic():
			if TipoPersona=='Natural' or TipoPersona=='Juridica':
				if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					if not CtaAhorro_Desktop.objects.filter(idDesktop=idCtaLocal, id_caja=C.pk).exists():
						sq= Cliente.objects.filter(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
						if sq.count()==0:
							cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,fecha_nacimiento=FechaNacimiento,tipo_persona=TipoPersona,idCaja=C.pk)
							cln.save()
							idCliente = str(cln.pk)
						else:
							lista5= list(sq)
							idCliente= str(lista5[0]['pk'])
						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
						idSaldo= str(cons_saldo.pk)
						Ingres= ConvertirDecimal(MontoApertura) 
						SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
						SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRI)+1
						if Moneda=='dolares':
							C1= Cajas.objects.get(pk=C.pk)#origen
							O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
							Cli= Cliente.objects.get(pk=idCliente)
							saldo= SaldoDolares+Ingres+comision
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldo)
							ctaahorros= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaAhorros',conceptoDetalle='Apertura de Cuenta Ahorros del Sr(a) '+NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente,tipoDocumento='R/I',cantidadDinero=Ingres,moneda=Moneda,observaciones='',estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
							ctaahorros.save()
							rctaahorros= CtaAhorros(idCajaDebe=ctaahorros,id_cliente=Cli,saldo=Ingres,nroDias=NroDias,frecNroDias=frecNroDias,frecInteres=frecInteres,interes=Interes,estado='activo',observaciones=Observacion,privadoOficina='no',tipoCuenta='',claveAcceso=FechaNacimiento)
							rctaahorros.save()
							mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=rctaahorros,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,subMontoDeposito=Ingres,interesGanado=0,observacionesMovimientos='Monto con el que se Aperturo la Cuenta',auxIG=0,tipoDocumento='R/I',nroRecibo=str(numeroR),comision=comision,tabla='TCajaDebe',aux1=ctaahorros.pk,nroDias=NroDias,frecNroDias=frecNroDias,frecInteres=frecInteres,interes=Interes)
							mctaahorros.save()
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
							CtaDes= CtaAhorro_Desktop(idCtaAhorro=rctaahorros,idDesktop= idCtaLocal,id_caja=C,mac=mac)
							CtaDes.save()
							CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac)
							CtaMovDes.save()
							dato={'idLocal':idCtaLocal,'idRemoto':rctaahorros.pk}
							exito='1'
						elif Moneda=='soles':
							C1= Cajas.objects.get(pk=C.pk)#origen
							O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
							Cli= Cliente.objects.get(pk=idCliente)
							saldo= SaldoSoles+Ingres+comision
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo)
							ctaahorros= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaAhorros',conceptoDetalle='Apertura de Cuenta Ahorros del Sr(a) '+NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente,tipoDocumento='R/I',cantidadDinero=Ingres,moneda=Moneda,observaciones='',estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
							ctaahorros.save()
							rctaahorros= CtaAhorros(idCajaDebe=ctaahorros,id_cliente=Cli,saldo=Ingres,nroDias=NroDias,interes=Interes,frecNroDias=frecNroDias,frecInteres=frecInteres,estado='activo',observaciones=Observacion,privadoOficina='no',tipoCuenta='',claveAcceso=FechaNacimiento)
							rctaahorros.save()
							mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=rctaahorros,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,subMontoDeposito=Ingres,interesGanado=0,observacionesMovimientos='Monto con el que se Aperturo la Cuenta',auxIG=0,tipoDocumento='R/I',nroRecibo=str(numeroR),comision=comision,tabla='TCajaDebe',aux1=ctaahorros.pk,nroDias=NroDias,frecNroDias=frecNroDias,frecInteres=frecInteres,interes=Interes)
							mctaahorros.save()
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
							CtaDes= CtaAhorro_Desktop(idCtaAhorro=rctaahorros,idDesktop= idCtaLocal,id_caja=C,mac=mac)
							CtaDes.save()
							CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac)
							CtaMovDes.save()
							dato={'idLocal':idCtaLocal,'idRemoto':rctaahorros.pk}
							exito='1'
						else:
							error='error en tipo de moneda'
							exito='-1'
					else:
						ctaAh=CtaAhorro_Desktop.objects.get(idDesktop=idCtaLocal, id_caja=C.pk)
						dato={'idLocal':idCtaLocal,'idRemoto':ctaAh.idCtaAhorro.pk}
						exito='1'
				else:
					exito='-1'
					error='error de autentificacion'
			else:
				exito='-1'
				error='error en tipo de persona'

	except IntegrityError:
			exito='-1'
			error="error de integridad"
	except:
		exito='-1'
		error=str(sys.exc_info()[1])
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@transaction.atomic
def CtaAhorrosDepositarDesktop_view(request):#encargado de crear cta ahorros
	data=''
	if request.is_ajax:
		idCtaLocal=request.GET.get('idLocal')
		IdCtaAhorros=request.GET.get('idRemoto')
		idMovCtaLocal=request.GET.get('idMovLocal')
		idCaja=request.GET.get('idCaja')
		mac=request.GET.get('mac','')
		montoDeposito=request.GET.get('monto','')
		observaciones=request.GET.get('observaciones','')
		comision=request.GET.get('comision')
		frecNroDias=request.POST.get('ComboFrecuenciaNroDias')
		NroDias=request.POST.get('nroDias','')
		frecInteres=request.POST.get('ComboFrecuenciaInteres')
		frecInteres
		Interes= request.POST.get('interes')
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")
		dato={}
		error=''
		exito=''
		C = Cajas.objects.get(pk=idCaja)

		if NroDias=='' or NroDias==None:
			NroDias=0

		if Interes=='' or Interes==None:
			Interes=0

		if comision=='' or comision==None:
			comision=0
		if frecInteres =='SEMANAS':
			frecInteres='S'
		elif frecInteres=='MESES':
			frecInteres='m'
		elif frecInteres=='DIAS':
			frecInteres='d'
		if montoDeposito !='' and montoDeposito != None:
			montoDeposito = ConvertirDecimal(montoDeposito)
			try:
				with transaction.atomic():
					if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
						if  CtaAhorros.objects.filter(pk=IdCtaAhorros).exists():
							#CtaAho=CtaAhorro_Desktop.objects.get(idDesktop=idCtaLocal, id_caja=C.pk)
							#IdCtaAhorros=CtaAho.pk
							if not CtaAhorroMov_Desktop.objects.filter(idDesktop=idMovCtaLocal,id_caja=C.pk).exists():
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroRI)+1
								dataNro=numeroR
								#NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
								ObjSaldo= CtaAhorros.objects.get(pk=IdCtaAhorros)
								ObjDebe=TCajaDebe.objects.get(pk=ObjSaldo.idCajaDebe.pk)
								moneda=ObjDebe.moneda
								ObjCliente=Cliente.objects.get(pk=ObjSaldo.id_cliente.pk)
								ObjSaldoCaja= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								SaldoSoles= ConvertirDecimal(ObjSaldoCaja.saldo_soles)
								SaldoDolares= ConvertirDecimal(ObjSaldoCaja.saldo_dolares) 
								if ObjSaldo.saldo>=0:
									if moneda=='soles':
										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
										ctaahorros= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Deposito en Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/I',cantidadDinero=ConvertirDecimal(montoDeposito)+ConvertirDecimal(comision),moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
										ctaahorros.save()
										octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
										mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=(float(ObjSaldo.saldo)+float(montoDeposito)), observacionesMovimientos='Abono a Cta Ahorros Nro. '+str(IdCtaAhorros),tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=ctaahorros.pk,comision=comision,frecNroDias=frecNroDias,nroDias=NroDias,frecInteres=frecInteres,interes=Interes)
										mctaahorros.save()
										CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
										CtaMovDes.save()
										mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='abono')
										mcomisionctaahorros.save()
										aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=(float(ObjSaldo.saldo)+float(montoDeposito)),fechaCierre=fechaActual)
										SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)+float(montoDeposito)+float(comision),fecha=fechaActual)
										exito='1'
										dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
									else:
										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
										ctaahorros= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Deposito en Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/I',cantidadDinero=ConvertirDecimal(montoDeposito)+ConvertirDecimal(comision),moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
										ctaahorros.save()
										octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
										mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=(float(ObjSaldo.saldo)+float(montoDeposito)), observacionesMovimientos='Abono a Cta Ahorros Nro. '+str(IdCtaAhorros),tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=ctaahorros.pk,comision=comision,frecNroDias=frecNroDias,nroDias=NroDias,frecInteres=frecInteres,interes=Interes)
										mctaahorros.save()
										CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
										CtaMovDes.save()
										mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='abono')
										mcomisionctaahorros.save()
										aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=(float(ObjSaldo.saldo)+float(montoDeposito)),fechaCierre=fechaActual)
										SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoDolares)+float(montoDeposito)++float(comision),fecha=fechaActual)
										exito='1'
										dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
								else:
									#------- sobregiro --------
									
									ctaahorros = CtaAhorrosMovimientos.objects.filter(id_ctaahorros=IdCtaAhorros,montoSobregiro__gt=0).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro','pk').reverse()[:1]
									montoSobregiroRestante=ctacte[0]['montoSobregiro']
									nroSogreGiro=ctacte[0]['sobregiroNro']
									idCCS=ctacte[0]['pk']
									if montoSobregiroRestante =='' or montoSobregiroRestante == None:
										montoSobregiroRestante=0
									else:
										montoSobregiroRestante=ConvertirDecimal(montoSobregiroRestante)

									saldoUMov=ctacte[0]['saldo']
									sobregiroNro=ctacte[0]['sobregiroNro']
									interesSobregiro=ctacte[0]['interesSobregiro']
									nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']
									if nroDiasSobregiro =='' or nroDiasSobregiro == None:
										nroDiasSobregiro=0
									if interesSobregiro=='' or interesSobregiro==None:
										interesSobregiro=0 
									
									fechaDelSobregiro=ctacte[0]['fechaHora'].strftime("%d-%m-%Y")
									formato_fecha = "%d-%m-%Y"
									fecha_inicial = datetime.datetime.strptime(str(fechaDelSobregiro), formato_fecha)
									fecha_final = datetime.datetime.strptime(str(fechaActual_), formato_fecha)
									diferencia = fecha_final-fecha_inicial

									#calculamos los dias excedidos
									nroDiasExcedidosSobregiro=diferencia.days
									nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro-nroDiasSobregiro
									interesMoraSobregiro=0

									if nroDiasExcedidosSobregiro>0:
										interesMoraSobregiro=ConvertirDecimal(montoSobregiroRestante)*ConvertirDecimal((interesSobregiro/100))
										interesMoraSobregiro=interesMoraSobregiro*nroDiasExcedidosSobregiro
									else:
										interesMoraSobregiro=0

									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									cd= TCajaDebe(id_personal=C.id_usuario, tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Deposito en Cta Ahorros '+str(IdCtaAhorros)+' de '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno +', <Pago de Sobregiro>',tipoDocumento='R/I',cantidadDinero=montoDeposito,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='n')
									cd.save()

									saldoUMovAhora=0

									if (ConvertirDecimal(saldoUMov)+ConvertirDecimal(montoDeposito))<=0:
										#saldo (-)
										saldoUMovAhora=(ConvertirDecimal(saldoUMov)+ConvertirDecimal(montoDeposito))-ConvertirDecimal(interesMoraSobregiro)
									elif (ConvertirDecimal(saldoUMov)+ConvertirDecimal(montoDeposito))>=ConvertirDecimal(interesMoraSobregiro):
										#saldo (+)
										saldoUMovAhora=(ConvertirDecimal(saldoUMov)+ConvertirDecimal(montoDeposito))-ConvertirDecimal(interesMoraSobregiro)
									else:
										saldoUMovAhora=(-1)*(ConvertirDecimal(interesMoraSobregiro)-(ConvertirDecimal(saldoUMov)+ConvertirDecimal(montoDeposito)))

									
									octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
									mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=saldoUMovAhora,sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiroRestante,nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro,interesMoraSobregiro=interesMoraSobregiro,saldoConMoraSobregiro=(ConvertirDecimal(saldoUMov)-ConvertirDecimal(interesMoraSobregiro)),observacionesMovimientos='Deposito en Cta Ahorros Nro. '+str(IdCtaAhorros)+' <Pago de Sobregiro>',auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=cd.pk,comision=comision,frecNroDias=frecNroDias,nroDias=NroDias,frecInteres=frecInteres,interes=Interes)
									mctaahorros.save()
									CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
									CtaMovDes.save()
									mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='abono')
									mcomisionctaahorros.save()

									aux= CtaAhorros.objects.filter(pk=IdCtaAhorros).update(saldo=saldoUMovAhora,fechaCierre=fechaActual)

									if moneda=='soles':
										SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)+float(montoDeposito),fecha=fechaActual)
									else:
										SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoDolares)+float(montoDeposito),fecha=fechaActual)
									exito='1'
									dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
							else:
								exito='1'
								dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
						else:
							error='La Cta de Ahorro no existe'
							exito='-1'
					else:
						exito='-1'
						error='error en autentificacion'
			except IntegrityError:
				exito='-1'
				error="error de integridad"
			except:
				exito='-1'
				error=str(sys.exc_info()[1])
		else:
			exito='-1'
			error='Monto ingresado es incorrecto'

	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@transaction.atomic
def CtaAhorrosRetirarDesktop_view(request):#
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	tcRecibo=''
	importeRecibo=''
	importeReciboDolarizadoSolarizado=''
	dato={}
	error=''
	exito=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idCtaLocal=request.GET.get('idLocal')
		IdCtaAhorros=request.GET.get('idRemoto')
		idMovCtaLocal=request.GET.get('idMovLocal')
		mac=request.GET.get('mac')
		#IdCtaAhorros=request.GET.get('idctaahorros','')
		montoRetiro=request.GET.get('monto','')
		observaciones=request.GET.get('obs','')
		interes=request.GET.get('interes','')
		nroDias=request.GET.get('nrodias','')
		comision=request.GET.get('comision','')
		estadoConf=request.GET.get('estado','')
		tipoC=request.GET.get('tc','')
		CodigoA = request.GET.get('CodigoAut')
		Clave= request.GET.get('clave')
		cliente= request.GET.get('idCliente')
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		

		if comision=='' or comision==None:
			comision=0
		else:
			comision=ConvertirDecimal(comision)

		if interes ==''or interes == None:
			interes=0
		else:
			interes = ConvertirDecimal(interes)

		if nroDias ==''or nroDias == None:
			nroDias=0
		else:
			nroDias = ConvertirDecimal(nroDias)
		if montoRetiro !='' and montoRetiro != None:
			montoRetiro = ConvertirDecimal(montoRetiro)
			if montoRetiro>0:
				try:
					with transaction.atomic():
						C= Cajas.objects.get(pk=idCaja)
						if Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
							if CtaAhorros.objects.filter(pk=IdCtaAhorros).exists():
								#CtaAho=CtaAhorro_Desktop.objects.get(idDesktop=idCtaLocal, id_caja=C.pk)
								#IdCtaAhorros=CtaAho.pk
								if (CtaAhorros.objects.filter(id=IdCtaAhorros,claveAcceso=Clave).exists()):
									if not CtaAhorroMov_Desktop.objects.filter(idDesktop=idMovCtaLocal,id_caja=C.pk).exists():
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroRE)+1
										ObjSaldo= CtaAhorros.objects.get(pk=IdCtaAhorros)
										ObjDebe=TCajaDebe.objects.get(pk=ObjSaldo.idCajaDebe.pk)
										moneda=ObjDebe.moneda
										ObjCliente=Cliente.objects.get(pk=ObjSaldo.id_cliente.pk)
										ObjSaldoCaja= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										SaldoSoles= ConvertirDecimal(ObjSaldoCaja.saldo_soles)
										SaldoDolares= ConvertirDecimal(ObjSaldoCaja.saldo_dolares)
										if ObjSaldo.estado!='bloqueado':
											if (float(ObjSaldo.saldo)-float(montoRetiro)-float(comision))>=0: 
												if moneda=='soles':
													if (SaldoSoles >= montoRetiro): 
														saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
														SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoRetiro),fecha=fechaActual)
														C1= Cajas.objects.get(pk=C.pk)#origen
														O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
														NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
														cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro de Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
														cajah.save()
														octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
														mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero de la Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
														mctaahorros.save()
														CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
														CtaMovDes.save()
														mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
														mcomisionctaahorros.save()
														aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=saldoEgreso,fechaCierre=fechaActual)
														conceptoRecibo='Retiro de dinero de la Cta Ahorros Nro. '+str(IdCtaAhorros)
														nroRecibo=str(numeroR)
														saldoTotalRecibo='S/. '+str(saldoEgreso)
														importeRecibo='S/. '+str(montoRetiro)
														exito='1'
														dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
													else:
														if estadoConf==0 or estadoConf=='0':
															exito='-1'
															error='Saldo insuficiente en la caja de soles. ¿Desea retirar de la caja de dolares?'
														else:
															montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
															if montoDolarizado<=SaldoDolares:
																saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
																SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoDolarizado),fecha=fechaActual)
																C1= Cajas.objects.get(pk=C.pk)#origen
																O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
																NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
																cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro de dinero dolarizado Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoDolarizado,moneda='dolares',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
																cajah.save()
																octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
																mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoDolarizado,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero dolarizado de la Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
																mctaahorros.save()
																CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
																CtaMovDes.save()
																mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
																mcomisionctaahorros.save()
																aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro),fechaCierre=fechaActual)
																conceptoRecibo='Retiro de dinero dolarizado de la Cta Ahorros Nro. '+str(IdCtaAhorros)
																nroRecibo=str(numeroR)
																saldoTotalRecibo='S/. '+str(saldoEgreso)
																#importeRecibo='$/. '+str(montoDolarizado)
																importeRecibo='S/. '+str(montoRetiro)
																importeReciboDolarizadoSolarizado='$/. '+str(montoDolarizado)
																tcRecibo=str(tipoC)
																exito='1'
																dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
															else:
																exito='-1'
																error='Saldo insuficiente en la caja de dolares'

															

												elif moneda=='dolares':
													if (SaldoDolares>=montoRetiro):
														saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
														SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoRetiro),fecha=fechaActual)
														C1= Cajas.objects.get(pk=C.pk)#origen
														O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
														NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
														cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro de Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
														cajah.save()
														octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
														mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero de la Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
														mctaahorros.save()
														CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
														CtaMovDes.save()
														mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
														mcomisionctaahorros.save()
														aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=saldoEgreso,fechaCierre=fechaActual)
														conceptoRecibo='Retiro de dinero de la Cta Ahorros Nro. '+str(IdCtaAhorros)
														nroRecibo=str(numeroR)
														saldoTotalRecibo='$/. '+str(saldoEgreso)
														importeRecibo='$/. '+str(montoRetiro)
														exito='1'
														dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
													else:
														if estadoConf==0 or estadoConf=='0':
															exito='-1'
															error='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
														else:
															montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
															if montoSolarizado<=SaldoSoles:
																saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
																SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoSolarizado),fecha=fechaActual)
																C1= Cajas.objects.get(pk=C.pk)#origen
																O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
																NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
																cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro de Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoSolarizado,moneda='soles',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
																cajah.save()
																octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
																mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoSolarizado,saldo=saldoEgreso, observacionesMovimientos='Retiro de dinero solarizado de la Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
																mctaahorros.save()
																CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
																CtaMovDes.save()
																mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
																mcomisionctaahorros.save()
																aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro),fechaCierre=fechaActual)
																conceptoRecibo='Retiro de dinero solarizado de la Cta Cte Nro. '+str(IdCtaAhorros)
																nroRecibo=str(numeroR)
																saldoTotalRecibo='$/. '+str(saldoEgreso)
																#importeRecibo='S/. '+str(montoSolarizado)
																importeRecibo='$/. '+str(montoRetiro)
																importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
																tcRecibo=str(tipoC)
																exito='1'
																dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
															else:
																exito='-1'
																error='Saldo insuficiente en la caja de soles'

											else:
												cod_aut=False
												if ConvertirDecimal(ObjSaldo.saldo)>=0:
													saldoSobregiro=round(abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)),2)
												else:
													saldoSobregiro=round(ConvertirDecimal(montoRetiro),2)

												"""
												if CodigoA!=None and CodigoA != '':
													if Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,tipoCta='Ahorros',estado='autorizado',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).exists():
														cod_aut=True
												"""
												cod_aut=True
												if cod_aut:
													if moneda=='soles':
														if (SaldoSoles >= montoRetiro):
															saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
															if ConvertirDecimal(ObjSaldo.saldo)>=0:
																saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
															else:
																saldoSobregiro=ConvertirDecimal(montoRetiro)

															SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoRetiro),fecha=fechaActual)
															CtaAhorrosM=CtaAhorrosMovimientos.objects.filter(id_ctaahorros=IdCtaAhorros).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
															nroSG=CtaAhorrosM['sobregiroNro__count']+1
															NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
															cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro con Sobregiro de Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
															cajah.save()
															octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
															mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoRetiro,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro de Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
															mctaahorros.save()
															CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
															CtaMovDes.save()
															mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
															mcomisionctaahorros.save()
															aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=saldoEgreso,fechaCierre=fechaActual)
															conceptoRecibo='Retiro con Sobregiro de Cta Ahorros Nro. '+str(IdCtaAhorros)
															nroRecibo=str(numeroR)
															saldoTotalRecibo='S/. '+str(saldoEgreso)
															importeRecibo='S/. '+str(montoRetiro)
															exito='1'
															dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
															#Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',tipoCta='Ahorros',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
														else:
															if estadoConf==0 or estadoConf=='0':
																exito='-1'
																error='Saldo insuficiente en la caja de soles. ¿Desea hacer el sobregiro en dolares?'
															else:
																montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
																if montoDolarizado<=SaldoDolares:
																	saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
																	if ConvertirDecimal(ObjSaldo.saldo)>=0:
																		saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
																	else:
																		saldoSobregiro=ConvertirDecimal(montoRetiro)

																	SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoDolarizado),fecha=fechaActual)
																	CtaAhorrosM=CtaAhorrosMovimientos.objects.filter(id_ctaahorros=IdCtaAhorros).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
																	nroSG=CtaAhorrosM['sobregiroNro__count']+1
																	NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
																	cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro con Sobregiro Dolarizado de Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoDolarizado,moneda='dolares',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
																	cajah.save()
																	octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
																	mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoDolarizado,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro Dolarizado de Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
																	mctaahorros.save()
																	CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
																	CtaMovDes.save()
																	mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
																	mcomisionctaahorros.save()
																	aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=saldoEgreso,fechaCierre=fechaActual)
																	conceptoRecibo='Retiro con Sobregiro Dolarizado de Cta Ahorros Nro. '+str(IdCtaAhorros)
																	nroRecibo=str(numeroR)
																	saldoTotalRecibo='S/. '+str(saldoEgreso)
																	#importeRecibo='$/. '+str(montoDolarizado)
																	importeRecibo='S/. '+str(montoRetiro)
																	importeReciboDolarizadoSolarizado='$/. '+str(montoDolarizado)
																	tcRecibo=str(tipoC)
																	exito='1'
																	dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
																	#Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,tipoCta='Ahorros',estado='autorizado',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
																else:
																	exito='-1'
																	error='Saldo insuficiente en la caja de dolares'


													elif moneda=='dolares':
														if (SaldoDolares>=montoRetiro):
															saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
															if ConvertirDecimal(ObjSaldo.saldo)>=0:
																saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
															else:
																saldoSobregiro=ConvertirDecimal(montoRetiro)
															SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_dolares=float(SaldoDolares)-float(montoRetiro),fecha=fechaActual)
															CtaAhorrosM=CtaAhorrosMovimientos.objects.filter(id_ctaahorros=IdCtaAhorros).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
															nroSG=CtaAhorrosM['sobregiroNro__count']+1
															NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
															cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro con Sobregiro de Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
															cajah.save()
															octaahorros= CtaAhorrosMovimientos.objects.get(pk=IdCtaAhorros)
															mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoRetiro,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro de Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk)
															mctaahorros.save()
															CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
															CtaMovDes.save()
															mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
															mcomisionctaahorros.save()
															aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=saldoEgreso,fechaCierre=fechaActual)
															conceptoRecibo='Retiro con Sobregiro de Cta Ahorros Nro. '+str(IdCtaAhorros)
															nroRecibo=str(numeroR)
															saldoTotalRecibo='$/. '+str(saldoEgreso)
															importeRecibo='$/. '+str(montoRetiro)
															exito='1'
															dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
															#Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,tipoCta='Ahorros',estado='autorizado',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
														else:
															if estadoConf==0 or estadoConf=='0':
																exito='-1'
																error='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
															else:
																montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
																if montoSolarizado<=SaldoSoles:
																	saldoEgreso=float(ObjSaldo.saldo)-float(montoRetiro)-float(comision)
																	if ConvertirDecimal(ObjSaldo.saldo)>=0:
																		saldoSobregiro=abs(ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro))
																	else:
																		saldoSobregiro=ConvertirDecimal(montoRetiro)
																	SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)-float(montoSolarizado),fecha=fechaActual)
																	CtaAhorrosM=CtaAhorrosMovimientos.objects.filter(id_ctaahorros=IdCtaAhorros).values('sobregiroNro').distinct().aggregate(Count('sobregiroNro'))
																	nroSG=CtaAhorrosM['sobregiroNro__count']+1
																	NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
																	cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Retiro con Sobregiro Solarizado de Cta Ahorros '+str(IdCtaAhorros)+' del '+ObjCliente.nombre+' '+ObjCliente.Apellido_paterno+' '+ObjCliente.Apellido_materno ,tipoDocumento='R/E',cantidadDinero=montoSolarizado,moneda='soles',observaciones=observaciones,estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
																	cajah.save()
																	octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
																	mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoRetiro=montoSolarizado,montoSobregiro=saldoSobregiro,sobregiroNro=nroSG,nroDiasSobregiro=nroDias,interesSobregiro=interes,saldo=saldoEgreso, observacionesMovimientos='Retiro con Sobregiro Solarizado de Cta Ahorros Nro. '+str(IdCtaAhorros),auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR),tabla='TCajaHaber',aux1=cajah.pk,tipoCambio=ConvertirDecimal(tipoC))
																	mctaahorros.save()
																	CtaMovDes= CtaAhorroMov_Desktop(idCtaAhorroMov=mctaahorros,id_caja=C,mac=mac,idDesktop=idMovCtaLocal)
																	CtaMovDes.save()
																	mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros,monto=comision,tipo='retiro')
																	mcomisionctaahorros.save()
																	aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=saldoEgreso,fechaCierre=fechaActual)
																	conceptoRecibo='Retiro con Sobregiro Solarizado de Cta Ahorros Nro. '+str(IdCtaAhorros)
																	nroRecibo=str(numeroR)
																	saldoTotalRecibo='$/. '+str(saldoEgreso)
																	importeRecibo='$/. '+str(montoRetiro)
																	importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
																	#importeRecibo='S/. '+str(montoSolarizado)
																	tcRecibo=str(tipoC)
																	exito='1'
																	dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
																	#Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaAhorros,tipoCta='Ahorros',aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
																else:
																	exito='-1'
																	error='Saldo insuficiente en la caja de soles'
												else:
													exito='-1'
													error='erro en codigo de autorizacion'

										else:
											exito='-1'
											error='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'
									else:
										exito='1'
										dato={'idLocal':idCtaLocal,'idMovLocal':idMovCtaLocal,'idRemoto':IdCtaAhorros}
								else:
									error='error en clave'
									exito='-1'
							else:
								error='La Cta de Ahorros no existe'
								exito='-1'
						else:
							exito='-1'
							error='error en autentificacion'
				except IntegrityError:
					exito='-1'
					error="error de integridad"
				except:
					exito='-1'
					error=str(sys.exc_info()[1])
			else:
				exito='-1'
				error='Monto ingresado es incorrecto'
		else:
			exito='-1'
			error='Monto ingresado es incorrecto'

	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


#****** intercambios *******
@transaction.atomic
def CrearIntercDesktop_view(request):
	OficinaOr = request.GET.get('OficinaOrg')
	CajaOri = request.GET.get('CajaOrg')
	idCliente=request.GET.get('IdCliente','')#capturamos los atributos del formulario
	TipoPersona=request.GET.get('TipoPersona')
	TipoPersona=TipoPersona.capitalize()
	DniRucCliente= request.GET.get('DniRucCln','')
	NombreCliente= request.GET.get('NombreCln')
	A_paternoCliente= request.GET.get('PaternoCln')
	A_maternoCliente= request.GET.get('MaternoCln')
	#DireccionCliente= request.POST.get('DireccionCln')
	NombreBenef= request.GET.get('NombreBnf')
	A_paternoBenef= request.GET.get('PaternoBnf')
	A_maternoBenef = request.GET.get('MaternoBnf')
	celular = request.GET.get('CelularBnf','')
	OficinaDestino = request.GET.get('OficinaDst')
	CajaDestino = request.GET.get('CajaDst')
	Moneda= request.GET.get('moneda')
	Moneda= str(Moneda).lower()
	Monto= request.GET.get('Monto')
	Comicion = request.GET.get('comision')
	Observaciones = request.GET.get('obs','')
	montoconcepto= request.GET.get('MontoConcepto')
	#transac_= request.GET.get('transac')
	conceptoDetalle= request.GET.get('conceptoDet','')
	idTD= request.GET.get('IdSIOrg')
	mac= request.GET.get('mac')
	recibo_obs=Observaciones
	recibo_det=conceptoDetalle
	ODes= ''
	ODir=''
	soli=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	canti=0
	transac=''
	nombre_ori=''
	dato={}
	error=''
	exito=''
	if NombreBenef != None:
		if OficinaDestino != OficinaOr:
			if DniRucCliente == None:
				DniRucCliente=''
			if montoconcepto ==''or montoconcepto == None:
				montoconcepto=0
			else:
				montoconcepto = ConvertirDecimal(montoconcepto)

			if TipoPersona ==''or TipoPersona == None:
				TipoPersona='Natural'
			try:
				with transaction.atomic():
					C= Cajas.objects.get(pk=CajaOri)
					if not Intercambio_Desktop.objects.filter(id_intercambio_desktop=idTD,mac=mac).exists() and idTD!= None:
						bene=NombreBenef+', '+A_paternoBenef+' '+A_maternoBenef
						soli=NombreCliente+' '+A_paternoCliente+' '+A_maternoCliente
						sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,dni=DniRucCliente).values('pk')
						if idCliente == '' or idCliente== None:
							if sq.count()==0:
								cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
						Comi= ConvertirDecimal(Comicion)
						CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if Comi >= CE.comision_minima and montoconcepto >= CE.otros_conceptos_minimo:
							comi1=str(Comicion)
							Cantidad= ConvertirDecimal(Monto)
							capi1=str(Monto)
							otros1=str(montoconcepto)
							Ingres= Cantidad+Comi+montoconcepto
							canti=str(Ingres)
							cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
							idSaldo= str(cons_saldo.pk)
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroST)+1
							nroReci=numeroR
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroST=numeroR)
							if Moneda=='dolares':
								C1= Cajas.objects.get(pk=C.pk)#origen
								O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
								Cli= Cliente.objects.get(pk=idCliente)
								OD= Oficina.objects.get(pk=OficinaDestino)#destino
								ODes=OD.nombre_oficina
								ODir=OD.direccion
								saldo= SaldoDolares+Ingres
								SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_dolares=saldo)
								transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='Intercambio',conceptoDetalle='si-'+str(C.pk)+'-'+C.id_usuario.nombre,tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
								transferencia.save()
								idCajaD=transferencia.pk
								Stransferencia= Intercambio(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto)
								Stransferencia.save()
								if CajaDestino != None and CajaDestino !='':
									cajad= Cajas.objects.get(pk=CajaDestino)
									interD=Intercambios_dirigido(id_intercambio=Stransferencia,id_caja_destino=cajad)
									interD.save()
								td= Intercambio_Desktop(id_intercambio=Stransferencia,id_intercambio_desktop=idTD,mac=mac,nroRecibo=nroReci)
								td.save()
								dato={'idSILocal':idTD,'idSIRemoto':Stransferencia.pk,'nroRecibo':nroReci}
								#socket
								if celular != None and celular!="":
									"""
									aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a: "+OD.direccion +"\nAtte. Consorcio Imperial"
									sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
									sms.save()
									aux_host= host_socket_io();
									aux_puerto= puerto_socket_io();
									mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
									with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
										socketIO.emit('mensaje_imperial',mensaje)
									"""
								#endsocket
								exito='1'
							elif Moneda=='soles':
								C1= Cajas.objects.get(pk=C.pk)#origen
								O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
								Cli= Cliente.objects.get(pk=idCliente)
								OD= Oficina.objects.get(pk=OficinaDestino)#destino
								ODes=OD.nombre_oficina
								ODir=OD.direccion
								saldo= SaldoSoles+Ingres
								SaldoDisponibleCajas.objects.filter(pk= idSaldo).update(saldo_soles=saldo)
								transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='Intercambio',conceptoDetalle='si-'+str(C.pk)+'-'+C.id_usuario.nombre,tipoDocumento='S/T',cantidadDinero=Ingres,moneda=Moneda,observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
								transferencia.save()
								idCajaD=transferencia.pk
								Stransferencia= Intercambio(idCajaDebe=transferencia,id_cliente=Cli,id_oficina=OD,comision=Comi,nombre_beneficiado=NombreBenef,Apellido_paterno_beneficiado=A_paternoBenef,Apellido_materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto)
								Stransferencia.save()
								if CajaDestino != None and CajaDestino !='':
									cajad= Cajas.objects.get(pk=CajaDestino)
									interD=Intercambios_dirigido(id_intercambio=Stransferencia,id_caja_destino=cajad)
									interD.save()
								td= Intercambio_Desktop(id_intercambio=Stransferencia,id_intercambio_desktop=idTD,mac=mac,nroRecibo=nroReci)
								td.save()
								dato={'idSILocal':idTD,'idSIRemoto':Stransferencia.pk,'nroRecibo':nroReci}
								#socket
								if celular != None and celular!="":
									"""
									aux_sms="Sr(a). "+bene+"\nUsted tiene una tranferencia en nuestras oficinas. Por favor pase a recoger a la "+OD.direccion +"\nAtte. Consorcio Imperial"
									sms = Mensajeria_sms(id_transaccion=Stransferencia.pk,nro_envio=1,tabla="SolicitudTransferencia",celular=celular,estado="espera",fecha_op=date.today(),texto=aux_sms)
									sms.save()
									aux_host= host_socket_io();
									aux_puerto= puerto_socket_io();
									mensaje={'numero':celular,'sms':aux_sms,'id':sms.pk}
									with SocketIO(aux_host, aux_puerto, LoggingNamespace) as socketIO:
										socketIO.emit('mensaje_imperial',mensaje)
									"""
								#endsocket
								exito='1'
							else:
								exito='-1'
								error='error tipo de moneda'
						else:
							exito='-1'
							error=' comision u Otros Comceptos demasiado bajo... comuniquese con el gerente'
					else:
						if idTD == None:
							exito='-1'
							error='ID intercambio invalido'
						else:
							if Intercambio_Desktop.objects.filter(id_intercambio_desktop=idTD,mac=mac).exists():
								TD= Intercambio_Desktop.objects.get(id_intercambio_desktop=idTD,mac=mac)
								exito='1'
								dato={'idSILocal':idTD,'idSIRemoto':TD.id_intercambio.pk,'nroRecibo':TD.nroRecibo}
			except IntegrityError:
				exito='-1'
				error='error de integridad'
			except:
				exito='-1'
				error='fail1'+ str(sys.exc_info()[1])
		else:
			exito='-1'
			error='seleccione una oficina destino valido'
	else:
		exito='-1'
		error='Error'
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)
#****************** extornar intercambios **********************
@transaction.atomic
def extornarIntercDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idTr=request.GET.get('idSIRemoto')
		idTrDes=request.GET.get('idSILocal')
		dnib=request.GET.get('dni','')
		mac=request.GET.get('mac','')
		obsp=request.GET.get('obs','')
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if Intercambio_Desktop.objects.filter(id_intercambio=idTr,id_intercambio_desktop=idTrDes,mac=mac).count()==1 and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					if Intercambio.objects.filter(pk=idTr,idCajaDebe__id_caja=C.pk,idCajaDebe__estadoTransaccion='activo').exists():
						con_st= Intercambio.objects.get(pk=idTr,idCajaDebe__id_caja=C.pk,idCajaDebe__estadoTransaccion='activo')
						idTcajaD= str(con_st.idCajaDebe.pk)
						conceptoDetall= 'Extornado a ' + con_st.id_cliente.nombre + ' ' + con_st.id_cliente.Apellido_paterno + ' ' + con_st.id_cliente.Apellido_materno
						Moneda= str(con_st.idCajaDebe.moneda)
						Csaldo= SaldoDisponibleCajas.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
						cons_saldo= list(Csaldo)
						idSaldo= str(cons_saldo[0]['pk'])
						SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
						SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
						MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero) - ConvertirDecimal(con_st.comision)- ConvertirDecimal(con_st.monto_conceptos)
						CE=ConfiguracionExtra_caja.objects.get(id_caja=C.pk)
						if CE.extorno_total=='si':
							MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero)
							TCajaDebe.objects.select_for_update().filter(pk=idTcajaD).update(aux1='todo')
						if Moneda=='soles':
							if SaldoSoles >= MontoEgreso:
								if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
									TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
									saldoEgreso=SaldoSoles-MontoEgreso
									Csaldo.update(saldo_soles=saldoEgreso)
									CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoIntercambio',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
									CajaH.save()
									auxx=Intercambio.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

									OST= Intercambio.objects.get(pk=idTr)
									EST=ExtornoIntercambio(idCajaHaber=CajaH,id_intercambio=OST,observaciones=obsp)
									EST.save()

									#CDebe.update(estadoTransaccion='pagado')
									#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
									exito='1'
									dato={'idSIRemoto':idTr,'idSILocal':idTrDes}
								else:
									exito='-1'
									error='error en la operacion'
							else:
								exito='-1'
								error="saldo insuficiente"
						elif Moneda=='dolares':
							if SaldoDolares>=MontoEgreso:
								if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
									TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
									saldoEgreso=SaldoDolares-MontoEgreso
									Csaldo.update(saldo_dolares=saldoEgreso)
									CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoIntercambio',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
									CajaH.save()
									auxx=Intercambio.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

									OST= Intercambio.objects.get(pk=idTr)
									EST=ExtornoIntercambio(idCajaHaber=CajaH,id_intercambio=OST,observaciones=obsp)
									EST.save()
									#CDebe.update(estadoTransaccion='pagado')
									#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
									exito="1"
									dato={'idSIRemoto':idTr,'idSILocal':idTrDes}
								else:
									exito='-1'
									error='error en la operacion'
							else:
								exito='-1'
								error="saldo insuficiente"
						else:
							exito='-1'
							error="error moneda"
					else:
						st1=Intercambio.objects.get(pk=idTr)
						exito='0'
						dato={'idSILocal':idTrDes,'idSIRemoto':idTr,'estado':st1.idCajaDebe.estadoTransaccion}
						error= 'El intercambio esta '+st1.idCajaDebe.estadoTransaccion
				else:
					exito='-1'
					error='error verificacion intercambio'
		except IntegrityError:
			exito='-1'
			error="serror de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#******************** intercambios guardado en desktop ***************
@transaction.atomic
def guardadoIntercDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idTr=request.GET.get('idSIRemoto')
		idTrDesktop=request.GET.get('idSILocal')
		mac=request.GET.get('mac','')
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if Intercambio.objects.filter(pk=idTr).exists() and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					if not Intercambio_recibidas_Desktop.objects.filter(id_intercambio=idTr).exists():
						st= Intercambio.objects.get(pk=idTr)
						st_recibido= Intercambio_recibidas_Desktop(id_intercambio=st,id_intercambio_desktop=idTrDesktop,mac=mac,estado=st.idCajaDebe.estadoTransaccion)
						st_recibido.save()
						exito='1'
					else:
						exito='1'
				else:
					exito='-1'
					error='error verificacion st'
		except IntegrityError:
			exito='-1'
			error="serror de integridad"
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail consult"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


#******************* pagar intercambios *************************
"""
@transaction.atomic
def PagoIntercDesktop_view(request):
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		mac=request.GET.get('mac')
		idTr=request.GET.get('idSIRemoto')
		idTrDesktop=request.GET.get('idSILocal')
		obsp=request.GET.get('obs','')
		dnib=request.GET.get('dni','')
		egreso_pago=request.GET.get('egreso','')
		cod_aut=request.GET.get('codigo','')
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if Intercambio_recibidas_Desktop.objects.filter(id_intercambio=idTr,id_intercambio_desktop=idTrDesktop).count()==1 and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					monto_egreso_pago=0
					if Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='activo').exists():
						st= Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos')
						con_st= list(st)
						idTcajaD= str(con_st[0]['idCajaDebe'])
						CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
						con_CajaDebe= list(CDebe)
						moneda= str(con_CajaDebe[0]['moneda'])
						Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
						cons_saldo= list(Csaldo)
						idSaldo= str(cons_saldo[0]['pk'])
						SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
						SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
						MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
						#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
						if egreso_pago !='':
							monto_egreso_pago=float(egreso_pago)
						SolTr= Intercambio.objects.get(pk=idTr)
						if moneda=='soles':
							if SaldoSoles >= (MontoEgreso+monto_egreso_pago):
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									bandera=True
									if Intercambios_dirigido.objects.filter(id_intercambio=SolTr.pk).exists():
										if cod_aut !='':
											if not soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk).exists():
												inte=Intercambios_dirigido.objects.get(id_intercambio=SolTr)
												srT=soli_ret_intercambios_dir(id_intercambio_dir=inte,codigo_aut=id_generator(),estado='pendiente',id_user_solicit=C.id_usuario,id_caja_solicit=C)
												srT.save()
												bandera=False
											else:
												if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
										else:
											bandera=False

									if bandera:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroPT)+1
										NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
										nr=numeroR
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoIntercambio',conceptoDetalle='PagoIntercambio',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										idCajaH= CajaH.pk
										idST = Intercambio.objects.get(pk=idTr)
										PagoT= PagoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp)
										PagoT.save()
										CDebe.update(estadoTransaccion='pagado')
										if monto_egreso_pago>0:
											numeroR_e=int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
											TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
											TCajaH.save()
											eex= EgresoExtraIntercambio(idCajaHaber=TCajaH,id_pago_intercambio=PagoT,monto=monto_egreso_pago)
											eex.save()
										saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago
										Csaldo.update(saldo_soles=saldoEgreso)
										st.update(dni_beneficiado=dnib)
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										Intercambio_recibidas_Desktop.objects.filter(id_intercambio=idTr,id_intercambio_desktop=idTrDesktop,mac=mac).update(estado='pagado')
										exito="1"
										dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'nroRecibo':numeroR}
									else:
										exito='-2'
										error="Este intercambio no es para su caja. Solicite codigo de autorizacion al Gerente"
								else:
									exito='-1'
									error ="error en operacion"
							else:
								exito='-1'
								error="saldo insuficiente"
						elif moneda=='dolares':
							if SaldoDolares>=(MontoEgreso+monto_egreso_pago):
								if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
									bandera=True
									if Intercambios_dirigido.objects.filter(id_intercambio=SolTr.pk).exists():
										if cod_aut !='':
											if not soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk).exists():
												inte=Intercambios_dirigido.objects.get(id_intercambio=SolTr)
												srT=soli_ret_intercambios_dir(id_intercambio_dir=inte,codigo_aut=id_generator(),estado='pendiente',id_user_solicit=C.id_usuario,id_caja_solicit=C)
												srT.save()
												bandera=False
											else:
												if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
										else:
											bandera=False
									if bandera:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroPT)+1
										NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
										nr=numeroR
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										idCajaH= CajaH.pk
										idST = Intercambio.objects.get(pk=idTr)
										PagoT= PagoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp)
										PagoT.save()
										CDebe.update(estadoTransaccion='pagado')
										if monto_egreso_pago>0:
											numeroR_e=int(Nrecibo.nroRE)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
											TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de transferencia -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
											TCajaH.save()
											eex= EgresoExtraIntercambio(idCajaHaber=TCajaH,id_pago_intercambio=PagoT,monto=monto_egreso_pago)
											eex.save()
										saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago
										Csaldo.update(saldo_dolares=saldoEgreso)
										st.update(dni_beneficiado=dnib)
										#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
										Intercambio_recibidas_Desktop.objects.filter(id_intercambio=idTr,id_intercambio_desktop=idTrDesktop,mac=mac).update(estado='pagado')
										exito="1"
										dato={'idSTLocal':idTrDesktop,'idSTRemoto':idTr,'nroRecibo':numeroR}
									else:
										exito='-2'
										error="Este intercambio no es para su caja. Solicite codigo de autorizacion al Gerente"
								else:
									exito='-1'
									error ="error en operacion"
							else:
								exito='-1'
								error="saldo insuficiente"
						else:
							exito='-1'
							error='fail'
					else:
						st1=Intercambio.objects.get(pk=idTr)
						exito='0'
						dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'estado':st1.idCajaDebe.estadoTransaccion}
						error= 'El intercambio esta '+st1.idCajaDebe.estadoTransaccion
				else:
					exito='-1'
					error='error autentificacion'
		except IntegrityError:
			exito='-1'
			error='error de integridad'
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)
"""
@transaction.atomic
def PagoIntercDesktop_view(request):
	data=''
	nr=''
	if request.is_ajax:
		ade=request.GET.get('adelanto','')
		idA=request.GET.get('idALocal','')
		idCaja=request.GET.get('idCaja')
		mac=request.GET.get('mac')
		idTr=request.GET.get('idSIRemoto')
		idTrDesktop=request.GET.get('idSILocal')
		obsp=request.GET.get('obs','')
		dnib=request.GET.get('dni','')
		egreso_pago=request.GET.get('egreso','')
		cod_aut=request.GET.get('codigo','')
		dato={}
		error=''
		exito=''
		try:
			with transaction.atomic():
				C = Cajas.objects.get(pk=idCaja)
				if Intercambio_recibidas_Desktop.objects.filter(id_intercambio=idTr,id_intercambio_desktop=idTrDesktop).count()==1 and Usuario_Desktop.objects.filter(id_usuario=C.id_usuario.pk,mac= mac).count()==1:
					inRe=Intercambio_recibidas_Desktop.objects.get(id_intercambio=idTr,id_intercambio_desktop=idTrDesktop)
					if ade !='' or PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).exists():
						if Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='activo').exists():
							if not PagoAdelantoIntercambio_Desktop.objects.filter(id_intercambio_recibido_desk=inRe.pk,id_Adelanto_interc_desktop=idA).exists():
								monto_egreso_pago=0
								st= Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos')
								con_st= list(st)
								idTcajaD= str(con_st[0]['idCajaDebe'])
								CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
								con_CajaDebe= list(CDebe)
								moneda= str(con_CajaDebe[0]['moneda'])
								Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
								cons_saldo= list(Csaldo)
								idSaldo= str(cons_saldo[0]['pk'])
								SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
								SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
								MontoIn=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
								MontoEgreso=0
								val=True
								todo='si'
								ui=None
								es_ua=False
								if ade !='':
									MontoEgreso= float(ade)
									if PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).exists():
										ui=PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).latest("pk")
										if MontoEgreso< float(ui.saldo):
											todo='no'
										val= MontoEgreso<= float(ui.saldo)
									else:
										val= MontoEgreso < MontoIn
										todo='no'

								else:
									ui=PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).latest("pk")
									MontoEgreso= float(ui.saldo)
									es_ua=True
									
								#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
								#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
								if egreso_pago !='':
									monto_egreso_pago=float(egreso_pago)
								SolTr= Intercambio.objects.get(pk=idTr)
								if moneda=='soles':
									if SaldoSoles >= (MontoEgreso+monto_egreso_pago) and val:
										if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
											bandera=True
											if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
												if not soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk).exists():
													inte=Intercambios_dirigido.objects.get(id_intercambio=SolTr)
													srT=soli_ret_intercambios_dir(id_intercambio_dir=inte,codigo_aut=id_generator(),estado='pendiente',id_user_solicit=C.id_usuario,id_caja_solicit=C)
													srT.save()
													bandera=False
												else:
													if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
														bandera =True
														soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
													else:
														bandera=False
											if bandera:
												numeroR=0
												nra=0
												saldoAd=MontoIn
												if ui != None:
													nra= ui.nroAdelanto
													saldoAd=float(ui.saldo)
													numeroR=int(ui.nroReciboPI)
												else:
													Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
													numeroR = int(Nrecibo.nroPT)+1
													NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
												nr=numeroR
												CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoAdelantoIntercambio',conceptoDetalle='Adelanto de intercambio',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR)+'- A'+completar(nra+1))
												CajaH.save()
												idCajaH= CajaH.pk
												idST = Intercambio.objects.get(pk=idTr)
												PagoT= PagoAdelantoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp,nroAdelanto=nra+1,nroReciboPI=numeroR,saldo=saldoAd - MontoEgreso )
												PagoT.save()
												pagoADesk=PagoAdelantoIntercambio_Desktop(id_intercambio_recibido_desk=inRe,id_PagoAdeInterc=PagoT,id_Adelanto_interc_desktop=idA,mac=mac)
												pagoADesk.save()
												if todo=='si':
													CDebe.update(estadoTransaccion='pagado')
												if monto_egreso_pago>0:
													Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
													numeroR_e=int(Nrecibo.nroRE)+1
													NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
													TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
													TCajaH.save()
													eex= EgresoExtraIntercambioAdelanto(idCajaHaber=TCajaH,id_pago_intercambio_a=PagoT,monto=monto_egreso_pago)
													eex.save()
												saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago
												Csaldo.update(saldo_soles=saldoEgreso)
												st.update(dni_beneficiado=dnib)
												#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
												liAde=[]
												pa= PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).order_by('pk').values('pk','fecha','idCajaHaber','id_intercambio','nroAdelanto','nroReciboPI','observaciones','saldo')
												inte= Intercambio.objects.get(pk=pa[0]['id_intercambio'])
												for i in range(len(pa)):
													dato={}
													haber= TCajaHaber.objects.get(pk=pa[i]['idCajaHaber'])
													dato['idARemoto']=pa[i]['pk']
													dato['fecha']=str(pa[i]['fecha'].strftime("%d-%m-%Y %H:%M"))
													dato['nroAdelanto']= pa[i]['nroAdelanto']
													dato['nroR']= haber.nroRecibo.split('-')[0]
													dato['obs']=pa[i]['observaciones']
													dato['saldo']=float(pa[i]['saldo'])
													dato['monto']=float(haber.cantidadDinero)
													dato['p']=haber.id_personal.pk
													dato['c']=haber.id_caja.pk
													dato['idALocal']=None
													if PagoAdelantoIntercambio_Desktop.objects.filter(id_PagoAdeInterc=pa[i]['pk']).exists():
														aux_p= PagoAdelantoIntercambio_Desktop.objects.get(id_PagoAdeInterc=pa[i]['pk'])
														dato['idALocal']=aux_p.id_Adelanto_interc_desktop
													if i==0:
														dato['saldoa']=float(inte.idCajaDebe.cantidadDinero)-float(inte.comision)- float(inte.monto_conceptos)
													else:
														dato['saldoa']=float(pa[i-1]['saldo'])
													liAde.append(dato)
												exito="2"
												dato={'listaAde':liAde}
												if es_ua:
													exito="1"
													dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'nroRecibo':haber.nroRecibo.split('-')[0],'adelanto':pa[i]['nroAdelanto']}
												#dato={'idARemoto':pagoADesk.pk,'idALocal':idA,'idSILocal':idTrDesktop,'idSIRemoto':idTr,'listaAde':liAde}
											else:
												exito='-2'
												error="Este intercambio no es para su caja. Solicite codigo de autorizacion al Gerente"
										else:
											exito ="-1"
											error='error en operacion'
									else:
										exito="-1"
										error= 'saldo insuficiente'
								elif moneda=='dolares':
									if SaldoDolares>=(MontoEgreso+monto_egreso_pago) and val:
										if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
											bandera=True
											if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
												if not soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk).exists():
													inte=Intercambios_dirigido.objects.get(id_intercambio=SolTr)
													srT=soli_ret_intercambios_dir(id_intercambio_dir=inte,codigo_aut=id_generator(),estado='pendiente',id_user_solicit=C.id_usuario,id_caja_solicit=C)
													srT.save()
													bandera=False
												else:
													if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
														bandera =True
														soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
													else:
														bandera=False
											if bandera:
												numeroR=0
												nra=0
												saldoAd=MontoIn
												if ui != None:
													nra= ui.nroAdelanto
													saldoAd=float(ui.saldo)
													numeroR=int(ui.nroReciboPI)
												else:
													Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
													numeroR = int(Nrecibo.nroPT)+1
													NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
												nr=numeroR
												CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoAdelantoIntercambio',conceptoDetalle='Adelanto de intercambio',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR)+' - A'+completar(nra+1))
												CajaH.save()
												idCajaH= CajaH.pk
												idST = Intercambio.objects.get(pk=idTr)
												PagoT= PagoAdelantoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp,nroAdelanto=nra+1,nroReciboPI=numeroR,saldo=saldoAd - MontoEgreso )
												PagoT.save()
												pagoADesk=PagoAdelantoIntercambio_Desktop(id_intercambio_recibido_desk=inRe,id_PagoAdeInterc=PagoT,id_Adelanto_interc_desktop=idA,mac=mac)
												pagoADesk.save()
												if todo=='si':
													CDebe.update(estadoTransaccion='pagado')
												if monto_egreso_pago>0:
													Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
													numeroR_e=int(Nrecibo.nroRE)+1
													NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
													TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
													TCajaH.save()
													eex= EgresoExtraIntercambioAdelanto(idCajaHaber=TCajaH,id_pago_intercambio_a=PagoT,monto=monto_egreso_pago)
													eex.save()
												saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago
												Csaldo.update(saldo_dolares=saldoEgreso)
												st.update(dni_beneficiado=dnib)
												#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
												liAde=[]
												pa= PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).order_by('pk').values('pk','fecha','idCajaHaber','id_intercambio','nroAdelanto','nroReciboPI','observaciones','saldo')
												inte= Intercambio.objects.get(pk=pa[0]['id_intercambio'])
												for i in range(len(pa)):
													dato={}
													haber= TCajaHaber.objects.get(pk=pa[i]['idCajaHaber'])
													dato['idAdelanto']=pa[i]['pk']
													dato['fecha']=str(pa[i]['fecha'].strftime("%d-%m-%Y %H:%M"))
													dato['nroAdelanto']= pa[i]['nroAdelanto']
													dato['nroR']= haber.nroRecibo.split('-')[0]
													dato['obs']=pa[i]['observaciones']
													dato['saldo']=float(pa[i]['saldo'])
													dato['monto']=float(haber.cantidadDinero)
													dato['p']=haber.id_personal.pk
													dato['c']=haber.id_caja.pk
													dato['idALocal']=None
													if PagoAdelantoIntercambio_Desktop.objects.filter(id_PagoAdeInterc=pa[i]['pk']).exists():
														aux_p= PagoAdelantoIntercambio_Desktop.objects.get(id_PagoAdeInterc=pa[i]['pk'])
														dato['idALocal']=aux_p.id_Adelanto_interc_desktop

													if i==0:
														dato['saldoa']=float(inte.idCajaDebe.cantidadDinero)-float(inte.comision)- float(inte.monto_conceptos)
													else:
														dato['saldoa']=float(pa[i-1]['saldo'])
													liAde.append(dato)
												exito="2"
												dato={'listaAde':liAde}
												if es_ua:
													exito="1"
													dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'nroRecibo':haber.nroRecibo.split('-')[0],'adelanto':pa[i]['nroAdelanto']}
												#dato={'idARemoto':pagoADesk.pk,'idALocal':idA,'idSILocal':idTrDesktop,'idSIRemoto':idTr,'listaAde':liAde}
											else:
												exito='-2'
												error="Este intercambio no es para su caja. Solicite codigo de autorizacion al Gerente"
										else:
											exito ="-1"
											error='error en operacion'
									else:
										exito="-1"
										error='saldo insuficiente'
								else:
									exito='-1'
							else:
								painde=PagoAdelantoIntercambio_Desktop.objects.get(id_intercambio_recibido_desk=inRe.pk,id_Adelanto_interc_desktop=idA)
								liAde=[]
								pa= PagoAdelantoIntercambio.objects.filter(id_intercambio=idTr).order_by('pk').values('pk','fecha','idCajaHaber','id_intercambio','nroAdelanto','nroReciboPI','observaciones','saldo')
								inte= Intercambio.objects.get(pk=pa[0]['id_intercambio'])
								for i in range(len(pa)):
									dato={}
									haber= TCajaHaber.objects.get(pk=pa[i]['idCajaHaber'])
									dato['idAdelanto']=pa[i]['pk']
									dato['fecha']=str(pa[i]['fecha'].strftime("%d-%m-%Y %H:%M"))
									dato['nroAdelanto']= pa[i]['nroAdelanto']
									dato['nroR']= haber.nroRecibo.split('-')[0]
									dato['obs']=pa[i]['observaciones']
									dato['saldo']=float(pa[i]['saldo'])
									dato['monto']=float(haber.cantidadDinero)
									dato['p']=haber.id_personal.pk
									dato['c']=haber.id_caja.pk
									dato['idALocal']=None
									if PagoAdelantoIntercambio_Desktop.objects.filter(id_PagoAdeInterc=pa[i]['pk']).exists():
										aux_p= PagoAdelantoIntercambio_Desktop.objects.get(id_PagoAdeInterc=pa[i]['pk'])
										dato['idALocal']=aux_p.id_Adelanto_interc_desktop

									if i==0:
										dato['saldoa']=float(inte.idCajaDebe.cantidadDinero)-float(inte.comision)- float(inte.monto_conceptos)
									else:
										dato['saldoa']=float(pa[i-1]['saldo'])
									liAde.append(dato)
								exito="2"
								dato={'listaAde':liAde}
								#dato={'idARemoto':painde.pk,'idALocal':idA,'idSILocal':idTrDesktop,'idSIRemoto':idTr,'listaAde':liAde}
						else:
							st1=Intercambio.objects.get(pk=idTr)
							exito='0'
							dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'estado':st1.idCajaDebe.estadoTransaccion,'adelanto':None}
							error= 'El intercambio esta '+st1.idCajaDebe.estadoTransaccion
					else:
						monto_egreso_pago=0
						if Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='activo').exists():
							st= Intercambio.objects.filter(pk=idTr,id_oficina=C.id_oficina.pk).values('idCajaDebe','observaciones','comision','monto_conceptos')
							con_st= list(st)
							idTcajaD= str(con_st[0]['idCajaDebe'])
							CDebe=TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').values('cantidadDinero','moneda','observaciones')
							con_CajaDebe= list(CDebe)
							moneda= str(con_CajaDebe[0]['moneda'])
							Csaldo= SaldoDisponibleCajas.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
							cons_saldo= list(Csaldo)
							idSaldo= str(cons_saldo[0]['pk'])
							SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
							SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
							MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])- ConvertirDecimal(con_st[0]['monto_conceptos'])
							#MontoEgreso=ConvertirDecimal(con_CajaDebe[0]['cantidadDinero']) - ConvertirDecimal(con_st[0]['comision'])
							if egreso_pago !='':
								monto_egreso_pago=float(egreso_pago)
							SolTr= Intercambio.objects.get(pk=idTr)
							delta= datetime.now() - SolTr.idCajaDebe.fecha
							if moneda=='soles':
								if SaldoSoles >= (MontoEgreso+monto_egreso_pago):
									if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
										bandera=True
										if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
											if not soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk).exists():
												inte=Intercambios_dirigido.objects.get(id_intercambio=SolTr)
												srT=soli_ret_intercambios_dir(id_intercambio_dir=inte,codigo_aut=id_generator(),estado='pendiente',id_user_solicit=C.id_usuario,id_caja_solicit=C)
												srT.save()
												bandera=False
											else:
												if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
										if bandera:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR = int(Nrecibo.nroPT)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
											nr=numeroR
											CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoIntercambio',conceptoDetalle='intercambio',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
											CajaH.save()
											idCajaH= CajaH.pk
											idST = Intercambio.objects.get(pk=idTr)
											PagoT= PagoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp)
											PagoT.save()
											CDebe.update(estadoTransaccion='pagado')
											if monto_egreso_pago>0:
												numeroR_e=int(Nrecibo.nroRE)+1
												NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
												TCajaH = TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
												TCajaH.save()
												eex= EgresoExtraIntercambio(idCajaHaber=TCajaH,id_pago_intercambio=PagoT,monto=monto_egreso_pago)
												eex.save()
											saldoEgreso=SaldoSoles - MontoEgreso -monto_egreso_pago
											Csaldo.update(saldo_soles=saldoEgreso)
											st.update(dni_beneficiado=dnib)
											#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
											exito="1"
											dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'nroRecibo':numeroR,'adelanto':None}
										else:
											exito='-2'
											error="Este intercambio no es para su caja. Solicite codigo de autorizacion al Gerente"
									else:
										exito ="-1"
										error='error en operacion'
								else:
									exito="-1"
									error='saldo insuficiente'
							elif moneda=='dolares':
								if SaldoDolares>=(MontoEgreso+monto_egreso_pago):
									if TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').exists():
										bandera=True
										if Intercambios_dirigido.objects.filter(id_intercambio=idTr).exists():
											if not soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk).exists():
												inte=Intercambios_dirigido.objects.get(id_intercambio=SolTr)
												srT=soli_ret_intercambios_dir(id_intercambio_dir=inte,codigo_aut=id_generator(),estado='pendiente',id_user_solicit=C.id_usuario,id_caja_solicit=C)
												srT.save()
												bandera=False
											else:
												if soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).exists():
													bandera =True
													soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=SolTr.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_ret=datetime.now())
												else:
													bandera=False
										if bandera:
											Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
											numeroR = int(Nrecibo.nroPT)+1
											NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroPT=numeroR)
											nr=numeroR
											CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoIntercambio',conceptoDetalle='Intercambio',tipoDocumento='P/T',cantidadDinero=MontoEgreso,moneda=moneda,estadoTransaccion='pagado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
											CajaH.save()
											idCajaH= CajaH.pk
											idST = Intercambio.objects.get(pk=idTr)
											PagoT= PagoIntercambio(idCajaHaber= CajaH,id_intercambio=idST,observaciones=obsp)
											PagoT.save()
											CDebe.update(estadoTransaccion='pagado')
											if monto_egreso_pago>0:
												numeroR_e=int(Nrecibo.nroRE)+1
												NroReciboCaja.objects.filter(pk=Nrecibo.pk).update(nroRE=numeroR_e)
												TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle='Egreso extra por pago de intercambio -'+str(idST.pk),tipoDocumento="R/E",cantidadDinero=monto_egreso_pago,moneda= moneda,observaciones='n',estadoTransaccion="emitido",nroRecibo=numeroR_e,id_oficina=C.id_oficina,id_caja=C)
												TCajaH.save()
												eex= EgresoExtraIntercambio(idCajaHaber=TCajaH,id_pago_intercambio=PagoT,monto=monto_egreso_pago)
												eex.save()
											saldoEgreso=SaldoDolares - MontoEgreso - monto_egreso_pago
											Csaldo.update(saldo_dolares=saldoEgreso)
											st.update(dni_beneficiado=dnib)
											#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
											exito="1"
											dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'nroRecibo':numeroR,'adelanto':None}
										else:
											exito='-2'
											error="Este intercambio no es para su caja. Solicite codigo de autorizacion al Gerente"
									else:
										exito ="-1"
										error='error en operacion'
								else:
									exito="-1"
									error='saldo insuficiente'
							else:
								exito='-1'
						else:
							st1=Intercambio.objects.get(pk=idTr)
							exito='0'
							dato={'idSILocal':idTrDesktop,'idSIRemoto':idTr,'estado':st1.idCajaDebe.estadoTransaccion,'adelanto':None}
							error= 'El intercambio esta '+st1.idCajaDebe.estadoTransaccion
				else:
					exito='-1'
					error='error autentificacion'
		except IntegrityError:
			exito='-1'
			error='error de integridad'
		except:
			exito='-1'
			error=str(sys.exc_info()[1])
	else:
		exito='-1'
		error="fail"
	data= json.dumps({'exito':exito,'data':dato,'error':error})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


#---------------- END SERVICIOS DESKTOP ----------------------

@login_required
@transaction.atomic
def Anular_venta_dolar_view(request):
	exito=''
	nri=''
	nre=''
	id_venta= request.GET.get('pk','')
	codigo= request.GET.get('codigo','')
	try:
		usr= request.user.username
		cargo =''
		C= Cajas.objects.get(id_usuario__usuario=usr)
		if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
			cargo='administrador'
		if codigo != None and  codigo != '':
			with transaction.atomic():
				if SolicitudAnulacionDolar.objects.filter(tablaRelacional="VentaDolar",id_CompraVenta_dolar=id_venta,codigo_aut=codigo,estado="autorizado",id_caja_solicitante=C.pk).exclude(id_usuario_aut=C.id_usuario.pk).exists():
					venta = VentaDolar.objects.get(pk=id_venta)
					if venta.idCajaHaber.estadoTransaccion=="activo":
						monto_soles = float(venta.idCajaDebe.cantidadDinero)
						monto_dolares= float(venta.idCajaHaber.cantidadDinero)
						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
						SaldoDolares= float(cons_saldo.saldo_dolares)
						SaldoSoles= float(cons_saldo.saldo_soles)
						if float(cons_saldo.saldo_soles) >= monto_soles:
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroRI)+1
							#nroR=numeroR
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
							Debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='AnulacionDolar',conceptoDetalle='Anulacion de Venta Dolar; devolucion de R/E Nro: '+venta.idCajaHaber.nroRecibo,tipoDocumento='R/I',cantidadDinero=monto_dolares,moneda='dolares',observaciones="anulacion",estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
							Debe.save()
							nri=numeroR
							#DebeDo= DebeDolar(idCajaDebe= Debe,tipo_cambio=float(tipo_cambio),monto=float(monto_dolar))
							#DebeDo.save()
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRe = int(Nrecibo.nroRE)+1
							nre=numeroRe
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRe)
							#nroReci=numeroR
							Haber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='AnulacionDolar',conceptoDetalle='Anulacion de Venta Dolar; devolucion de R/I Nro: '+venta.idCajaDebe.nroRecibo,tipoDocumento='R/E',cantidadDinero=monto_soles,moneda='soles',estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroRe))
							Haber.save()
							#Compra = CompraDolar(idCajaDebe=Debe,idCajaHaber=Haber,tipo_persona_cliente=tipo_cliente,dni_ruc_cliente=dni_ruc,nombre_razon_cliente=nombre_razon,Apellido_paterno_cliente=paterno,Apellido_materno_cliente=materno, observaciones=obs,tipo_cambio_compra=float(tipo_cambio),monto_dolar_comprado=float(monto_dolar),monto_soles_pagado=monto_pagado)
							#Compra.save()
							TCajaHaber.objects.filter(pk=venta.idCajaHaber.pk).update(estadoTransaccion="anulado")
							SaldoDisponibleCajas.objects.select_for_update().filter(pk=cons_saldo.pk).update(saldo_dolares=(SaldoDolares + float(monto_dolares)),saldo_soles=(SaldoSoles - monto_soles))
							SolicitudAnulacionDolar.objects.filter(tablaRelacional="VentaDolar",id_CompraVenta_dolar=id_venta,codigo_aut=codigo,estado="autorizado",id_caja_solicitante=C.pk).update(estado='utilizado',fecha_anu=datetime.now())
							exito='exito'
						else:
							exito="saldo insuficiente"
					else:
						exito="este operacion no esta disponible"
				else:
					exito="codigo no valido, comuniquese con el administrador del sistema"
		else:
			exito="ingrese un codigo de autorizacion"
	except:
		exito= str(sys.exc_info()[1])
	data=json.dumps({'exito':exito,'nri':nri,'nre':nre})
	mimetype="application/json"
	return HttpResponse(data,mimetype)
	
@login_required
@transaction.atomic
def Anular_compra_dolar_view(request):
	exito=''
	nri=''
	nre=''
	id_compra= request.GET.get('pk','')
	codigo= request.GET.get('codigo','')
	try:
		usr= request.user.username
		cargo =''
		C= Cajas.objects.get(id_usuario__usuario=usr)
		if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
			cargo='administrador'

		if codigo != None and  codigo != '':
			with transaction.atomic():
				if SolicitudAnulacionDolar.objects.filter(tablaRelacional="CompraDolar",id_CompraVenta_dolar=id_compra,codigo_aut=codigo,estado="autorizado",id_caja_solicitante=C.pk).exclude(id_usuario_aut=C.id_usuario.pk).exists():
					compra = CompraDolar.objects.get(pk=id_compra)
					if compra.idCajaDebe.estadoTransaccion=="activo":
						monto_soles = float(compra.idCajaHaber.cantidadDinero)
						monto_dolares= float(compra.idCajaDebe.cantidadDinero)
						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
						SaldoDolares= float(cons_saldo.saldo_dolares)
						SaldoSoles= float(cons_saldo.saldo_soles)
						if float(cons_saldo.saldo_dolares) >= float(monto_dolares):
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroRI)+1
							#nroR=numeroR
							nri=numeroR
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
							Debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='AnulacionDolar',conceptoDetalle='Anulacion de Compra Dolar; devolucion de R/E Nro: '+compra.idCajaHaber.nroRecibo,tipoDocumento='R/I',cantidadDinero=monto_soles,moneda='soles',observaciones="",estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
							Debe.save()
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRe = int(Nrecibo.nroRE)+1
							nre=numeroRe
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRe)
							#nroReci=numeroR
							Haber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='AnulacionDolar',conceptoDetalle='Anulacion de Compra Dolar; devolucion de R/I Nro: '+compra.idCajaDebe.nroRecibo,tipoDocumento='R/E',cantidadDinero=monto_dolares,moneda='dolares',estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroRe))
							Haber.save()
							#HaberDo= HaberDolar(idCajaHaber=Haber,tipo_cambio=float(tipo_cambio),monto=float(monto_dolar))
							#HaberDo.save()
							#Venta = VentaDolar(idCajaDebe=Debe,idCajaHaber=Haber,tipo_persona_cliente=tipo_cliente,dni_ruc_cliente=dni_ruc,nombre_razon_cliente=nombre_razon,Apellido_paterno_cliente=paterno,Apellido_materno_cliente=materno, observaciones=obs,tipo_cambio_venta=float(tipo_cambio),monto_dolar_vendido=float(monto_dolar),monto_soles_cobrado=monto_cobrado)
							#Venta.save()
							#sacar_balance_dolar(C,HaberDo)
							TCajaDebe.objects.filter(pk=compra.idCajaDebe.pk).update(estadoTransaccion="anulado")
							SaldoDisponibleCajas.objects.select_for_update().filter(pk=cons_saldo.pk).update(saldo_dolares=(SaldoDolares - float(monto_dolares)),saldo_soles=(SaldoSoles + monto_soles))
							SolicitudAnulacionDolar.objects.filter(tablaRelacional="CompraDolar",id_CompraVenta_dolar=id_compra,codigo_aut=codigo,estado="autorizado",id_caja_solicitante=C.pk).update(estado='utilizado',fecha_anu=datetime.now())
							exito='exito'
						else:
							exito="saldo insuficiente"
					else:
						exito="este operacion no esta disponible"
				else:
					exito="codigo no valido, comuniquese con el administrador del sistema"
		else:
			exito="ingrese un codigo de autorizacion"
	except:
		exito= str(sys.exc_info()[1])
	data=json.dumps({'exito':exito,'nri':nri,'nre':nre})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def RegistroIngreso_admin_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	recibid=request.POST.get('recibid')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	cta=request.POST.get('cuenta')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	G= Gerente.objects.get(usuario=usr)
	C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				TCajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle="Recibi de "+recibid+" por consepto de "+Concepto,tipoDocumento="R/I",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C,aux1=cta)
				TCajaD.save()
				#if not CuentasElementos.objects.filter(pk=int(cta)).exists():
				#	CE= CuentasElementos(pk=int(cta),descripcion=des,observaciones=obsc)
				#	CE.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroIngresoAdmin.html",{"resultado":exito,"nombreRecibo": recibid,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def RegistroEgreso_admin_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	afavord=request.POST.get('afavord')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	cta=request.POST.get('cuenta')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	G= Gerente.objects.get(usuario=usr)
	C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRE = int(Nrecibo.nroRE)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
				
				#if not CuentasElementos.objects.filter(pk=int(cta)).exists():
				#	CE= CuentasElementos(pk=int(cta),descripcion=des,observaciones=obsc)
				#	CE.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					if saldosoles>= Cantidad:
						TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle="a favor de "+afavord+" por concepto de  "+Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="emitido",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1=cta)
						TCajaH.save()
						saldosoles= saldosoles - Cantidad
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
						exito= 'exito'
					else:
						exito= 'saldo insuficiente'
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)
					if saldodolares>= Cantidad:
						TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle="a favor de "+afavord+" por concepto de  "+Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="emitido",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C,aux1=cta)
						TCajaH.save()
						saldodolares= saldodolares - Cantidad
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
						exito='exito'
					else:
						exito= 'saldo insuficiente'
				else:
					exito= 'fail'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroEgresoAdmin.html",{"resultado":exito,"nombreRecibo": afavord,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )
#pasar efectivo entre cajas
@login_required
@transaction.atomic
def pasarefectivo_view(request):
	exito='' 
	monto=request.POST.get('monto','')
	origen=request.POST.get('origen')
	moneda=request.POST.get('moneda')
	tipoCambio=request.POST.get('tipo_cambio')
	destino=request.POST.get('destino')
	obs=request.POST.get('obs')
	usr = request.user.username
	if monto != None and monto != '':
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				if origen != destino:
					if float(monto)>0:
						tc=0
						if moneda=='dolares':
							tc = float(tipoCambio)
						id_haber=0
						verificado = False
						if origen == 'transferencia':
							saldo = SaldoDisponibleCajas.objects.get(id_caja=C.pk)
							#if (moneda =='dolares'and saldo.saldo_dolares>=monto) or (moneda =='soles'and saldo.saldo_soles>=monto):
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							THaber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="TrasladoEfectivo",conceptoDetalle='habilitacion de efectivo',tipoDocumento="R/E",cantidadDinero=monto,moneda=moneda,tipo_cambio=tc,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							id_haber = THaber.pk
							if moneda =='soles':
								SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(float(saldo.saldo_soles)-float(monto)))
							else:
								SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(float(saldo.saldo_dolares)-float(monto)))
							verificado = True
						elif origen == 'dolar':
							saldo = SaldoDisponibleCajaCambio.objects.get(id_caja=C.pk)
							#if (moneda =='dolares'and saldo.saldo_dolares>=monto) or (moneda =='soles'and saldo.saldo_soles>=monto):
							Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							THaber= TCajaHaberCambio(id_personal=C.id_usuario,tablaRelacional="TrasladoEfectivo",conceptoDetalle='habilitacion de efectivo',tipoDocumento="R/E",cantidadDinero=monto,moneda=moneda,tipo_cambio=tc,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							id_haber = THaber.pk
							if moneda =='soles':
								SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(float(saldo.saldo_soles)-float(monto)))
							else:
								SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(float(saldo.saldo_dolares)-float(monto)))
							verificado = True
						elif origen == 'material':
							saldo = SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
							#if (moneda =='dolares'and saldo.saldo_dolares>=monto) or (moneda =='soles'and saldo.saldo_soles>=monto):
							Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							THaber= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="TrasladoEfectivo",conceptoDetalle='habilitacion de efectivo',tipoDocumento="R/E",cantidadDinero=monto,moneda=moneda,tipo_cambio=tc,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							id_haber = THaber.pk
							if moneda =='soles':
								SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(float(saldo.saldo_soles)-float(monto)))
							else:
								SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(float(saldo.saldo_dolares)-float(monto)))
							verificado = True
						id_debe=0
						if verificado:
							if destino == 'transferencia':
								saldo = SaldoDisponibleCajas.objects.get(id_caja=C.pk)
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRI = int(Nrecibo.nroRI)+1
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
								Tdebe= TCajaDebe(id_personal= C.id_usuario,tablaRelacional='TrasladoEfectivo',conceptoDetalle='recepcion de efectivo',tipoDocumento='R/I',cantidadDinero=monto,moneda=moneda,tipo_cambio=tc,observaciones='',estadoTransaccion='recibido',nroRecibo=numeroRI,id_caja=C,id_oficina= C.id_oficina)
								Tdebe.save()
								id_debe=Tdebe.pk
								if moneda=='soles':
									SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(float(saldo.saldo_soles)+float(monto)))
								elif moneda =='dolares':
									SaldoDisponibleCajas.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(float(saldo.saldo_dolares)+float(monto)))
							elif destino == 'dolar':
								saldo = SaldoDisponibleCajaCambio.objects.get(id_caja=C.pk)
								Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRI = int(Nrecibo.nroRI)+1
								NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
								Tdebe= TCajaDebeCambio(id_personal= C.id_usuario,tablaRelacional='TrasladoEfectivo',conceptoDetalle='recepcion de efectivo',tipoDocumento='R/I',cantidadDinero=monto,moneda=moneda,tipo_cambio=tc,observaciones='',estadoTransaccion='recibido',nroRecibo=numeroRI,id_caja=C,id_oficina= C.id_oficina)
								Tdebe.save()
								id_debe=Tdebe.pk
								if moneda=='soles':
									SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(float(saldo.saldo_soles)+float(monto)))
								elif moneda =='dolares':
									SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(float(saldo.saldo_dolares)+float(monto)))
							elif destino == 'material':
								saldo = SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
								Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRI = int(Nrecibo.nroRI)+1
								NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
								Tdebe= TCajaDebeM(id_personal= C.id_usuario,tablaRelacional='TrasladoEfectivo',conceptoDetalle='recepcion de efectivo',tipoDocumento='R/I',cantidadDinero=monto,moneda=moneda,tipo_cambio=tc,observaciones='',estadoTransaccion='recibido',nroRecibo=numeroRI,id_caja=C,id_oficina= C.id_oficina)
								Tdebe.save()
								id_debe=Tdebe.pk
								if moneda=='soles':
									SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(float(saldo.saldo_soles)+float(monto)))
								elif moneda =='dolares':
									SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(float(saldo.saldo_dolares)+float(monto)))

							traslado = TrasladoEfectivo(id_caja=C,monto=monto,moneda=moneda,tipo_cambio=tc,origen=origen,id_haber_origen=id_haber,destino=destino,id_debe_destino=id_debe,observaciones=obs,estado='enviado')
							traslado.save()
							exito='exito'
						else:
							exito='error en operacion'
					else:
						exito='Monto invalido'
				else:
					exito='seleccione caja destino distinto'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"pasarefectivo.html",{"resultado":exito} )

#***************************************************************************************
#************************************ CUENTAS *****************************************
@login_required
@transaction.atomic
def crear_cta_ahorro_cte_view(request):
	idCliente=request.POST.get('IdCliente')
	tipo_persona_cli=request.POST.get('TipoPersona')
	dni_cli=request.POST.get('DniRucCln')
	nombre_cli=request.POST.get('NombreCln')
	paterno_cli=request.POST.get('PaternoCln')
	materno_cli=request.POST.get('MaternoCln')
	MontoApertura= request.POST.get('montoapertura')
	Observacion = request.POST.get('observacion','')
	moneda = request.POST.get('moneda','')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	if MontoApertura!= None and MontoApertura !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idCliente == '' or idCliente== None:
					sq= Cliente.objects.filter(nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli).values('pk')
					if sq.count()==0:
						cln = Cliente(dni=dni_cli,nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli,tipo_persona=tipo_persona_cli,idCaja=C.pk)
						cln.save()
						idCliente = str(cln.pk)
					else:
						lista5= list(sq)
						idCliente= str(lista5[0]['pk'])
				cli = Cliente.objects.get(pk=idCliente)
				nombre= cli.nombre +' '+ cli.Apellido_paterno+' '+cli.Apellido_materno
				dni=cli.dni
				Ingres= ConvertirDecimal(MontoApertura)
				if Ingres >0:
					Monto=Ingres
					Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroR = int(Nrecibo.nroRI)+1
					nroRe=numeroR
					#solo para soles por ahora
					concepto= 'Apertura de Cuenta Corriente'
					debe= TCajaDebeM(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Apertura de Cuenta Ahorro Cte',tipoDocumento='R/I',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
					debe.save()
					cte= CtaCte(id_cliente=cli,id_oficina= C.id_oficina,id_caja=C,id_usuario=C.id_usuario,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='no',tipoCuenta='CTE',moneda=moneda)#CTE corriente
					cte.save()
					movimiento= CtaCteMovimientos(id_ctacte=cte,idDebeHaber=debe.pk,tabla='TCajaDebeM',montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Apertura de cuenta Ahorro Cte',moneda=moneda,conceptoDetalle='Apertura de Cuenta corriente')
					movimiento.save()
					NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
					cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					if moneda=='soles':
						SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
						saldo= SaldoSoles+Ingres
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
					elif moneda =='dolares':
						SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
						saldo= SaldoDolares+Ingres
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
					exito='exito'
				else:
					exito='ingrese monto correcto'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"CrearCtaAhorroCte.html",{"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def depositar_cta_ahorro_cte_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	fecha = request.POST.get('fecha')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	operacion =''
	saldo_cta=''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaCte.objects.filter(pk=id_cta,estado__in=['activo','depositos']).exists():
					Ingres= ConvertirDecimal(monto)
					if Ingres > 0:
						cta=None
						if CtaCte.objects.filter(pk=id_cta,estado='activo').exists():
							cta= CtaCte.objects.get(pk=id_cta,estado='activo')
						else:
							cta= CtaCte.objects.get(pk=id_cta,estado='depositos')
						moneda = cta.moneda
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRI)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Deposito a Cuenta Ahorro Cte'
						debe= TCajaDebeM(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito a Cuenta Ahorro Cte',tipoDocumento='R/I',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						debe.save()
						movimiento= CtaCteMovimientos(id_ctacte=cta,idDebeHaber=debe.pk,tabla='TCajaDebeM',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos='Deposito a cuenta Ahorro Cte',moneda=moneda)
						movimiento.save()
						saldo_cta= str(float(cta.saldo)+Ingres)
						aux= CtaCte.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if moneda == 'soles':
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							saldo= SaldoSoles+Ingres
							SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
						elif moneda == 'dolares':
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							saldo= SaldoDolares+Ingres
							SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
						operacion ='DEPOSITO'
						exito='exito'
					else:
						exito='Monto No valido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/I","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

@login_required
@transaction.atomic
def retirar_cta_ahorro_cte_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	transac_= request.POST.get('transac')
	fecha = request.POST.get('fecha')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	saldo_cta=''
	operacion =''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaCte.objects.filter(pk=id_cta,estado='activo').exists():
					cta= CtaCte.objects.get(pk=id_cta,estado='activo')
					moneda = cta.moneda
					Ingres= ConvertirDecimal(monto)
					saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					if Ingres > 0:
						#if Ingres<=ConvertirDecimal(saldoPrinsipal.saldo_soles):
						#	if Ingres<=float(cta.saldo):
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRE)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Retiro de Cuenta Ahorro Cte'
						haber= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cuenta Ahorro Cte',tipoDocumento='R/E',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						haber.save()
						movimiento= CtaCteMovimientos(id_ctacte=cta,idDebeHaber=haber.pk,tabla='TCajaHaberM',montoRetiro=Ingres,saldo=(float(cta.saldo)-Ingres),observacionesMovimientos='Retiro de cuenta Ahorro Cte',moneda=moneda)
						movimiento.save()
						saldo_cta=str(float(cta.saldo)-Ingres)
						aux= CtaCte.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)-Ingres))
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if moneda == 'soles':
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							saldo= SaldoSoles-Ingres
							SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
						elif moneda == 'dolares':
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							saldo= SaldoDolares-Ingres
							SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
						operacion ='RETIRO'
						exito='exito'
						#	else:
						#		exito='Saldo Insuficiente en Cuenta'
						#else:
						#	exito='Saldo Insuficiente en Caja'
					else:
						exito='Monto no permitido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/E","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

@login_required
@transaction.atomic
def cerrar_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='activo').exists():
					cta= CtaCte.objects.get(pk=id_cta,estado='activo')
					if cta.saldo ==0:
						CtaCte.objects.filter(pk=id_cta,estado='activo').update(estado='cerrado')
						exito="exito"
					else:
						exito='Para cerrar una cuenta, es necesario retirar todo el saldo'
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def habilitar_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='cerrado').exists():
					CtaCte.objects.filter(pk=id_cta,estado='cerrado').update(estado='activo')
					exito="exito"
				else:
					exito='La Cuenta ya esta Habilitada'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def bloquear_retiros_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='activo').exists():
					CtaCte.objects.filter(pk=id_cta,estado='activo').update(estado='depositos')
					exito="exito"
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def habilitar_retiros_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='depositos').exists():
					CtaCte.objects.filter(pk=id_cta,estado='depositos').update(estado='activo')
					exito="exito"
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def crear_cta_plazo_fijo_view(request):
	idCliente=request.POST.get('IdCliente')
	tipo_persona_cli=request.POST.get('TipoPersona')
	dni_cli=request.POST.get('DniRucCln')
	nombre_cli=request.POST.get('NombreCln')
	paterno_cli=request.POST.get('PaternoCln')
	materno_cli=request.POST.get('MaternoCln')
	MontoApertura= request.POST.get('montoapertura')
	interes = request.POST.get('interes')
	plazo=request.POST.get('plazo')
	tipo_plazo=request.POST.get('tipo_plazo')
	Observacion = request.POST.get('observacion','')
	FechaApertura = request.POST.get('fecha')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	if MontoApertura!= None and MontoApertura !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idCliente == '' or idCliente== None:
					sq= Cliente.objects.filter(nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli).values('pk')
					if sq.count()==0:
						cln = Cliente(dni=dni_cli,nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli,tipo_persona=tipo_persona_cli,idCaja=C.pk)
						cln.save()
						idCliente = str(cln.pk)
					else:
						lista5= list(sq)
						idCliente= str(lista5[0]['pk'])
				cli = Cliente.objects.get(pk=idCliente)
				nombre= cli.nombre +' '+ cli.Apellido_paterno+' '+cli.Apellido_materno
				dni=cli.dni
				Ingres= ConvertirDecimal(MontoApertura)
				Monto=Ingres
				Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroR = int(Nrecibo.nroRI)+1
				nroRe=numeroR
				#solo para soles por ahora
				concepto= 'Apertura de Cuenta Plazo Fijo'
				debe= TCajaDebeM(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Apertura de Cuenta Plazo Fijo',tipoDocumento='R/I',cantidadDinero=Ingres,moneda='soles',observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
				debe.save()
				rctaahorros= CtaAhorros(id_cliente=cli,id_oficina= C.id_oficina,id_caja=C,id_usuario=C.id_usuario,saldo=Ingres,interes=interes,plazo=plazo,tipo_plazo=tipo_plazo,estado='activo',observaciones=Observacion,privadoOficina='no',tipoCuenta='PF',moneda='soles')#PF plazo fijo
				rctaahorros.save()
				mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=rctaahorros,idDebeHaber=debe.pk,montoDeposito=Ingres,saldo=Ingres,interes=interes,plazo=plazo,tipo_plazo=tipo_plazo,tiempo_interes="1",tipo_plazo_interes="a",subMontoDeposito=Ingres,interesGanado=0,observacionesMovimientos='Apertura de cuenta Plazo Fijo',tabla='TCajaDebeM',nro_operacion=1)
				mctaahorros.save()
				NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
				cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
				saldo= SaldoSoles+Ingres
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"CrearCtaPlazoFijo.html",{"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":'soles',"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes} )

@login_required
@transaction.atomic
def anular_cuenta_pf_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	Obs=request.GET.get('obs')
	#transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaAhorros.objects.filter(pk=id_cta,estado='activo').exists():
					cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					cta= CtaAhorros.objects.get(pk=id_cta,estado='activo')
					if cta.saldo <= float(cons_saldo.saldo_soles):
						nombre = cta.id_cliente.nombre+' '+cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						nroRe=str(numeroRE)
						Cantidad = round(float(cta.saldo),2)
						Monto = Cantidad
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						TCajaH= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="CtaAhorrosMovimientos",conceptoDetalle="Anulacion de Plazo Fijo",tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= 'soles',observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						TCajaH.save()
						ctam = CtaAhorrosMovimientos(id_ctaahorros=cta,idDebeHaber=TCajaH.pk,tabla="TCajaHaberM",montoRetiro=Cantidad,saldo=0,observacionesMovimientos="anulacion de Plazo Fijo")
						ctam.save()
						saldosoles = ConvertirDecimal(cons_saldo.saldo_soles)-Cantidad
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldosoles)
						CtaAhorros.objects.filter(pk=id_cta,estado='activo').update(estado='cerrado')
						exito="exito"
					else:
						exito='Saldo Insuficiente'
				else:
					exito='Operacion no permitida'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":'soles',"conceptoDetalleRecibo":"Anulacion de Cuenta Plazo Fijo","horaRecibo":horaActual,"fechaRecibo":fechaActual})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def ritarar_capital_cuenta_pf_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	Obs=request.GET.get('obs')
	#transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaAhorros.objects.filter(pk=id_cta,estado='vencido').exists():
					cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					cta= CtaAhorros.objects.get(pk=id_cta,estado='vencido')
					if cta.saldo <= float(cons_saldo.saldo_soles):
						nombre = cta.id_cliente.nombre+' '+cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						nroRe=str(numeroRE)
						Cantidad = round(float(cta.saldo),2)
						Monto = Cantidad
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						TCajaH= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="CtaAhorrosMovimientos",conceptoDetalle="Retiro Capital de Plazo Fijo",tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= 'soles',observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						TCajaH.save()
						ctam = CtaAhorrosMovimientos(id_ctaahorros=cta,idDebeHaber=TCajaH.pk,tabla="TCajaHaberM",montoRetiro=Cantidad,saldo=0,observacionesMovimientos="Retiro Capital de Plazo Fijo")
						ctam.save()
						saldosoles = ConvertirDecimal(cons_saldo.saldo_soles)-Cantidad
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldosoles)
						CtaAhorros.objects.filter(pk=id_cta,estado='vencido').update(saldo =0)
						exito="exito"
					else:
						exito='Saldo Insuficiente'
				else:
					exito='Operacion no permitida'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":'soles',"conceptoDetalleRecibo":"Retiro capital Plazo Fijo","horaRecibo":horaActual,"fechaRecibo":fechaActual})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def ritarar_interes_cuenta_pf_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	Obs=request.GET.get('obs')
	#transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaAhorros.objects.filter(pk=id_cta,estado='vencido').exists():
					cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					cta= CtaAhorros.objects.get(pk=id_cta,estado='vencido')
					if cta.interesGanado <= float(cons_saldo.saldo_soles):
						nombre = cta.id_cliente.nombre+' '+cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						nroRe=str(numeroRE)
						Cantidad = round(float(cta.interesGanado),2)
						Monto = Cantidad
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						TCajaH= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="CtaAhorrosMovimientos",conceptoDetalle="Retiro Interes de Plazo Fijo",tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= 'soles',observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						TCajaH.save()
						ctam = CtaAhorrosMovimientos(id_ctaahorros=cta,idDebeHaber=TCajaH.pk,tabla="TCajaHaberM",montoRetiro=Cantidad,saldo=0,observacionesMovimientos="Retiro Interes de Plazo Fijo")
						ctam.save()
						saldosoles = float(cons_saldo.saldo_soles)-Cantidad
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldosoles)
						CtaAhorros.objects.filter(pk=id_cta,estado='vencido').update(interesGanado =0)
						exito="exito"
					else:
						exito='Saldo Insuficiente'
				else:
					exito='Operacion no permitida'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":'soles',"conceptoDetalleRecibo":"Retiro Interes de Cuenta Plazo Fijo","horaRecibo":horaActual,"fechaRecibo":fechaActual})
	return HttpResponse(data,mimetype)

#envio de dinero en caja material
@login_required
@transaction.atomic
def EnviarOficinaOficina_m_view(request):
	usr= request.user.username
	idOfi= request.POST.get('oficina')
	idCa= request.POST.get('caja','')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	tipoc=request.POST.get('tipoc')
	comi=request.POST.get('comi')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	nombreof=''
	dol=0
	sol=0
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idOfi != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			with transaction.atomic():
				O1 = Oficina.objects.get(pk= idOfi)#destino
				nombreof= O1.nombre_oficina
				Monto = ConvertirDecimal(Monto)
				saldoPrinsipal= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				if Monto > 0 and  comi >=0:
					#if (Moneda=='soles' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
					saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
					saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
					if Moneda=='dolares':
						if tipoc != None and tipoc !="":
							tipoc = float(tipoc)
							Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							C1= Cajas.objects.get(pk=idCa)
							THaber= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Envio de dinero para oficina ",tipoDocumento="R/E",cantidadDinero=Monto+comi,moneda=Moneda,tipo_cambio=tipoc,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							Ec= EnvioCajaCajaM(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle="Envio de dinero para oficina ",observaciones=Observaciones,estado="enviado")
							Ec.save()
							SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto-comi))
							exito='exito'
						else:
							exito = 'Ingrese un tipo de cambio dolar valido'
					else:
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						C1= Cajas.objects.get(pk=idCa)
						THaber= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Envio de dinero para oficina ",tipoDocumento="R/E",cantidadDinero=Monto +comi,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						THaber.save()
						Ec= EnvioCajaCajaM(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle="Envio de dinero para oficina ",observaciones=Observaciones,estado="enviado")
						Ec.save()
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto-comi))
						exito='exito'
					#else:
						#exito = 'Saldo insuficiente'
				else:
					exito = 'Montos no admitidos'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	es_ce,ce=es_asociado(C.pk)
	return render(request,"envioOficinaM.html",{"es_ceA":es_ce,"ceA":ce,"resultado":exito,"cargo":cargo,"nombreRecibo":nombreof,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"comi":comi,"monedaRecibo":Moneda,"conceptoDetalleRecibo":"Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+ nombreof,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def EnviarCajaOperador_m_view(request):
	usr= request.user.username
	#afavord= request.POST.get('Afavorde')
	idCaja= request.POST.get('caja')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	tipoc=request.POST.get('tipoc')
	comi=request.POST.get('comi')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	para=''
	dol=0
	sol=0
	Concepto=""
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idCaja != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			with transaction.atomic():
				C1 = Cajas.objects.get(pk= idCaja)#destino
				para= C1.id_usuario.nombre+' '+C1.id_usuario.Apellido_paterno+' '+ C1.id_usuario.Apellido_materno
				Monto = ConvertirDecimal(Monto)
				Concepto="Envio de dinero para habilitacion de Caja "+ C1.nombre
				saldoPrinsipal= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
				if C !=C1:
					if Monto > 0 and  comi >=0:
						#if (Moneda=='soles' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
						saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
						saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
						if Moneda=='dolares':
							if tipoc != None and tipoc !="":
								tipoc = float(tipoc)
								Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRE = int(Nrecibo.nroRE)+1
								NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
								THaber= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Habilitacion de dinero",tipoDocumento="R/E",cantidadDinero=Monto+comi,tipo_cambio=tipoc,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
								THaber.save()
								cA=EnvioCajaCajaM(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
								cA.save()
								SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto-comi))
								exito='exito'
							else:
								exito = 'Ingrese un tipo de cambio dolar valido'
						else:
							Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							THaber= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Habilitacion de dinero",tipoDocumento="R/E",cantidadDinero=Monto+comi,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							cA=EnvioCajaCajaM(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
							cA.save()
							SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto-comi))
							exito='exito'
						#else:
						#	exito = 'Saldo insuficiente'
					else:
						exito='Montos no admitidos'
				else:
					exito= 'error en operacion'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"habilitarCajaM.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":para,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"comi":comi,"monedaRecibo":Moneda,"conceptoDetalleRecibo":'Envio de dinero para habilitacion de caja',"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def AnularEnvioDineroCaja_m_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		comi=0
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			Dn=EnvioCajaCajaM.objects.get(pk=idDebe,estado='enviado',idCajaHaber__id_caja=C.pk)
			C_des= Cajas.objects.get(pk=Dn.id_CajaDestino.pk)
			Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			numeroRI = int(Nrecibo.nroRI)+1
			NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
			CajaD= TCajaDebeM(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaAnulacionM",conceptoDetalle='Anulacion de envio de dinero ',tipoDocumento="R/I",cantidadDinero=float(Dn.monto + Dn.comision),moneda=Dn.moneda,observaciones=obse,estadoTransaccion="activo",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
			CajaD.save()
			anu= EnvioCajaCajaAnulacionM(id_EnvioCaja=Dn,idCajaDebe=CajaD)
			anu.save()
			saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
			if Dn.moneda=='soles':
				saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)+float(Dn.comision)
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
			elif Dn.moneda =='dolares':
				saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)+float(Dn.comision)
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
			aux= EnvioCajaCajaM.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
			data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	exito=data
	fechaOp= str(datetime.now().strftime('%Y-%m-%d %I:%M %p'))
	data={'exito':exito,'fecha':fechaOp}
	data= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def DineroRecibido_m_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		tabla= request.GET.get('tabla','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			Dn=EnvioCajaCajaM.objects.get(pk=idDebe,estado='enviado')
			Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			numeroRI = int(Nrecibo.nroRI)+1
			NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
			CajaD= TCajaDebeM(id_personal=C.id_usuario,tablaRelacional="RecepcionEnvioCajaCajaM",conceptoDetalle="Recepcion de Dinero",tipoDocumento="R/I",cantidadDinero=Dn.monto,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
			CajaD.save()
			Rc= RecepcionEnvioCajaCajaM(idCajaDebe=CajaD,idEnvioCajaCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido")
			Rc.save()
			saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
			if Dn.moneda=='soles':
				saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
			elif Dn.moneda =='dolares':
				saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
				SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
			aux= EnvioCajaCajaM.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
			data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)
#*******************************************************************************
#*************************** cuenta corriente main *****************************
#************************************ CUENTAS *****************************************
@login_required
@transaction.atomic
def crear_cta_ahorro_cte_main_view(request):
	idCliente=request.POST.get('IdCliente')
	tipo_persona_cli=request.POST.get('TipoPersona')
	dni_cli=request.POST.get('DniRucCln')
	nombre_cli=request.POST.get('NombreCln')
	paterno_cli=request.POST.get('PaternoCln')
	materno_cli=request.POST.get('MaternoCln')
	MontoApertura= request.POST.get('montoapertura')
	Observacion = request.POST.get('observacion','')
	moneda = request.POST.get('moneda','')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	if MontoApertura!= None and MontoApertura !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idCliente == '' or idCliente== None:
					sq= Cliente.objects.filter(nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli).values('pk')
					if sq.count()==0:
						cln = Cliente(dni=dni_cli,nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli,tipo_persona=tipo_persona_cli,idCaja=C.pk)
						cln.save()
						idCliente = str(cln.pk)
					else:
						lista5= list(sq)
						idCliente= str(lista5[0]['pk'])
				cli = Cliente.objects.get(pk=idCliente)
				nombre= cli.nombre +' '+ cli.Apellido_paterno+' '+cli.Apellido_materno
				dni=cli.dni
				Ingres= ConvertirDecimal(MontoApertura)
				Monto=Ingres
				concepto= 'Apertura de Cuenta Corriente'
				cte= CtaCte_main(id_cliente=cli,id_oficina= C.id_oficina,id_caja=C,id_usuario=C.id_usuario,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='no',tipoCuenta='CTE',moneda=moneda)#CTE corriente
				cte.save()
				if Ingres >0:
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroR = int(Nrecibo.nroRI)+1
					nroRe=numeroR
					#solo para soles por ahora
					debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Apertura de Cuenta Ahorro Cte',tipoDocumento='R/I',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
					debe.save()
					movimiento= CtaCteMovimientos_main(id_ctacte=cte,idDebeHaber=debe.pk,tabla='TCajaDebe',montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Apertura de cuenta Ahorro Cte',moneda=moneda,conceptoDetalle='Apertura de Cuenta corriente')
					movimiento.save()
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
					cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					if moneda=='soles':
						SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
						saldo= SaldoSoles+Ingres
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
					elif moneda =='dolares':
						SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
						saldo= SaldoDolares+Ingres
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"CrearCtaAhorroCte_main.html",{"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def depositar_cta_ahorro_cte_main_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	fecha = request.POST.get('fecha')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	operacion =''
	saldo_cta=''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaCte_main.objects.filter(pk=id_cta,estado__in=['activo','depositos','sobregirado']).exists():
					Ingres= ConvertirDecimal(monto)
					if Ingres > 0:
						#cta=None
						#if CtaCte_main.objects.filter(pk=id_cta,estado='activo').exists():
						cta= CtaCte_main.objects.get(pk=id_cta)
						#else:
						#	cta= CtaCte_main.objects.get(pk=id_cta,estado='depositos')
						moneda = cta.moneda
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRI)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Deposito a Cuenta Ahorro Cte'
						debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Deposito a Cuenta Ahorro Cte',tipoDocumento='R/I',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						debe.save()
						movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=debe.pk,tabla='TCajaDebe',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos='Deposito a cuenta Ahorro Cte',moneda=moneda)
						movimiento.save()
						saldo_cta= str(float(cta.saldo)+Ingres)
						if (float(cta.saldo)+Ingres)>0:
							auxa= CtaCte_main.objects.filter(pk=cta.pk).update(estado='activo')
						aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if moneda == 'soles':
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							saldo= SaldoSoles+Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
						elif moneda == 'dolares':
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							saldo= SaldoDolares+Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
						operacion ='DEPOSITO'
						exito='exito'
					else:
						exito='Monto No valido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente_main.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/I","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

@login_required
@transaction.atomic
def recargar_agente_cte_main_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	fecha = request.POST.get('fecha')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	operacion =''
	saldo_cta=''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaCte_main.objects.filter(pk=id_cta,estado__in=['activo','depositos','sobregirado']).exists():
					Ingres= ConvertirDecimal(monto)
					if Ingres > 0:
						#cta=None
						#if CtaCte_main.objects.filter(pk=id_cta,estado='activo').exists():
						cta= CtaCte_main.objects.get(pk=id_cta)
						#else:
						#	cta= CtaCte_main.objects.get(pk=id_cta,estado='depositos')
						moneda = cta.moneda
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRE)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Recarga Agente'
						haber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Recarga de tarjeta',tipoDocumento='R/E',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						haber.save()
						movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=haber.pk,tabla='TCajaHaber',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos='Deposito a cuenta - Recarga',moneda=moneda)
						movimiento.save()

						aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)

						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if moneda == 'soles':
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							saldo= SaldoSoles-Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
						elif moneda == 'dolares':
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							saldo= SaldoDolares-Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
						operacion ='DEPOSITO'
						exito='exito'
					else:
						exito='Monto No valido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente_main.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/I","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )


@login_required
@transaction.atomic
def retirar_cta_ahorro_cte_main_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	transac_= request.POST.get('transac')
	fecha = request.POST.get('fecha')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	saldo_cta=''
	operacion =''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaCte_main.objects.filter(pk=id_cta,estado='activo').exists():
					cta= CtaCte_main.objects.get(pk=id_cta,estado='activo')
					moneda = cta.moneda
					Ingres= ConvertirDecimal(monto)
					saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					if Ingres > 0:
						#if Ingres<=ConvertirDecimal(saldoPrinsipal.saldo_soles):
						#	if Ingres<=float(cta.saldo):
						if vericar_autorizacion_cta_main(C, 'Retiro_Cta_Cte', cta, Ingres, moneda):
							nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
							dni=cta.id_cliente.dni
							Monto=Ingres
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroRE)+1
							nroRe=numeroR
							#solo para soles por ahora
							concepto= 'Retiro de Cuenta Ahorro Cte'
							haber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Retiro de Cuenta Ahorro Cte',tipoDocumento='R/E',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
							haber.save()
							movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=haber.pk,tabla='TCajaHaber',montoRetiro=Ingres,saldo=(float(cta.saldo)-Ingres),observacionesMovimientos='Retiro de cuenta Ahorro Cte',moneda=moneda)
							movimiento.save()
							saldo_cta=str(float(cta.saldo)-Ingres)
							aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)-Ingres))
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
							cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							if moneda == 'soles':
								SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
								saldo= SaldoSoles-Ingres
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
							elif moneda == 'dolares':
								SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
								saldo= SaldoDolares-Ingres
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
							operacion ='RETIRO'
							actualizar_autorizacion_cta_main("Retiro_Cta_Cte", cta.pk, C.pk,Ingres,moneda)
							exito='exito'
						else:
							exito ="La Cuenta no es posible retirar, solicite autorizacion al administrador"

						#	else:
						#		exito='Saldo Insuficiente en Cuenta'
						#else:
						#	exito='Saldo Insuficiente en Caja'
					else:
						exito='Monto no permitido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente_main.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/E","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

@login_required
@transaction.atomic
def cerrar_cta_ahorro_cte_main_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	#C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte_main.objects.filter(pk=id_cta,estado='activo').exists():
					cta= CtaCte_main.objects.get(pk=id_cta,estado='activo')
					if cta.saldo ==0:
						CtaCte_main.objects.filter(pk=id_cta,estado='activo').update(estado='cerrado')
						exito="exito"
					else:
						exito='Para cerrar una cuenta, es necesario retirar todo el saldo'
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def habilitar_cta_ahorro_cte_main_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	#C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte_main.objects.filter(pk=id_cta,estado='cerrado').exists():
					CtaCte_main.objects.filter(pk=id_cta,estado='cerrado').update(estado='activo')
					exito="exito"
				else:
					exito='La Cuenta ya esta Habilitada'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def bloquear_retiros_cta_ahorro_cte_main_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	#C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte_main.objects.filter(pk=id_cta,estado='activo').exists():
					CtaCte_main.objects.filter(pk=id_cta,estado='activo').update(estado='depositos')
					exito="exito"
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def habilitar_retiros_cta_ahorro_cte_main_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	#C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte_main.objects.filter(pk=id_cta,estado='depositos').exists():
					CtaCte_main.objects.filter(pk=id_cta,estado='depositos').update(estado='activo')
					exito="exito"
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

#CIERRE DE CAJA DOLAR
@login_required
@transaction.atomic
def cerrarCajaDolares_ajax_view(request):
	data=''
	if request.is_ajax:
		ingresoS=request.GET.get('IS')
		ingresoD=request.GET.get('ID')
		egresoS=request.GET.get('ES')
		egresoD=request.GET.get('ED')
		saldoS=request.GET.get('SS')
		saldoD=request.GET.get('SD')
		sistema_s=request.GET.get('sistema_s')
		sistema_d=request.GET.get('sistema_d')
		fdesde=request.GET.get('fd','')#----
		fhasta=request.GET.get('fh','')#----
		obse= request.GET.get('obs','')
		ingresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoS)))
		ingresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoD)))
		egresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoS)))
		egresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoD)))
		saldoS=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoS)))
		saldoD=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoD)))
		sistema_s=ConvertirDecimal(QuitarEspacios(desnormalizar(sistema_s)))
		sistema_d=ConvertirDecimal(QuitarEspacios(desnormalizar(sistema_d)))
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			with transaction.atomic():
				if fdesde !='' and fhasta!='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta= datetime.strptime(fhasta, '%Y-%m-%d')
				elif fdesde !='' and fhasta=='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta=fecha_desde
				else:
					fecha_desde=date.today()
					fecha_hasta=fecha_desde
				if not CajaCierreDolares.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists():
					if CajaCierreDolares.objects.filter(id_caja=C.pk,estado="cancelado").exists():
						Uc= CajaCierreDolares.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
						SI_soles=float(Uc.saldo_soles)
						SI_dolares=float(Uc.saldo_dolares)
					else:
						Sin=SaldoInicialCajaCambio.objects.get(id_caja=C.pk)
						SI_soles=float(Sin.saldo_soles)
						SI_dolares=float(Sin.saldo_dolares)
					saldoS= SI_soles + ingresoS - egresoS
					saldoD =SI_dolares + ingresoD - egresoD
					#if C.id_oficina.id_usuario.pk == C.id_usuario.pk:
					cierre= CajaCierreDolares(id_oficina= C.id_oficina,id_caja=C,totalDebeSoles=ingresoS,totalDebeDolares=ingresoD,totalHaberSoles=egresoS,totalHaberDolares=egresoD,observaciones=obse,saldo_soles=saldoS,saldo_dolares=saldoD,fechaDesde=fecha_desde,fechaHasta=fecha_hasta,estado='cerrado',saldoInicial_soles=SI_soles,saldoInicial_dolares=SI_dolares,soles_sistema=sistema_s,dolares_sistema=sistema_d)
					cierre.save()
					SI= SaldoInicialCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=saldoS,saldo_dolares=saldoD)
					data='exito'
				else:
					data= 'caja cerrada'
		except IntegrityError:
			data='fail'+ str(sys.exc_info()[1])
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)

#CIERRE DE CAJA MATERIAL
@login_required
@transaction.atomic
def cerrarCajaMaterial_ajax_view(request):
	data=''
	if request.is_ajax:
		ingresoS=request.GET.get('IS')
		ingresoD=request.GET.get('ID')
		ingresoM=request.GET.get('IM')
		egresoS=request.GET.get('ES')
		egresoD=request.GET.get('ED')
		egresoM=request.GET.get('EM')
		saldoS=request.GET.get('SS')
		saldoD=request.GET.get('SD')
		saldoM=request.GET.get('SM')
		sistema_s=request.GET.get('sistema_s')
		sistema_d=request.GET.get('sistema_d')
		sistema_m=request.GET.get('sistema_m')
		fdesde=request.GET.get('fd','')#----
		fhasta=request.GET.get('fh','')#----
		obse= request.GET.get('obs','')
		ingresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoS)))
		ingresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoD)))
		ingresoM=ConvertirDecimal(QuitarEspacios(desnormalizar(ingresoM)))
		egresoS=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoS)))
		egresoD=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoD)))
		egresoM=ConvertirDecimal(QuitarEspacios(desnormalizar(egresoM)))
		saldoS=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoS)))
		saldoD=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoD)))
		saldoM=ConvertirDecimal(QuitarEspacios(desnormalizar(saldoM)))
		sistema_s=ConvertirDecimal(QuitarEspacios(desnormalizar(sistema_s)))
		sistema_d=ConvertirDecimal(QuitarEspacios(desnormalizar(sistema_d)))
		sistema_m=ConvertirDecimal(QuitarEspacios(desnormalizar(sistema_m)))
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			with transaction.atomic():
				if fdesde !='' and fhasta!='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta= datetime.strptime(fhasta, '%Y-%m-%d')
				elif fdesde !='' and fhasta=='':
					fecha_desde= datetime.strptime(fdesde, '%Y-%m-%d')
					fecha_hasta=fecha_desde
				else:
					fecha_desde=date.today()
					fecha_hasta=fecha_desde

				if not CajaCierreMaterial.objects.filter(fechaHasta__gte=fecha_hasta,id_caja=C.pk,estado="cerrado").exists():
					if CajaCierreMaterial.objects.filter(id_caja=C.pk,estado="cancelado").exists():
						Uc= CajaCierreMaterial.objects.filter(id_caja=C.pk,estado="cerrado").latest("fechaHasta")
						SI_soles=float(Uc.saldo_soles)
						SI_dolares=float(Uc.saldo_dolares)
						SI_material=float(Uc.saldo_material)
					else:
						Sin=SaldoInicialCajaMaterial.objects.get(id_caja=C.pk)
						SI_soles=float(Sin.saldo_soles)
						SI_dolares=float(Sin.saldo_dolares)
						SI_material=float(Sin.saldo_material)
					saldoS= SI_soles + ingresoS - egresoS
					saldoD =SI_dolares + ingresoD - egresoD
					saldoM =SI_material + ingresoM - egresoM
					cierre= CajaCierreMaterial(id_oficina= C.id_oficina,id_caja=C,totalDebeSoles=ingresoS,totalDebeDolares=ingresoD,totalDebeMaterial=ingresoM,totalHaberSoles=egresoS,totalHaberDolares=egresoD,totalHaberMaterial=egresoM,observaciones=obse,saldo_soles=saldoS,saldo_dolares=saldoD,saldo_material=saldoM,fechaDesde=fecha_desde,fechaHasta=fecha_hasta,estado='cerrado',saldoInicial_soles=SI_soles,saldoInicial_dolares=SI_dolares,saldoInicial_material=SI_material,soles_sistema=sistema_s,dolares_sistema=sistema_d,material_sistema=sistema_m)
					cierre.save()
					SI= SaldoInicialCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=saldoS,saldo_dolares=saldoD,saldo_material=saldoM)
					data='exito'
				else:
					data= 'caja cerrada'
		except IntegrityError:
			data='fail'+ str(sys.exc_info()[1])
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"+str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(data,mimetype)

#*****************************************************************************
#*************************** cuenta corriente administrador -gerente *****************************
#************************************ CUENTAS *****************************************
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def crear_cta_ahorro_cte_admin_view(request):
	idCliente=request.POST.get('IdCliente')
	tipo_persona_cli=request.POST.get('TipoPersona')
	dni_cli=request.POST.get('DniRucCln')
	nombre_cli=request.POST.get('NombreCln')
	paterno_cli=request.POST.get('PaternoCln')
	materno_cli=request.POST.get('MaternoCln')
	MontoApertura= request.POST.get('montoapertura')
	Observacion = request.POST.get('observacion','')
	moneda = request.POST.get('moneda','')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	if MontoApertura!= None and MontoApertura !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		G = Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
		try:
			with transaction.atomic():
				if idCliente == '' or idCliente== None:
					sq= Cliente.objects.filter(nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli).values('pk')
					if sq.count()==0:
						cln = Cliente(dni=dni_cli,nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli,tipo_persona=tipo_persona_cli,idCaja=C.pk)
						cln.save()
						idCliente = str(cln.pk)
					else:
						lista5= list(sq)
						idCliente= str(lista5[0]['pk'])
				cli = Cliente.objects.get(pk=idCliente)
				nombre= cli.nombre +' '+ cli.Apellido_paterno+' '+cli.Apellido_materno
				dni=cli.dni
				Ingres= ConvertirDecimal(MontoApertura)
				Monto=Ingres
				concepto= 'Apertura de Cuenta Corriente'
				cte= CtaCte_main(id_cliente=cli,id_oficina= C.id_oficina,id_caja=C,id_usuario=C.id_usuario,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='no',tipoCuenta='CTE',moneda=moneda)#CTE corriente
				cte.save()
				if Ingres >0:
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroR = int(Nrecibo.nroRI)+1
					nroRe=numeroR
					#solo para soles por ahora
					debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Apertura de Cuenta Ahorro Cte',tipoDocumento='R/I',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
					debe.save()
					movimiento= CtaCteMovimientos_main(id_ctacte=cte,idDebeHaber=debe.pk,tabla='TCajaDebe',montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Apertura de cuenta Ahorro Cte',moneda=moneda,conceptoDetalle='Apertura de Cuenta corriente')
					movimiento.save()
					NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
					cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					if moneda=='soles':
						SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
						saldo= SaldoSoles+Ingres
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
					elif moneda =='dolares':
						SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
						saldo= SaldoDolares+Ingres
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"CrearCtaAhorroCte_admin.html",{"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def depositar_cta_ahorro_cte_admin_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	fecha = request.POST.get('fecha')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	operacion =''
	saldo_cta=''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		G = Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
		try:
			with transaction.atomic():
				if CtaCte_main.objects.filter(pk=id_cta,estado__in=['activo','depositos','sobregirado']).exists():
					Ingres= ConvertirDecimal(monto)
					if Ingres > 0:
						#cta=None
						#if CtaCte_main.objects.filter(pk=id_cta,estado='activo').exists():
						cta= CtaCte_main.objects.get(pk=id_cta)
						#else:
						#	cta= CtaCte_main.objects.get(pk=id_cta,estado='depositos')
						moneda = cta.moneda
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRI)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Deposito a Cuenta Ahorro Cte'
						debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Deposito a Cuenta Ahorro Cte',tipoDocumento='R/I',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						debe.save()
						movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=debe.pk,tabla='TCajaDebe',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos='Deposito a cuenta Ahorro Cte',moneda=moneda)
						movimiento.save()
						saldo_cta= str(float(cta.saldo)+Ingres)
						if (float(cta.saldo)+Ingres)>0:
							auxa= CtaCte_main.objects.filter(pk=cta.pk).update(estado='activo')
						aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if moneda == 'soles':
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							saldo= SaldoSoles+Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
						elif moneda == 'dolares':
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							saldo= SaldoDolares+Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
						operacion ='DEPOSITO'
						exito='exito'
					else:
						exito='Monto No valido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente_admin.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/I","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def retirar_cta_ahorro_cte_admin_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	transac_= request.POST.get('transac')
	fecha = request.POST.get('fecha')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	saldo_cta=''
	operacion =''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		G = Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
		try:
			with transaction.atomic():
				if CtaCte_main.objects.filter(pk=id_cta,estado='activo').exists():
					cta= CtaCte_main.objects.get(pk=id_cta,estado='activo')
					moneda = cta.moneda
					Ingres= ConvertirDecimal(monto)
					saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
					if Ingres > 0:
						#if Ingres<=ConvertirDecimal(saldoPrinsipal.saldo_soles):
						#	if Ingres<=float(cta.saldo):
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRE)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Retiro de Cuenta Ahorro Cte'
						haber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Retiro de Cuenta Ahorro Cte',tipoDocumento='R/E',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						haber.save()
						movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=haber.pk,tabla='TCajaHaber',montoRetiro=Ingres,saldo=(float(cta.saldo)-Ingres),observacionesMovimientos='Retiro de cuenta Ahorro Cte',moneda=moneda)
						movimiento.save()
						saldo_cta=str(float(cta.saldo)-Ingres)
						aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)-Ingres))
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
						cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						if moneda == 'soles':
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							saldo= SaldoSoles-Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
						elif moneda == 'dolares':
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
							saldo= SaldoDolares-Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
						operacion ='RETIRO'
						exito='exito'
						#	else:
						#		exito='Saldo Insuficiente en Cuenta'
						#else:
						#	exito='Saldo Insuficiente en Caja'
					else:
						exito='Monto no permitido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente_admin.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/E","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

#********************** ingreso egreso admin - gerente ***********************
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def RegistroIngreso_admin_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	recibid=request.POST.get('recibid')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	cargo =''
	G = Gerente.objects.get(usuario=usr)
	C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRI = int(Nrecibo.nroRI)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
				TCajaD= TCajaDebe(id_personal=C.id_usuario,tablaRelacional="Ingreso",conceptoDetalle=Concepto,tipoDocumento="R/I",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
				TCajaD.save()
				ingreso = Ingreso(id_debe=TCajaD,afavor=recibid,concepto=Concepto,estado='activo',observaciones=Obs)
				ingreso.save()
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroIngreso_admin.html",{"resultado":exito,"cargo":cargo,"nombreRecibo": recibid,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def RegistroEgreso_admin_view(request):
	exito='' 
	Concepto=request.POST.get('concepto')
	afavord=request.POST.get('afavord')
	Monto=request.POST.get('monto')
	Moneda=request.POST.get('moneda')
	Obs=request.POST.get('obs')
	des=request.POST.get('des')
	obsc=request.POST.get('obsC')
	usr = request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	cargo =''
	G = Gerente.objects.get(usuario=usr)
	C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
	if Monto != None:
		try:
			Cantidad = ConvertirDecimal(Monto)
			with transaction.atomic():
				Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
				numeroRE = int(Nrecibo.nroRE)+1
				NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
				saldoDis= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
				if Moneda=='soles':
					saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
					#if saldosoles>= Cantidad:
					TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle=Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					TCajaH.save()
					egreso = Egreso(id_haber=TCajaH,estado='activo',observaciones=Obs,concepto=Concepto,afavor=afavord)
					egreso.save()
					saldosoles= saldosoles - Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
					exito= 'exito'
					#else:
					#	exito= 'saldo insuficiente'
				elif Moneda =='dolares':
					saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)
					#if saldodolares>= Cantidad:
					TCajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional="Egreso",conceptoDetalle=Concepto,tipoDocumento="R/E",cantidadDinero=Cantidad,moneda= Moneda,observaciones=Obs,estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
					TCajaH.save()
					egreso = Egreso(id_haber=TCajaH,estado='activo',observaciones=Obs,concepto=Concepto,afavor=afavord)
					egreso.save()
					saldodolares= saldodolares - Cantidad
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
					exito='exito'
					#else:
					#	exito= 'saldo insuficiente'
				else:
					exito= 'fail'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"registroEgreso_admin.html",{"resultado":exito,"cargo":cargo,"nombreRecibo": afavord,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"monedaRecibo":Moneda,"conceptoDetalleRecibo":Concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

#retirar con sobregiro
@login_required
@transaction.atomic
def retirar_con_sobregiro_cta_cte_main_view(request):
	id_cta=request.POST.get('pk_cta')
	id_so=request.POST.get('pk_sobregiro')
	monto = request.POST.get('retiro')
	ind = request.POST.get('indefinido')
	plazo = request.POST.get('plazo')
	fecha_pago = request.POST.get('fecha_pago')
	interes_dia = request.POST.get('interes_dia')
	interes_total = request.POST.get('interes_total')
	Observacion = request.POST.get('obs','')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	saldo_cta=''
	operacion =''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		if fecha_pago=='':
			fecha_pago=None
		try:
			with transaction.atomic():
				if Solicitud_sobregiros_ctacte_main.objects.filter(pk=id_so,id_ctacte=id_cta,estado='autorizado').exists():
					if CtaCte_main.objects.filter(pk=id_cta,estado__in=['activo','sobregirado']).exists():
						cta= CtaCte_main.objects.get(pk=id_cta)
						moneda = cta.moneda
						Ingres= ConvertirDecimal(monto)
						saldoPrinsipal= SaldoDisponibleCajas.objects.get(id_caja=C.pk)
						if Ingres > 0:
							#if Ingres<=ConvertirDecimal(saldoPrinsipal.saldo_soles):
							#	if Ingres<=float(cta.saldo):
							nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
							dni=cta.id_cliente.dni
							Monto=Ingres
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroRE)+1
							nroRe=numeroR
							#solo para soles por ahora
							concepto= 'Sobregiro de Cuenta Ahorro Cte'
							haber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle='Sobregiro de Cuenta Ahorro Cte',tipoDocumento='R/E',cantidadDinero=Ingres,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
							haber.save()
							movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=haber.pk,tabla='TCajaHaber',montoRetiro=Ingres,saldo=(float(cta.saldo)-Ingres),observacionesMovimientos='Retiro (sobregiro) de cuenta Ahorro Cte',moneda=moneda,sobregirado='si',monto_sobregiro=(float(cta.saldo)-Ingres),interes=interes_total,plazo=plazo,tipo_plazo='d',fecha_pago=fecha_pago)
							movimiento.save()
							saldo_cta=str(float(cta.saldo)-Ingres)
							aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)-Ingres),estado='sobregirado')
							aux2= Solicitud_sobregiros_ctacte_main.objects.filter(pk=id_so,id_ctacte=id_cta).update(estado='utilizado',fecha_utilizado=datetime.now())
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
							cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							if moneda == 'soles':
								SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
								saldo= SaldoSoles-Ingres
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
							elif moneda == 'dolares':
								SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
								saldo= SaldoDolares-Ingres
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
							operacion ='RETIRO'
							exito='exito'
							#	else:
							#		exito='Saldo Insuficiente en Cuenta'
							#else:
							#	exito='Saldo Insuficiente en Caja'
						else:
							exito='Monto no permitido'
					else:
						exito='Operacion Rechazada'
				else:
					exito='Operacion no valida'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorriente_main.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/E","nroRecibo":nroRe,"montoRecibo":Monto,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

#envio de dinero en caja material
@login_required
@transaction.atomic
def EnviarOficinaOficina_do_view(request):
	usr= request.user.username
	idOfi= request.POST.get('oficina')
	idCa= request.POST.get('caja','')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	tipoc=request.POST.get('tipoc')
	comi=request.POST.get('comi')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	nombreof=''
	dol=0
	sol=0
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idOfi != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			with transaction.atomic():
				O1 = Oficina.objects.get(pk= idOfi)#destino
				nombreof= O1.nombre_oficina
				Monto = ConvertirDecimal(Monto)
				saldoPrinsipal= SaldoDisponibleCajaCambio.objects.get(id_caja=C.pk)
				if Monto > 0 and  comi >=0:
					#if (Moneda=='soles' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
					saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
					saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
					if Moneda=='dolares':
						if tipoc != None and tipoc !="":
							tipoc = float(tipoc)
							Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							C1= Cajas.objects.get(pk=idCa)
							THaber= TCajaHaberCambio(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Envio de dinero para oficina ",tipoDocumento="R/E",cantidadDinero=Monto+comi,moneda=Moneda,tipo_cambio=tipoc,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							Ec= EnvioCajaCajaD(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle="Envio de dinero para oficina ",observaciones=Observaciones,estado="enviado")
							Ec.save()
							SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto-comi))
							exito='exito'
						else:
							exito = 'Ingrese un tipo de cambio dolar valido'
					else:
						Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroRE = int(Nrecibo.nroRE)+1
						NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
						C1= Cajas.objects.get(pk=idCa)
						THaber= TCajaHaberCambio(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Envio de dinero para oficina ",tipoDocumento="R/E",cantidadDinero=Monto +comi,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
						THaber.save()
						Ec= EnvioCajaCajaD(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle="Envio de dinero para oficina ",observaciones=Observaciones,estado="enviado")
						Ec.save()
						SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto-comi))
						exito='exito'
					#else:
						#exito = 'Saldo insuficiente'
				else:
					exito = 'Montos no admitidos'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	es_ce,ce=es_asociado(C.pk)
	return render(request,"envioOficinaD.html",{"es_ceA":es_ce,"ceA":ce,"resultado":exito,"cargo":cargo,"nombreRecibo":nombreof,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"comi":comi,"monedaRecibo":Moneda,"conceptoDetalleRecibo":"Envio de dinero de "+C.id_oficina.nombre_oficina+" a "+ nombreof,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def EnviarCajaOperador_do_view(request):
	usr= request.user.username
	#afavord= request.POST.get('Afavorde')
	idCaja= request.POST.get('caja')
	Moneda= request.POST.get('moneda')
	Monto = request.POST.get('monto')
	tipoc=request.POST.get('tipoc')
	comi=request.POST.get('comi')
	Observaciones= request.POST.get('observacion')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	exito=''
	cargo=''
	para=''
	dol=0
	sol=0
	Concepto=""
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if C.id_usuario.pk == C.id_oficina.id_usuario.pk:
		cargo='administrador'
	if idCaja != None:
		try:
			if comi ==''or comi == None:
				comi=0
			else:
				comi = ConvertirDecimal(comi)
			with transaction.atomic():
				C1 = Cajas.objects.get(pk= idCaja)#destino
				para= C1.id_usuario.nombre+' '+C1.id_usuario.Apellido_paterno+' '+ C1.id_usuario.Apellido_materno
				Monto = ConvertirDecimal(Monto)
				Concepto="Envio de dinero para habilitacion de Caja "+ C1.nombre
				saldoPrinsipal= SaldoDisponibleCajaCambio.objects.get(id_caja=C.pk)
				if C !=C1:
					if Monto > 0 and  comi >=0:
						#if (Moneda=='soles' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_soles)) or(Moneda=='dolares' and (Monto+comi)<=ConvertirDecimal(saldoPrinsipal.saldo_dolares)):
						saldoDP = ConvertirDecimal(saldoPrinsipal.saldo_dolares)
						saldoSP = ConvertirDecimal(saldoPrinsipal.saldo_soles)
						if Moneda=='dolares':
							if tipoc != None and tipoc !="":
								tipoc = float(tipoc)
								Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroRE = int(Nrecibo.nroRE)+1
								NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
								THaber= TCajaHaberCambio(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Habilitacion de dinero",tipoDocumento="R/E",cantidadDinero=Monto+comi,tipo_cambio=tipoc,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
								THaber.save()
								cA=EnvioCajaCajaD(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
								cA.save()
								SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_dolares=(saldoDP-Monto-comi))
								exito='exito'
							else:
								exito = 'Ingrese un tipo de cambio dolar valido'
						else:
							Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroRE = int(Nrecibo.nroRE)+1
							NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
							THaber= TCajaHaberCambio(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaM",conceptoDetalle="Habilitacion de dinero",tipoDocumento="R/E",cantidadDinero=Monto+comi,moneda=Moneda,observaciones=Observaciones,estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
							THaber.save()
							cA=EnvioCajaCajaD(idCajaHaber=THaber,id_CajaDestino=C1,monto=Monto,comision=comi,moneda=Moneda,conceptoDetalle=Concepto,observaciones=Observaciones,estado='enviado')
							cA.save()
							SaldoDisponibleCajaCambio.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldoSP-Monto-comi))
							exito='exito'
						#else:
						#	exito = 'Saldo insuficiente'
					else:
						exito='Montos no admitidos'
				else:
					exito= 'error en operacion'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"habilitarCajaD.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":para,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":Monto,"comi":comi,"monedaRecibo":Moneda,"conceptoDetalleRecibo":'Envio de dinero para habilitacion de caja',"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def AnularEnvioDineroCaja_do_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		comi=0
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			Dn=EnvioCajaCajaD.objects.get(pk=idDebe,estado='enviado',idCajaHaber__id_caja=C.pk)
			C_des= Cajas.objects.get(pk=Dn.id_CajaDestino.pk)
			Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			numeroRI = int(Nrecibo.nroRI)+1
			NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
			CajaD= TCajaDebeCambio(id_personal=C.id_usuario,tablaRelacional="EnvioCajaCajaAnulacionM",conceptoDetalle='Anulacion de envio de dinero ',tipoDocumento="R/I",cantidadDinero=float(Dn.monto + Dn.comision),tipo_cambio=Dn.idCajaHaber.tipo_cambio,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="activo",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
			CajaD.save()
			anu= EnvioCajaCajaAnulacionD(id_EnvioCaja=Dn,idCajaDebe=CajaD)
			anu.save()
			saldoDis= SaldoDisponibleCajaCambio.objects.get(id_caja=C.pk)
			if Dn.moneda=='soles':
				saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)+float(Dn.comision)
				SaldoDisponibleCajaCambio.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
			elif Dn.moneda =='dolares':
				saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)+float(Dn.comision)
				SaldoDisponibleCajaCambio.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
			aux= EnvioCajaCajaD.objects.select_for_update().filter(pk=Dn.pk).update(estado='anulado')
			data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	exito=data
	fechaOp= str(datetime.now().strftime('%Y-%m-%d %I:%M %p'))
	data={'exito':exito,'fecha':fechaOp}
	data= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def DineroRecibido_do_ajax_view(request):
	data=''
	if request.is_ajax:
		idDebe= request.GET.get('idS','')
		tabla= request.GET.get('tabla','')
		obse= request.GET.get('obs','')
		obse= QuitarEspacios(obse)
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			Dn=EnvioCajaCajaD.objects.get(pk=idDebe,estado='enviado')
			Nrecibo= NroReciboCajaCambio.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
			numeroRI = int(Nrecibo.nroRI)+1
			NroReciboCajaCambio.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
			CajaD= TCajaDebeCambio(id_personal=C.id_usuario,tablaRelacional="RecepcionEnvioCajaCajaM",conceptoDetalle="Recepcion de Dinero",tipoDocumento="R/I",cantidadDinero=Dn.monto,tipo_cambio=Dn.idCajaHaber.tipo_cambio,moneda=Dn.moneda,observaciones=obse,estadoTransaccion="recibido",nroRecibo=numeroRI,id_oficina=C.id_oficina,id_caja=C)
			CajaD.save()
			Rc= RecepcionEnvioCajaCajaD(idCajaDebe=CajaD,idEnvioCajaCaja=Dn,monto=Dn.monto,moneda=Dn.moneda,estado="recibido",observaciones=obse)
			Rc.save()
			saldoDis= SaldoDisponibleCajaCambio.objects.get(id_caja=C.pk)
			if Dn.moneda=='soles':
				saldosoles = ConvertirDecimal(saldoDis.saldo_soles)+ConvertirDecimal(Dn.monto)
				SaldoDisponibleCajaCambio.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_soles=saldosoles)
			elif Dn.moneda =='dolares':
				saldodolares = ConvertirDecimal(saldoDis.saldo_dolares)+ConvertirDecimal(Dn.monto)
				SaldoDisponibleCajaCambio.objects.select_for_update().filter(pk= saldoDis.pk).update(saldo_dolares=saldodolares)
			aux= EnvioCajaCajaD.objects.select_for_update().filter(pk=Dn.pk).update(estado='recibido')
			data='exito'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)
#*******************************************************************************
#----- adelanto ---------
@login_required
@transaction.atomic
def registrar_adelanto_ajax_view(request):
	data=''
	exito=''
	nr=''
	r_monto=''
	r_fecha=''
	r_hora=''
	cli_ref=''
	if request.is_ajax:
		monto= request.GET.get('monto','')
		ref= request.GET.get('cli_ref','')
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			saldoDis= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
			saldosoles = ConvertirDecimal(saldoDis.saldo_soles)
			Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina,id_caja=C.pk)
			numeroRE=int(Nrecibo.nroRE)+1
			nr = numeroRE
			cli_ref=ref
			r_monto= monto
			r_fecha= datetime.now().strftime('%Y-%m-%d')
			r_hora= datetime.now().strftime('%I:%M %p')
			NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina,id_caja=C.pk).update(nroRE=numeroRE)
			Chaber=TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="AdelantoCompraM",conceptoDetalle="Adelanto de compra material",tipoDocumento="R/E",cantidadDinero=monto,moneda='soles',estadoTransaccion="activo",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
			Chaber.save()
			adelanto = AdelantoCompraM(idCajaHaber=Chaber,cliente_sobre=ref,moneda='soles',monto=monto,estado='activo')
			adelanto.save()
			aux=SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(saldosoles-float(monto)))
			exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	else:
		exito="fail"
	data = json.dumps({'exito':exito,'nre':nr,'monto':r_monto,'fecha':r_fecha,'hora':r_hora,'ref':cli_ref})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#***************************************************************************************
#************************************ CUENTAS  MATERIAL*****************************************
@login_required
@transaction.atomic
def crear_cta_cte_material_view(request):
	idCliente=request.POST.get('IdCliente')
	tipo_persona_cli=request.POST.get('TipoPersona')
	dni_cli=request.POST.get('DniRucCln')
	nombre_cli=request.POST.get('NombreCln')
	paterno_cli=request.POST.get('PaternoCln')
	materno_cli=request.POST.get('MaternoCln')
	MontoApertura= request.POST.get('montoapertura')
	preciog= request.POST.get('preciog','0')
	Observacion = request.POST.get('observacion','')
	#moneda = request.POST.get('moneda','')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	preciog = float(preciog)
	if MontoApertura!= None and MontoApertura !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idCliente == '' or idCliente== None:
					sq= Cliente.objects.filter(nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli).values('pk')
					if sq.count()==0:
						cln = Cliente(dni=dni_cli,nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli,tipo_persona=tipo_persona_cli,idCaja=C.pk)
						cln.save()
						idCliente = str(cln.pk)
					else:
						lista5= list(sq)
						idCliente= str(lista5[0]['pk'])
				cli = Cliente.objects.get(pk=idCliente)
				nombre= cli.nombre +' '+ cli.Apellido_paterno+' '+cli.Apellido_materno
				dni=cli.dni
				Ingres= ConvertirDecimal(MontoApertura)
				if Ingres >0:
					Monto=Ingres
					Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					numeroR = int(Nrecibo.nroRIM)+1
					nroRe=numeroR
					#solo para soles por ahora
					concepto= 'Apertura de Cuenta Cte Material'
					debe= TCajaMaterialDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientosMaterial',conceptoDetalle='Apertura de Cuenta Cte Material',tipoDocumento='R/IM',pesoGramos=Ingres,precioxGramo=preciog,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
					debe.save()
					cte= CtaCteMaterial(id_cliente=cli,id_oficina= C.id_oficina,id_caja=C,id_usuario=C.id_usuario,saldo=Ingres,estado='activo',observaciones=Observacion,privadoOficina='no',tipoCuenta='CTE')#CTE corriente
					cte.save()
					movimiento= CtaCteMovimientosMaterial(id_ctacte=cte,idDebeHaber=debe.pk,tabla='TCajaMaterialDebe',montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos='Apertura de Cuenta Cte Material',conceptoDetalle='Apertura de Cuenta Cte Material',tipoDocumento='R/IM',nroRecibo=str(numeroR),precio=preciog)
					movimiento.save()
					NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRIM=numeroR)
					cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)

					SaldoMaterial= ConvertirDecimal(cons_saldo.saldo_material)
					saldo= SaldoMaterial+Ingres
					SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_material=saldo)
					exito='exito'
				else:
					exito='ingrese monto correcto'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"CrearCtaCteMaterial.html",{"resultado":exito,"nombreRecibo":nombre,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def depositar_cta_cte_material_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	fecha = request.POST.get('fecha')
	transac_= request.POST.get('transac')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	operacion =''
	saldo_cta=''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaCteMaterial.objects.filter(pk=id_cta,estado__in=['activo','depositos']).exists():
					Ingres= ConvertirDecimal(monto)
					if Ingres > 0:
						cta=None
						if CtaCteMaterial.objects.filter(pk=id_cta,estado='activo').exists():
							cta= CtaCteMaterial.objects.get(pk=id_cta,estado='activo')
						else:
							cta= CtaCteMaterial.objects.get(pk=id_cta,estado='depositos')
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRIM)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Deposito a Cuenta Cte Material'
						debe= TCajaMaterialDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientosMaterial',conceptoDetalle='Deposito a Cuenta Cte Material',tipoDocumento='R/IM',pesoGramos=Ingres,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						debe.save()
						movimiento= CtaCteMovimientosMaterial(id_ctacte=cta,idDebeHaber=debe.pk,tabla='TCajaMaterialDebe',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos='Deposito a Cuenta Cte Material',conceptoDetalle='Deposito a Cuenta Cte Material',tipoDocumento='R/IM',nroRecibo=str(numeroR))
						movimiento.save()
						saldo_cta= str(float(cta.saldo)+Ingres)
						aux= CtaCteMaterial.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRIM=numeroR)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)

						SaldoMaterial= ConvertirDecimal(cons_saldo.saldo_material)
						saldo= SaldoMaterial+Ingres
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_material=saldo)
						operacion ='DEPOSITO'
						exito='exito'
					else:
						exito='Monto No valido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorrienteMaterial.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/IM","nroRecibo":nroRe,"montoRecibo":Monto,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

@login_required
@transaction.atomic
def retirar_cta_cte_material_view(request):
	id_cta=request.POST.get('pk')
	saldo= request.POST.get('saldo')
	monto = request.POST.get('monto_movi')
	Observacion = request.POST.get('obs','')
	transac_= request.POST.get('transac')
	fecha = request.POST.get('fecha')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	Monto=0
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	saldo_cta=''
	operacion =''
	moneda=''
	if id_cta!= None and id_cta !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if CtaCteMaterial.objects.filter(pk=id_cta,estado='activo').exists():
					cta= CtaCteMaterial.objects.get(pk=id_cta,estado='activo')
					Ingres= ConvertirDecimal(monto)
					saldoPrinsipal= SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
					if Ingres > 0:
						#if Ingres<=ConvertirDecimal(saldoPrinsipal.saldo_material):
						#	if Ingres<=float(cta.saldo):
						nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						dni=cta.id_cliente.dni
						Monto=Ingres
						Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroREM)+1
						nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Retiro de Cuenta Cte Material'
						haber= TCajaMaterialHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientosMaterial',conceptoDetalle='Retiro de Cuenta Cte Material',tipoDocumento='R/EM',pesoGramos=Ingres,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						haber.save()
						movimiento= CtaCteMovimientosMaterial(id_ctacte=cta,idDebeHaber=haber.pk,tabla='TCajaMaterialHaber',montoRetiro=Ingres,saldo=(float(cta.saldo)-Ingres),observacionesMovimientos='Retiro de Cuenta Cte Material',conceptoDetalle='Retiro de Cuenta Cte Material',tipoDocumento='R/EM',nroRecibo=str(numeroR))
						movimiento.save()
						saldo_cta=str(float(cta.saldo)-Ingres)
						aux= CtaCteMaterial.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)-Ingres))
						NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroREM=numeroR)
						cons_saldo= SaldoDisponibleCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)

						SaldoMaterial= ConvertirDecimal(cons_saldo.saldo_material)
						saldo= SaldoMaterial-Ingres
						SaldoDisponibleCajaMaterial.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_material=saldo)
						
						operacion ='RETIRO'
						exito='exito'
						#	else:
						#		exito='Saldo Insuficiente en Cuenta'
						#else:
						#	exito='Saldo Insuficiente en Caja'
					else:
						exito='Monto no permitido'
				else:
					exito='Operacion Rechazada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"ListaCuentasCorrienteMaterial.html",{"resultado":exito,"operacion":operacion,"nombreRecibo":nombre,"dniRecibo":dni,"td":"R/EM","nroRecibo":nroRe,"montoRecibo":Monto,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'saldo_aportes':saldo_aportes,'saldo_cta':saldo_cta} )

"""
@login_required
@transaction.atomic
def cerrar_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='activo').exists():
					cta= CtaCte.objects.get(pk=id_cta,estado='activo')
					if cta.saldo ==0:
						CtaCte.objects.filter(pk=id_cta,estado='activo').update(estado='cerrado')
						exito="exito"
					else:
						exito='Para cerrar una cuenta, es necesario retirar todo el saldo'
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def habilitar_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='cerrado').exists():
					CtaCte.objects.filter(pk=id_cta,estado='cerrado').update(estado='activo')
					exito="exito"
				else:
					exito='La Cuenta ya esta Habilitada'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def bloquear_retiros_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='activo').exists():
					CtaCte.objects.filter(pk=id_cta,estado='activo').update(estado='depositos')
					exito="exito"
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def habilitar_retiros_cta_ahorro_cte_ajax_view(request):
	id_cta=request.GET.get('id_cta')
	usr=request.user.username
	C= Cajas.objects.get(id_usuario__usuario=usr)
	try:
		with transaction.atomic():
			if id_cta!= None and id_cta !='':
				if CtaCte.objects.filter(pk=id_cta,estado='depositos').exists():
					CtaCte.objects.filter(pk=id_cta,estado='depositos').update(estado='activo')
					exito="exito"
				else:
					exito='Operacion no permitida'
			else:
				exito='Operacion no valida'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({"exito":exito})
	return HttpResponse(data,mimetype)
"""
#07/05/2020
@login_required
@transaction.atomic
def ModificarDetalleCuentas_ajax_view(request):
	exito=""
	if request.is_ajax:
		idTr=request.GET.get('idT')
		nroCta=request.GET.get('nroCta')
		celRef=request.GET.get('celRef')
		nroOpe=request.GET.get('nroOpe')
		nroGiro=request.GET.get('nroGiro')
		clave=request.GET.get('clave')
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				SolTr= SolicitudTransferencia.objects.get(pk=idTr)
				cta_anteior = SolTr.nroCta
				if SolTr.idCajaDebe.estadoTransaccion=="activo":
					SolTr = SolicitudTransferencia.objects.get(pk=idTr)
					SolTr.nroCta = nroCta
					SolTr.cel_referencia = celRef
					SolTr.nro_operacion = nroOpe
					SolTr.nro_giro = nroGiro
					SolTr.clave = clave
					SolTr.save()
					#aux1 = st_banco_detalle.objects.filter(id_transferencia=idTr).update(cel_referencia=celRef,cta_dni=nroCta)
					co_banco = cta_bancos.objects.filter(id_cliente=SolTr.id_beneficiario,cta_dni=cta_anteior).update(cel_referencia=celRef,cta_dni=nroCta)
					exito ="exito"
				else:
					exito="operacion no valido"	
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail '+ str(sys.exc_info()[1])
	else:
		exito="fail " 
	mimetype="text"
	return HttpResponse(exito,mimetype)

#cambio de datos de transferencia de bancos
@login_required
@transaction.atomic
def ModificarDetalleCuentas_bancos_ajax_view(request):
	exito=""
	if request.is_ajax:
		idTr=request.GET.get('idT')
		nroCta=request.GET.get('nroCta')
		celRef=request.GET.get('celRef')
		nroOpe=request.GET.get('nroOpe')
		nroGiro=request.GET.get('nroGiro')
		clave=request.GET.get('clave')
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				SolTr= SolicitudTransferenciaBancoa.objects.get(pk=idTr)
				cta_anteior = SolTr.nroCta
				if SolTr.idCajaDebe.estadoTransaccion=="activo" and SolTr.idCajaDebe.id_caja.pk==C.pk:
					SolTr = SolicitudTransferenciaBancoa.objects.get(pk=idTr)
					SolTr.nroCta = nroCta
					SolTr.cel_referencia = celRef
					SolTr.nro_operacion = nroOpe
					SolTr.nro_giro = nroGiro
					SolTr.clave = clave
					SolTr.save()
					#aux1 = st_banco_detalle.objects.filter(id_transferencia=idTr).update(cel_referencia=celRef,cta_dni=nroCta)
					co_banco = cta_bancos.objects.filter(id_cliente=SolTr.id_beneficiario,cta_dni=cta_anteior).update(cel_referencia=celRef,cta_dni=nroCta)
					exito ="exito"
				else:
					exito="operacion no valido"	
		except IntegrityError:
			exito='fail '+ str(sys.exc_info()[1])
		except:
			exito='fail '+ str(sys.exc_info()[1])
	else:
		exito="fail " 
	mimetype="text"
	return HttpResponse(exito,mimetype)

#28-12-2021
@login_required
@transaction.atomic
def stLeidoBanco_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				gdetbanco= SolicitudTransferencia.objects.get(pk=idTr)
				#if st_banco_detalle.objects.filter(id_transferencia=idTr,id_transferencia__banco='si',id_transferencia__idCajaDebe__estadoTransaccion='activo').exists():
				if gdetbanco.banco != None and len(gdetbanco.banco)>1 and gdetbanco.idCajaDebe.estadoTransaccion=='activo': 
					if str(gdetbanco.leido_banco)[:2]!= 'si':
						gdetbanco.leido_banco ='si-'+ str(C.id_usuario.pk)
						gdetbanco.save()
						data='exito'
					else:
						data='Esta transferencia ya esta leido'
				else:
					data='error estado de transferencia'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def anular_stLeidoBanco_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				gdetbanco= SolicitudTransferencia.objects.get(pk=idTr)
				if gdetbanco.banco != None and len(gdetbanco.banco)>1 and gdetbanco.idCajaDebe.estadoTransaccion=='activo': 
					if str(gdetbanco.leido_banco)[:2] == 'si':
						idU = int(gdetbanco.leido_banco.split('-')[1])
						if idU == C.id_usuario.pk:
							gdetbanco.leido_banco =''
							gdetbanco.save()
							data='exito'
						else:
							data='El usuario que lee debe anularlo'
					else:
						data='Esta transferencia no esta leido'
				else:
					data='error estado de transferencia'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def stVerificadoBanco_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				gdetbanco= SolicitudTransferencia.objects.get(pk=idTr)
				if gdetbanco.banco != None and len(gdetbanco.banco)>1 and gdetbanco.idCajaDebe.estadoTransaccion=='activo': 
					if str(gdetbanco.verificado)[:2]!= 'si':
						gdetbanco.verificado ='si-'+ str(C.id_usuario.pk)
						gdetbanco.save()
						data='exito'
					else:
						data='Esta transferencia ya esta verificado'
				else:
					data='error estado de transferencia'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def anular_stVerificadoBanco_ajax_view(request):
	data=''
	nr=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				gdetbanco= SolicitudTransferencia.objects.get(pk=idTr)
				if gdetbanco.banco != None and len(gdetbanco.banco)>1 and gdetbanco.idCajaDebe.estadoTransaccion=='activo': 
					if str(gdetbanco.verificado)[:2] == 'si':
						idU = int(gdetbanco.verificado.split('-')[1])
						if idU == C.id_usuario.pk:
							gdetbanco.verificado =''
							gdetbanco.save()
							data='exito'
						else:
							data='El usuario que verifica debe anularlo'
					else:
						data='Esta transferencia no esta verificado'
				else:
					data='error estado de transferencia'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
def LiquidacionBase_view(request):
	exito = request.POST.get('exito','')
	return render(request,"LiquidarBase.html",{'resultado':exito})

@login_required
@transaction.atomic
def GurdarLiquidCaja_view(request):
	exito=''
	pkc = request.GET.get('pkC')
	filtro = request.GET.get('filtro','')
	fdesde = request.GET.get('fd','')
	fhasta = request.GET.get('fh','')
	obs = request.GET.get('obs','')
	if filtro=='h':
		fdesde= str(datetime.date.today())
		filtro= 'f'
	try:
		with transaction.atomic():
			C= Cajas.objects.get(pk=pkc)
			if filtro =='f':
				fhasta=fdesde
			fecha1= dtime_.datetime.strptime(fdesde, '%Y-%m-%d')
			fecha2= dtime_.datetime.strptime(fhasta, '%Y-%m-%d')
			if fecha1 <= fecha2:
				if not liquidacionCaja.objects.filter(id_caja=C.pk,fechaHasta__gte=fdesde,estado='liquidado').exists():
					fhoramin= dtime_.datetime.combine(fecha1,dtime_.time.min)
					fhoramax= dtime_.datetime.combine(fecha2,dtime_.time.max)
					lc= liquidacionCaja(id_caja=C,observaciones=obs,fechaDesde=fdesde,fechaHasta=fhasta,estado='liquidado')
					lc.save()
					arq_con= porcentaje_liquidacion.objects.all().values('pk')
					arq = porcentaje_liquidacion.objects.get(pk=arq_con[0]['pk'])
					lc.tipo_caja = arq.tipo_caja
					lc.prj_caja = arq.prj_caja
					lc.prj_oficina_central = arq.prj_oficina_central
					lc.prj_otra_oficina = arq.prj_otra_oficina
					lc.save()
					TCajaDebe.objects.filter(id_caja=C.pk,tablaRelacional='SolicitudTransferencia',moneda='soles',fecha__range=(fhoramin,fhoramax)).exclude(aux2__startswith='bal').update(aux2='bal'+str(lc.pk))
					TCajaDebe.objects.filter(id_caja=C.pk,tablaRelacional='SolicitudTransferencia',moneda='dolares',fecha__range=(fhoramin,fhoramax)).exclude(aux2__startswith='bal').update(aux2='bal'+str(lc.pk))
					TCajaDebe.objects.filter(id_caja=C.pk,tablaRelacional='SolicitudTransferenciaBancoa',moneda='soles',fecha__range=(fhoramin,fhoramax)).exclude(aux2__startswith='bal').update(aux2='bal'+str(lc.pk))
					TCajaHaber.objects.filter(id_caja=C.pk,fecha__range=(fhoramin,fhoramax),moneda='soles',tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia').exclude(aux2__startswith='bal').update(aux2='bal'+str(lc.pk))
					TCajaHaber.objects.filter(id_caja=C.pk,fecha__range=(fhoramin,fhoramax),moneda='dolares',tablaRelacional='PagoTransferencia',conceptoDetalle='Pago transferencia').exclude(aux2__startswith='bal').update(aux2='bal'+str(lc.pk))
					exito='exito'
				else:
					exito='Rango de fechas incorrecto'
			else:
				exito='Rango de fechas incorrecto'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	data= json.dumps({'exito':exito})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def LiquidacionBase_admin_view(request):
	exito = request.POST.get('exito','')
	return render(request,"LiquidarBase_admin.html",{'resultado':exito})

@login_required
@transaction.atomic
def GurdarPorcentajeLiquidacion_view(request):
	exito=''
	tipo = request.GET.get('tc')
	ofi = request.GET.get('po','0')
	central = request.GET.get('pc','0')
	otra = request.GET.get('pe','0')
	try:
		with transaction.atomic():
			arq_con= porcentaje_liquidacion.objects.all().values('pk')
			arq = porcentaje_liquidacion.objects.get(pk=arq_con[0]['pk'])
			arq.tipo_caja = tipo
			arq.prj_caja = ofi
			arq.prj_oficina_central = central
			arq.prj_otra_oficina = otra
			arq.save()
			exito='exito'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	data= json.dumps({'exito':exito})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#----- transferencias de bancos
@login_required
@transaction.atomic
def CrearTransferenciaBancos_view(request):
	nroCtaBanco=request.POST.get('NroCta','')
	idCliente=request.POST.get('IdCliente','')#capturamos los atributos del formulario
	idBeneficiado=request.POST.get('IdBeneficiado','')#capturamos los atributos del formulario
	TipoPersona=request.POST.get('TipoPersona')
	DniRucCliente= request.POST.get('DniRucCln','')
	NombreCliente= request.POST.get('NombreCln')
	A_paternoCliente= request.POST.get('PaternoCln')
	A_maternoCliente= request.POST.get('MaternoCln')
	#DireccionCliente= request.POST.get('DireccionCln')
	TipoPersonaBen=request.POST.get('TipoPersonaB')
	DniRucBen= request.POST.get('DniRucB','')
	NombreBenef= request.POST.get('NombreBnf')
	A_paternoBenef= request.POST.get('PaternoBnf')
	A_maternoBenef = request.POST.get('MaternoBnf')
	celular = request.POST.get('CelularBnf','')
	celularCli = request.POST.get('CelularCli','')
	Monto= request.POST.get('Monto')
	Comicion = request.POST.get('comision')
	Observaciones = request.POST.get('obs','')
	banco = request.POST.get('banco','')
	operacion = request.POST.get('operacion','')
	es_agente = request.POST.get('es_agente','')
	bnc_clave = request.POST.get('clave','')
	celularRef = request.POST.get('CelularRef','')
	montoconcepto= request.POST.get('MontoConcepto')#comision banco
	conceptoDetalle= request.POST.get('conceptoDet','')
	transac_= request.POST.get('transac')
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	usr=request.user.username
	recibo_obs=''
	recibo_det=conceptoDetalle
	ODes= ''
	txtbanco= ''
	ODir=''
	idSTRecibo=''
	soliAp=''
	soli=''
	beneAp=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	transac=''
	canti=0
	obsvino=''
	aux_sms = ''
	exito='' 
	C= Cajas.objects.get(id_usuario__usuario=usr)
	#li_ctas_banco_pri = list(Entidad_Bancaria_caja.objects.filter(estado=True).values('pk','entidad'))
	if NombreBenef != None:
		if montoconcepto ==''or montoconcepto == None:
			montoconcepto=0
		else:
			montoconcepto = ConvertirDecimal(montoconcepto)

		if operacion =='':
			operacion=0
		else:
			operacion = int(operacion)
		try:
			with transaction.atomic():

				es_op_agente = es_agente=='si'

				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt

					bene=NombreBenef
					beneAp=A_paternoBenef+' '+A_maternoBenef
					soli=NombreCliente
					soliAp=A_paternoCliente+' '+A_maternoCliente
					#*********
					if idCliente == '' or idCliente== None:
						sq= Cliente.objects.filter(nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente).values('pk')
						if sq.count()==0:
							cln = Cliente(dni=DniRucCliente,nombre=NombreCliente,Apellido_paterno=A_paternoCliente,Apellido_materno=A_maternoCliente,tipo_persona=TipoPersona,idCaja=C.pk)
							cln.save()
							idCliente = str(cln.pk)
						else:
							lista5= list(sq)
							idCliente= str(lista5[0]['pk'])
					if idBeneficiado == '' or idBeneficiado== None:
						sqb=Cliente.objects.filter(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef).values('pk')
						if sqb.count()==0:
							cln = Cliente(dni=DniRucBen,nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef,tipo_persona=TipoPersonaBen,idCaja=C.pk)
							cln.save()
							idBeneficiado = str(cln.pk)
						else:
							lista5= list(sqb)
							idBeneficiado= str(lista5[0]['pk'])
					#else:
					#	Cliente.objects.select_for_update().filter(id=idBeneficiado).update(nombre=NombreBenef,Apellido_paterno=A_paternoBenef,Apellido_materno=A_maternoBenef)

					Comi= ConvertirDecimal(Comicion)
					
					CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					if Comi >= CE.comision_minima and montoconcepto >= CE.otros_conceptos_minimo:
						if len(banco.split('*'))==1:
							banco = banco.split('*')[0]
							comi1=str(Comicion)
							Cantidad= ConvertirDecimal(Monto)
							capi1=str(Monto)
							otros1=str(montoconcepto)
							Ingres= Cantidad+Comi+montoconcepto
							canti=str(Ingres)
							C = Cajas.objects.get(id_usuario__usuario=usr)
							cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
							idSaldo= str(cons_saldo.pk)
							SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
							SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)

							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							numeroR = int(Nrecibo.nroST)+1
							nroReci=numeroR
							NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroST=numeroR)
							#----
							C1= Cajas.objects.get(pk=C.pk)#origen
							O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
							Cli= Cliente.objects.get(pk=idCliente)
							
							transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferenciaBancoa',conceptoDetalle='transferencias banco',tipoDocumento='S/T',cantidadDinero=Ingres,moneda='soles',observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
							transferencia.save()
							idCajaD=transferencia.pk
							tipo_ope='giro'
							if len(nroCtaBanco)>8:
								tipo_ope='deposito'
							Stransferencia= SolicitudTransferenciaBancoa(idCajaDebe=transferencia,id_cliente=Cli,comision=Comi,monto=Cantidad,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,paterno_beneficiado=A_paternoBenef,materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,id_beneficiario=idBeneficiado,nroCta=nroCtaBanco,banco=banco,clave=bnc_clave,tipo_operacion=tipo_ope,cel_referencia=celularRef,estado_transferencia='activo',id_operacion=operacion, es_agente=es_op_agente)
							Stransferencia.save()

							if len(nroCtaBanco)>0:
								CliB= Cliente.objects.get(pk=idBeneficiado)
								if not cta_bancos.objects.filter(id_cliente=idBeneficiado,cta_dni=nroCtaBanco).exists():
									cbanco = cta_bancos(id_cliente=CliB,banco=banco,cel_referencia=celularRef,cta_dni=nroCtaBanco,tipo_operacion=tipo_ope)
									cbanco.save()

							idSTRecibo=Stransferencia.pk

							saldo= SaldoSoles+Ingres
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo)

							if celular != None and celular!="":
								Cliente.objects.filter(pk=idBeneficiado).update(telefono=celular)

							if celularCli != None and celularCli!="":
								Cliente.objects.filter(pk=idCliente).update(telefono=celularCli)
							
							exito='exito'
						else:
							pkb = banco.split('*')[1]
							eb =banco.split('*')[0]
							if Entidad_Bancaria_caja.objects.filter(pk=pkb,entidad=eb,estado=True).exists():
								entidad = Entidad_Bancaria_caja.objects.get(pk=pkb,entidad=eb,estado=True)

								banco = eb
								comi1=str(Comicion)
								Cantidad= ConvertirDecimal(Monto)
								capi1=str(Monto)
								otros1=str(montoconcepto)
								Ingres= Cantidad+Comi+montoconcepto
								canti=str(Ingres)
								C = Cajas.objects.get(id_usuario__usuario=usr)
								cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)#.values('pk','saldo_dolares','saldo_soles'))
								idSaldo= str(cons_saldo.pk)
								SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
								SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
								
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroST)+1
								nroReci=numeroR
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroST=numeroR)
								#----
								C1= Cajas.objects.get(pk=C.pk)#origen
								O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
								Cli= Cliente.objects.get(pk=idCliente)
								
								transferencia= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='SolicitudTransferenciaBancoa',conceptoDetalle='transferencias banco',tipoDocumento='S/T',cantidadDinero=Ingres,moneda='soles',observaciones=Observaciones,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=O1,id_caja=C1,aux1='n',aux2='activo')
								transferencia.save()
								idCajaD=transferencia.pk
								tipo_ope='giro'
								if len(nroCtaBanco)>8:
									tipo_ope='deposito'
								Stransferencia= SolicitudTransferenciaBancoa(idCajaDebe=transferencia,id_cliente=Cli,comision=Comi,monto=Cantidad,dni_beneficiado=DniRucBen,nombre_beneficiado=NombreBenef,paterno_beneficiado=A_paternoBenef,materno_beneficiado=A_maternoBenef,observaciones=Observaciones,otros_conceptos=conceptoDetalle,monto_conceptos=montoconcepto,id_beneficiario=idBeneficiado,nroCta=nroCtaBanco,banco=banco,clave=bnc_clave,tipo_operacion=tipo_ope,cel_referencia=celularRef,estado_transferencia='activo',es_privado=True,id_banco=pkb, id_operacion=operacion, es_agente=es_op_agente)
								Stransferencia.save()
								if len(nroCtaBanco)>0:
									CliB= Cliente.objects.get(pk=idBeneficiado)
									if not cta_bancos.objects.filter(id_cliente=idBeneficiado,cta_dni=nroCtaBanco).exists():
										cbanco = cta_bancos(id_cliente=CliB,banco=banco,cel_referencia=celularRef,cta_dni=nroCtaBanco,tipo_operacion=tipo_ope)
										cbanco.save()
									
								idSTRecibo=Stransferencia.pk

								saldo= SaldoSoles+Ingres
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo)
								

								#*******
								if celular != None and celular!="":
									Cliente.objects.filter(pk=idBeneficiado).update(telefono=celular)

								if celularCli != None and celularCli!="":
									Cliente.objects.filter(pk=idCliente).update(telefono=celularCli)
								
								exito='exito'
							else:
								exito='error en banco privado o configuracion'

					else:
						exito=' Comision u Otros Conceptos demasiado bajo... comuniquese con el gerente'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except:
			if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
				CTG.save()
				transac='1'
			else:
				cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
				transac='1'
			exito='fail1'+ str(sys.exc_info()[1])
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	return render(request,"CrearTransBancos.html",{"transac":transac,"resultado":exito,"cargo":cargo,"idST":idSTRecibo,"oficinaRecibo":C.id_oficina.nombre_oficina,"montoRecibo":canti,"comisionRecibo":comi1,"capitalRecibo":capi1,"otrosRecibo":otros1,"nrorecibo":nroReci,"bene":bene,"beneAp":beneAp,"soli":soli,"soliAp":soliAp,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'recibo_obs':recibo_obs,'recibo_det':recibo_det,'celular':celular,'banco':banco,'nrocta':nroCtaBanco} )

def vericar_autorizacion_st_bancos(C,tabla,opfecha, st):
	config_ge= ConfiguracionExtra_caja.objects.get(id_caja=C.pk)
	#print(" delta ",opfecha)
	#ExtornoTransferenciaBancos
	#TransferenciaBancoProcesado

	delta = dtime_.datetime.today()- opfecha
	if tabla == 'ExtornoTransferenciaBancos':
		if SolicitudDesbloqueoSTBancos.objects.filter(id_solicitud=st.pk,tabla=tabla, id_caja= C.pk).exists():
			solicitud_des = SolicitudDesbloqueoSTBancos.objects.get(id_solicitud=st.pk,tabla=tabla, id_caja= C.pk)
			if solicitud_des.id_oficina.pk == C.id_oficina.pk and solicitud_des.id_caja.pk==C.pk and solicitud_des.id_personal.pk == C.id_usuario.pk:
				return solicitud_des.estadoAutorizacion == "autorizado" and solicitud_des.activo
			else:
				solicitud_des = SolicitudDesbloqueoSTBancos(id_solicitud=st,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,tabla=tabla,estadoAutorizacion="pendiente")
				solicitud_des.save()
				return False
		else:
			solicitud_des = SolicitudDesbloqueoSTBancos(id_solicitud=st,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,tabla=tabla,estadoAutorizacion="pendiente")
			solicitud_des.save()
			return False
	else:
		if delta.days <= 2:
			return True
		else:
			if SolicitudDesbloqueoSTBancos.objects.filter(id_solicitud=st.pk,tabla=tabla, id_caja= C.pk).exists():
				solicitud_des = SolicitudDesbloqueoSTBancos.objects.get(id_solicitud=st.pk,tabla=tabla, id_caja= C.pk)
				if solicitud_des.id_oficina.pk == C.id_oficina.pk and solicitud_des.id_caja.pk==C.pk and solicitud_des.id_personal.pk == C.id_usuario.pk:
					return solicitud_des.estadoAutorizacion == "autorizado" and solicitud_des.activo
				else:
					solicitud_des = SolicitudDesbloqueoSTBancos(id_solicitud=st,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,tabla=tabla,estadoAutorizacion="pendiente")
					solicitud_des.save()
					return False
			else:
				solicitud_des = SolicitudDesbloqueoSTBancos(id_solicitud=st,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,tabla=tabla,estadoAutorizacion="pendiente")
				solicitud_des.save()
				return False

def actualizar_autorizacion_st_bancos(tabla,pkst,pk_caja):
	if SolicitudDesbloqueoSTBancos.objects.filter(id_solicitud=pkst,tabla=tabla, id_caja=pk_caja).exists():
		solicitud_des = SolicitudDesbloqueoSTBancos.objects.get(id_solicitud=pkst,tabla=tabla, id_caja=pk_caja)
		solicitud_des.estadoAutorizacion = 'utilizado'
		solicitud_des.fecha_op = datetime.now()
		solicitud_des.save()
	return True

@login_required
@transaction.atomic
def autorizar_trans_banco_fetch_view(request):
	data=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		idSoli=request.GET.get('idSoli')
		RST=request.GET.get('norReciboST')
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				if SolicitudDesbloqueoSTBancos.objects.filter(pk=idSoli,id_solicitud=idTr,id_solicitud__idCajaDebe__nroRecibo=RST,estadoAutorizacion='pendiente',activo=True).exists():
					solicitud = SolicitudDesbloqueoSTBancos.objects.get(pk=idSoli,id_solicitud=idTr,id_solicitud__idCajaDebe__nroRecibo=RST,estadoAutorizacion='pendiente',activo=True)
					solicitud.estadoAutorizacion = 'autorizado'
					solicitud.fecha_aut = datetime.now()
					solicitud.save()
					data='exito'
				else:
					data='Error en solicitud, verifique si corresponde'
				
		except:
			data='fail s'+ str(sys.exc_info()[1])
	else:
		data="fail ex"
	d= {'exito':data}
	d= json.dumps(d)
	mimetype="application/json"
	return HttpResponse(d,mimetype)

"""
@login_required
@transaction.atomic
def ProcesarTransferenciaBancos_view(request):
	pkST=request.POST.get('pk')
	nro_ope=request.POST.get('nro_ope','')
	nro_giro=request.POST.get('nro_giro','')
	clave=request.POST.get('clave','')
	obs=request.POST.get('obs','')
	conf_ca = {'ban':2,'bcp':4,'int':102,'otr':73,'sco':171,'gir':234,'rbc':289,'dbc':285,'caj':288,'bbv':287,'d-i':286,'d-s':284,'jbc':320}#id cuentas ctes capitales
	usr=request.user.username

	exito='' 
	C= Cajas.objects.get(id_usuario__usuario=usr)
	
	if pkST != None and pkST != '':
		try:
			with transaction.atomic():
				solicitud= SolicitudTransferenciaBancoa.objects.get(pk=pkST)
				if solicitud.estado_transferencia == "activo":
					procesar = TransferenciaBancoProcesado(id_solicitud_transferencia=solicitud,id_personal=C.id_usuario,id_caja=C,observaciones=obs)
					procesar.save()
					solicitud.nro_operacion=nro_ope
					solicitud.nro_giro=nro_giro
					solicitud.clave=clave
					solicitud.estado_transferencia="procesado"
					solicitud.save()
					# procesado de otras oficinas
					#if Oficina.objects.filter(categoria_oficina="central").exists():
					#	o_c=Oficina.objects.get(categoria_oficina='central')
					#	if solicitud.idCajaDebe.id_oficina.pk != o_c.pk:
					#		es transferencia de otra oficina, aparte de central
					bnc = solicitud.banco[:3].lower()
					if bnc in conf_ca:
						#realizar el deposito
						id_cta = conf_ca[bnc]
						Ingres = float(solicitud.monto)
						cta=None
						if CtaCte.objects.filter(pk=id_cta,estado='activo').exists():
							cta= CtaCte.objects.get(pk=id_cta,estado='activo')
						else:
							cta= CtaCte.objects.get(pk=id_cta,estado='depositos')
						moneda = cta.moneda
						#nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
						#dni=cta.id_cliente.dni
						#Monto=Ingres
						#Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						#numeroR = int(Nrecibo.nroRI)+1
						#nroRe=numeroR
						#solo para soles por ahora
						concepto= 'Transferencia banco para '+ solicitud.nombre_beneficiado+' '+solicitud.paterno_beneficiado
						movimiento= CtaCteMovimientos(id_ctacte=cta,idDebeHaber=-1,tabla='DepositoCtaMTransferenciaProcesado',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos='Deposito sin ingreso de dinero',moneda=moneda,conceptoDetalle=concepto)
						movimiento.save()
						#saldo_cta= str(float(cta.saldo)+Ingres)
						aux= CtaCte.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
						#NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
						deposito_pro = DepositoCtaMTransferenciaProcesado(id_procesado=procesar,id_movimiento=movimiento,id_caja = C,id_personal=C.id_usuario,id_oficina=C.id_oficina,estado='activo')
						deposito_pro.save()
						exito ='exito'
					else:
						exito='Error operacion cuenta'
					#	else:
					#		exito ='exito'
					#else:
					#	exito='exito'
				else:
					exito= 'Transferencia ya esta procesada'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail '+ str(sys.exc_info()[1])

	return render(request,"procesarTransBancos.html",{"resultado":exito} )

"""
@login_required
@transaction.atomic
def ProcesarTransferenciaBancos_view(request):
	pkST=request.POST.get('pk')
	nro_st=request.POST.get('norReciboST')
	nro_ope=request.POST.get('nro_ope','')
	nro_giro=request.POST.get('nro_giro','')
	clave=request.POST.get('clave','')
	obs=request.POST.get('obs','')
	comi_bcp=request.POST.get('comision_bcp','0')
	transac_= request.POST.get('transac')
	tipo_ope=request.POST.get('tipo_ope','')
	n_letras= 'SON '+request.POST.get('n_letras','')

	usr=request.user.username
	fechaActual = datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.now().strftime("%H:%M:%S")
	conf_ca = {}
	co_bcp =0
	uri=''
	ofiRecibo =''
	ODes= ''
	txtbanco= ''
	opRecibo =''
	ODir=''
	idSTRecibo=''
	soliAp=''
	soli=''
	beneAp=''
	bene=''
	nroReci=''
	comi1=0
	capi1=0
	otros1=0
	cargo =''
	canti=0
	obsvino=''
	aux_sms = ''
	recibo_obs=''
	recibo_det=''
	celular=''
	banco=''
	nroCtaBanco=''
	tipoOperacionDet = ''
	tipoOperacion=''
	es_sunat=''
	re_serie=''
	re_correlativo =''
	re_fecha_tz=''
	re_nletras=''
	re_tipo=''
	re_ruc=''
	#--------
	re_e_ruc = ''
	re_e_razon = ''
	re_e_depa = ''
	re_e_pro = ''
	re_e_dis = ''
	re_e_dir = ''
	exito=''
	check_fe ='no'
	C= Cajas.objects.get(id_usuario__usuario=usr)
	if CajaSunat.objects.filter(id_caja=C.pk,estado=True).exists():
		check_fe ='si'

	transac=''
	if pkST != None and pkST != '':
		try:
			with transaction.atomic():
				if comi_bcp!= None and comi_bcp != '':
					co_bcp = float(comi_bcp)
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt
					solicitud= SolicitudTransferenciaBancoa.objects.get(pk=pkST ,idCajaDebe__nroRecibo=nro_st)
					#validate duplicado
					vali_sunat = True
					if tipo_ope =='F' or tipo_ope == 'B':
						vali_sunat = round(float(solicitud.comision),2) > 0

					if tipo_ope == 'F' and len(solicitud.id_cliente.dni.strip())!=11:
						vali_sunat = False
					if vali_sunat:
						if solicitud.estado_transferencia == "activo":
							if solicitud.id_banco > 0:
							
								idSTRecibo = solicitud.pk
								ofiRecibo = solicitud.idCajaDebe.id_oficina.pk
								canti = str(solicitud.idCajaDebe.cantidadDinero)
								comi1 = str(solicitud.comision)
								capi1 = str(solicitud.monto)
								otros1 = str(solicitud.monto_conceptos)
								nroReci = solicitud.idCajaDebe.nroRecibo
								bene = solicitud.nombre_beneficiado
								beneAp = solicitud.paterno_beneficiado + ' '+ solicitud.materno_beneficiado
								soli = solicitud.id_cliente.nombre
								soliAp = solicitud.id_cliente.Apellido_paterno + ' '+solicitud.id_cliente.Apellido_materno
								recibo_obs = obs
								recibo_det = solicitud.otros_conceptos
								celular = ''
								nroCtaBanco = solicitud.nroCta
								tipoOperacion = solicitud.tipo_operacion
								txtbanco = solicitud.banco

								banco = Entidad_Bancaria_caja.objects.get(pk=solicitud.id_banco)
								cta= CtaCte_main.objects.get(pk=banco.cta)
								moneda = cta.moneda

								if vericar_autorizacion_st_bancos(C, 'TransferenciaBancoProcesado',solicitud.idCajaDebe.fecha,solicitud):
									if banco.es_agente and solicitud.es_agente:
										ope = Operacion_agente.objects.get(pk=solicitud.id_operacion)
										co_bcp = 0# agentes no deben tener comision
										"""
										if ope.es_deposito:

											Ingres = float(solicitud.monto) + co_bcp
											obs_mov ='Retiro Agente'
											if co_bcp >0:
												obs_mov ='Retiro Agente, Comision '+str(co_bcp)
											concepto= 'ST: '+banco.entidad+' - para '+ solicitud.nombre_beneficiado+' '+solicitud.paterno_beneficiado
											movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=-1,tabla='DepositoCtaTransferenciaProcesado',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos=obs_mov,moneda=moneda,conceptoDetalle=concepto,st=solicitud.pk)
											movimiento.save()

											aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
											#transferencia procesado
											procesar = TransferenciaBancoProcesado(id_solicitud_transferencia=solicitud,id_personal=C.id_usuario,id_caja=C,observaciones=obs)
											procesar.save()
											
											deposito_pro = DepositoCtaTransferenciaProcesado(id_procesado=procesar,id_movimiento=movimiento,id_caja = C,id_personal=C.id_usuario,id_oficina=C.id_oficina,estado='activo')
											deposito_pro.save()
											#************************
											solicitud.nro_operacion=nro_ope
											solicitud.nro_giro=nro_giro
											solicitud.clave=clave
											solicitud.estado_transferencia="procesado"
											solicitud.save()
											exito ='exito'
										else:
										"""
										Ingres = float(solicitud.monto) + co_bcp
										obs_mov ='Deposito Agente'
										if co_bcp >0:
											obs_mov ='Deposito Agente, Comision '+str(co_bcp)
										concepto= 'ST: '+banco.entidad+' - para '+ solicitud.nombre_beneficiado+' '+solicitud.paterno_beneficiado
										movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=-1,tabla='RetiroCtaTransferenciaProcesado',montoRetiro=Ingres,saldo=(float(cta.saldo)- Ingres),observacionesMovimientos=obs_mov,moneda=moneda,conceptoDetalle=concepto,st=solicitud.pk)
										movimiento.save()

										aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)-Ingres))
										#transferencia procesado
										procesar = TransferenciaBancoProcesado(id_solicitud_transferencia=solicitud,id_personal=C.id_usuario,id_caja=C,observaciones=obs)
										procesar.save()
										
										deposito_pro = RetiroCtaTransferenciaProcesado(id_procesado=procesar,id_movimiento=movimiento,id_caja = C,id_personal=C.id_usuario,id_oficina=C.id_oficina,estado='activo')
										deposito_pro.save()
										#************************
										solicitud.nro_operacion=nro_ope
										solicitud.nro_giro=nro_giro
										solicitud.clave=clave
										solicitud.estado_transferencia="procesado"
										solicitud.save()

										actualizar_autorizacion_st_bancos("TransferenciaBancoProcesado", solicitud.pk, C.pk)
									else:
										Ingres = float(solicitud.monto) + co_bcp
										obs_mov ='Deposito ST Banco'
										if co_bcp >0:
											obs_mov ='Deposito ST Banco, Comision '+str(co_bcp)
										concepto= 'ST: '+banco.entidad+' - para '+ solicitud.nombre_beneficiado+' '+solicitud.paterno_beneficiado
										movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=-1,tabla='DepositoCtaTransferenciaProcesado',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos=obs_mov,moneda=moneda,conceptoDetalle=concepto,st=solicitud.pk)
										movimiento.save()

										aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
										#transferencia procesado
										procesar = TransferenciaBancoProcesado(id_solicitud_transferencia=solicitud,id_personal=C.id_usuario,id_caja=C,observaciones=obs)
										procesar.save()
										
										deposito_pro = DepositoCtaTransferenciaProcesado(id_procesado=procesar,id_movimiento=movimiento,id_caja = C,id_personal=C.id_usuario,id_oficina=C.id_oficina,estado='activo')
										deposito_pro.save()
										#************************
										solicitud.nro_operacion=nro_ope
										solicitud.nro_giro=nro_giro
										solicitud.clave=clave
										solicitud.estado_transferencia="procesado"
										solicitud.save()

										actualizar_autorizacion_st_bancos("TransferenciaBancoProcesado", solicitud.pk, C.pk)
										
									if CajaSunat.objects.filter(id_caja=C.pk,estado=True).exists():
										conf_fa = CajaSunat.objects.get(id_caja=C.pk,estado=True)
										re_e_ruc = conf_fa.id_serie.id_empresa.ruc
										re_e_razon = conf_fa.id_serie.id_empresa.razon
										re_e_depa = conf_fa.id_serie.id_empresa.departamento.capitalize()
										re_e_pro = conf_fa.id_serie.id_empresa.provincia.capitalize()
										re_e_dis = conf_fa.id_serie.id_empresa.distrito.capitalize()
										re_e_dir = conf_fa.id_serie.id_empresa.direccion
										emision = getStringDateTimeTZ()
										if tipo_ope=='R':
											es_sunat ='no'
											exito ='exito'
										elif tipo_ope == 'B':
											b_co = conf_fa.id_serie.correlativo_b + 1
											#----
											dni_boleta = solicitud.id_cliente.dni.strip()
											if len(dni_boleta) != 8:
												dni_boleta = '00000000'
											#invoice
											invoice = FacturacionOperacionV1(tipo="B",
												serie=conf_fa.id_serie.serie_b,
												correlativo=b_co,
												fecha_emision=datetime.now(),
												nro_doc=dni_boleta,
												razon=solicitud.id_cliente.nombre.strip()+" "+solicitud.id_cliente.Apellido_paterno.strip()+" "+solicitud.id_cliente.Apellido_materno,
												codigo_pro="P00002",
												descripcion="SERVICIO DE DEPÓSITO A CUENTA Y PAGO DE SERVICIOS",
												m_neto=round(solicitud.comision,2),
												m_igv = 0,
												m_total= round(solicitud.comision,2),
												monto_letras = n_letras,
												idOperacion = solicitud.pk,
												tabla ="SolicitudTransferenciaBancoa",
												estado_sunat ='activo',
												fecha_tz_letras =emision,
												id_caja= C.pk,
												id_empresa = conf_fa.id_serie.id_empresa.pk)

											invoice.save()
											#-
											#conf_fa.correlativo_b = b_co
											#conf_fa.save()
											#QR
											PARAMS = {'token':"Fe1245dock.Dex"}
											todo = {"ruc": conf_fa.id_serie.id_empresa.ruc,
													"tipo": "03",
													"serie": conf_fa.id_serie.serie_b,
													"numero": b_co,
													"emision": emision,
													"igv": 0,
													"total": round(float(solicitud.comision),2),
													"clienteTipo": "1",
													"clienteNumero": dni_boleta}#dni

											api_url = "http://localhost:8000/api/v1/sale/qr"
											r = requests.post(url = api_url,params =PARAMS, data = json.dumps(todo))
											uri = ("data:" + r.headers['Content-Type'] + ";" +"base64," + base64.b64encode(r.content).decode("utf-8"))
											es_sunat ='si'
											re_serie = conf_fa.id_serie.serie_b
											re_correlativo = getSerie8Digits(b_co)
											re_fecha_tz = emision
											re_nletras = n_letras
											re_tipo="BOLETA"
											re_ruc=dni_boleta
											serie = SerieSunat.objects.filter(pk=conf_fa.id_serie.pk).update(correlativo_b=b_co)
											exito ='exito'
										elif tipo_ope == 'F':
											f_co = conf_fa.id_serie.correlativo_f + 1
											#invoice
											invoice =FacturacionOperacionV1(tipo="F",
												serie=conf_fa.id_serie.serie_f,
												correlativo=f_co,
												fecha_emision=datetime.now(),
												nro_doc=solicitud.id_cliente.dni,#ruc
												razon=solicitud.id_cliente.nombre,
												codigo_pro="P00002",
												descripcion="SERVICIO DE DEPÓSITO A CUENTA Y PAGO DE SERVICIOS",
												m_neto=round(solicitud.comision,2),
												m_igv = 0,
												m_total= round(solicitud.comision,2),
												monto_letras = n_letras,
												idOperacion = solicitud.pk,
												tabla ="SolicitudTransferenciaBancoa",
												estado_sunat ='activo',
												fecha_tz_letras =emision,
												id_caja= C.pk,
												id_empresa = conf_fa.id_serie.id_empresa.pk)
											invoice.save()
											#-
											#conf_fa.correlativo_f = f_co
											#conf_fa.save()
											PARAMS = {'token':"Fe1245dock.Dex"}
											todo = {"ruc": conf_fa.id_serie.id_empresa.ruc,
													"tipo": "01",
													"serie": conf_fa.id_serie.serie_f,
													"numero": f_co,
													"emision": emision,
													"igv": 0,
													"total": round(float(solicitud.comision),2),
													"clienteTipo": "6",
													"clienteNumero": solicitud.id_cliente.dni}#ruc

											api_url = "http://localhost:8000/api/v1/sale/qr"
											r = requests.post(url = api_url,params =PARAMS, data = json.dumps(todo))
											uri = ("data:" + r.headers['Content-Type'] + ";" +"base64," + base64.b64encode(r.content).decode("utf-8"))
											es_sunat ='si'
											re_serie = conf_fa.id_serie.serie_f
											re_correlativo = getSerie8Digits(f_co)
											re_fecha_tz = emision
											re_nletras = n_letras
											re_tipo="FACTURA"
											re_ruc=solicitud.id_cliente.dni
											serie = SerieSunat.objects.filter(pk=conf_fa.id_serie.pk).update(correlativo_f = f_co)
											exito ='exito'
										else:
											es_sunat ='no'
											exito ='exito'
									else:
										es_sunat ='no'
										exito ='exito'
								
								else:
									exito ="La transferncia no se puede procesar, solicite autorizacion al administrador"

							else:
								exito='Error en banco'
						else:
							exito= 'Transferencia esta '+ solicitud.estado_transferencia
					else:
						exito= 'No se puede emitir boleta o factura, verifique el numero de documento y monto de comisión'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except:
			exito= str(sys.exc_info()[1])
			if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
				CTG.save()
				transac='1'
			else:
				cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
				transac='1'
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	return render(request,"TransferenciasBancosProcesar.html",{"resultado":exito,"transac":transac,'uri_qr':uri,"idST":idSTRecibo,"oficinaRecibo":ofiRecibo,"montoRecibo":canti,"comisionRecibo":comi1,"capitalRecibo":capi1,"otrosRecibo":otros1,"nrorecibo":nroReci,"bene":bene,"beneAp":beneAp,"soli":soli,"soliAp":soliAp,"horaRecibo":horaActual,"fechaRecibo":fechaActual,'recibo_obs':recibo_obs,'recibo_det':recibo_det,'celular':celular,'banco':txtbanco,'nrocta':nroCtaBanco,'tipoOpDet':tipoOperacionDet,'nro_ope':nro_ope,'nOoeracion':opRecibo,'tipoOp':tipoOperacion.upper(),'es_sunat':es_sunat,'re_serie':re_serie,'re_correlativo':re_correlativo,'re_fecha_tz':re_fecha_tz,'re_nletras':re_nletras,'re_tipo':re_tipo,'re_ruc':re_ruc,'re_e_ruc':re_e_ruc,'re_e_razon':re_e_razon,'re_e_depa':re_e_depa,'re_e_pro':re_e_pro,'re_e_dis':re_e_dis,'re_e_dir':re_e_dir,'check_fe':check_fe} )


@login_required
@transaction.atomic
def ProcesarTransferenciaBancos_ajax_view(request):
	pkST=request.GET.get('pk')
	nro_st=request.GET.get('norReciboST')
	nro_ope=request.GET.get('nro_ope','')
	nro_giro=request.GET.get('nro_giro','')
	clave=request.GET.get('clave','')
	obs=request.GET.get('obs','')
	comi_bcp=request.GET.get('comision_bcp','0')


	#conf_ca = {'ban':2,'bcp':4,'int':102,'otr':73,'sco':171}#id cuentas ctes capitales
	usr=request.user.username
	conf_ca = {}
	co_bcp =0
	exito='' 
	C= Cajas.objects.get(id_usuario__usuario=usr)
	
	if pkST != None and pkST != '':
		try:
			with transaction.atomic():
				if comi_bcp!= None and comi_bcp != '':
					co_bcp = float(comi_bcp)
				solicitud= SolicitudTransferenciaBancoa.objects.get(pk=pkST ,idCajaDebe__nroRecibo=nro_st)
				if solicitud.estado_transferencia == "activo":
					if solicitud.id_banco > 0:
						banco = Entidad_Bancaria_caja.objects.get(pk=solicitud.id_banco)
						cta= CtaCte_main.objects.get(pk=banco.cta)
						moneda = cta.moneda
						if vericar_autorizacion_st_bancos(C, 'TransferenciaBancoProcesado',solicitud.idCajaDebe.fecha,solicitud):
							if banco.es_agente and solicitud.es_agente:
								ope = Operacion_agente.objects.get(pk=solicitud.id_operacion)
								co_bcp = 0# agentes no deben tener comision
								"""
								if ope.es_deposito:

									Ingres = float(solicitud.monto) + co_bcp
									obs_mov ='Retiro Agente'
									if co_bcp >0:
										obs_mov ='Retiro Agente, Comision '+str(co_bcp)
									concepto= 'ST: '+banco.entidad+' - para '+ solicitud.nombre_beneficiado+' '+solicitud.paterno_beneficiado
									movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=-1,tabla='DepositoCtaTransferenciaProcesado',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos=obs_mov,moneda=moneda,conceptoDetalle=concepto,st=solicitud.pk)
									movimiento.save()

									aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
									#transferencia procesado
									procesar = TransferenciaBancoProcesado(id_solicitud_transferencia=solicitud,id_personal=C.id_usuario,id_caja=C,observaciones=obs)
									procesar.save()
									
									deposito_pro = DepositoCtaTransferenciaProcesado(id_procesado=procesar,id_movimiento=movimiento,id_caja = C,id_personal=C.id_usuario,id_oficina=C.id_oficina,estado='activo')
									deposito_pro.save()
									#************************
									solicitud.nro_operacion=nro_ope
									solicitud.nro_giro=nro_giro
									solicitud.clave=clave
									solicitud.estado_transferencia="procesado"
									solicitud.save()
									exito ='exito'
								else:
								"""
								Ingres = float(solicitud.monto) + co_bcp
								obs_mov ='Deposito Agente'
								if co_bcp >0:
									obs_mov ='Deposito Agente, Comision '+str(co_bcp)
								concepto= 'ST: '+banco.entidad+' - para '+ solicitud.nombre_beneficiado+' '+solicitud.paterno_beneficiado
								movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=-1,tabla='RetiroCtaTransferenciaProcesado',montoRetiro=Ingres,saldo=(float(cta.saldo)- Ingres),observacionesMovimientos=obs_mov,moneda=moneda,conceptoDetalle=concepto,st=solicitud.pk)
								movimiento.save()

								aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)-Ingres))
								#transferencia procesado
								procesar = TransferenciaBancoProcesado(id_solicitud_transferencia=solicitud,id_personal=C.id_usuario,id_caja=C,observaciones=obs)
								procesar.save()
								
								deposito_pro = RetiroCtaTransferenciaProcesado(id_procesado=procesar,id_movimiento=movimiento,id_caja = C,id_personal=C.id_usuario,id_oficina=C.id_oficina,estado='activo')
								deposito_pro.save()
								#************************
								solicitud.nro_operacion=nro_ope
								solicitud.nro_giro=nro_giro
								solicitud.clave=clave
								solicitud.estado_transferencia="procesado"
								solicitud.save()

								actualizar_autorizacion_st_bancos("TransferenciaBancoProcesado", solicitud.pk, C.pk)
								exito ='exito'
							else:
								Ingres = float(solicitud.monto) + co_bcp
								obs_mov ='Deposito ST Banco'
								if co_bcp >0:
									obs_mov ='Deposito ST Banco, Comision '+str(co_bcp)
								concepto= 'ST: '+banco.entidad+' - para '+ solicitud.nombre_beneficiado+' '+solicitud.paterno_beneficiado
								movimiento= CtaCteMovimientos_main(id_ctacte=cta,idDebeHaber=-1,tabla='DepositoCtaTransferenciaProcesado',montoDeposito=Ingres,saldo=(float(cta.saldo)+Ingres),observacionesMovimientos=obs_mov,moneda=moneda,conceptoDetalle=concepto,st=solicitud.pk)
								movimiento.save()

								aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+Ingres))
								#transferencia procesado
								procesar = TransferenciaBancoProcesado(id_solicitud_transferencia=solicitud,id_personal=C.id_usuario,id_caja=C,observaciones=obs)
								procesar.save()
								
								deposito_pro = DepositoCtaTransferenciaProcesado(id_procesado=procesar,id_movimiento=movimiento,id_caja = C,id_personal=C.id_usuario,id_oficina=C.id_oficina,estado='activo')
								deposito_pro.save()
								#************************
								solicitud.nro_operacion=nro_ope
								solicitud.nro_giro=nro_giro
								solicitud.clave=clave
								solicitud.estado_transferencia="procesado"
								solicitud.save()

								actualizar_autorizacion_st_bancos("TransferenciaBancoProcesado", solicitud.pk, C.pk)
								exito ='exito'
						else:
							exito='La transferncia no se puede procesar, solicite autorizacion al administrador'
					else:
						exito='Error en banco'
				else:
					exito= 'Transferencia esta '+ solicitud.estado_transferencia
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito = "Error en operacion"
	data= json.dumps({'exito':exito})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def extornarTransBanco_fetch_view(request):
	exito=''
	idTr=request.GET.get('pk')
	RST=request.GET.get('norReciboST')
	obsp=request.GET.get('obs','')
	usr= request.user.username
	try:
		with transaction.atomic():
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if SolicitudTransferenciaBancoa.objects.filter(pk=idTr,idCajaDebe__id_caja=C.pk, idCajaDebe__nroRecibo=RST).exists():
				con_st= SolicitudTransferenciaBancoa.objects.get(pk=idTr,idCajaDebe__id_caja=C.pk, idCajaDebe__nroRecibo=RST)
				idTcajaD= str(con_st.idCajaDebe.pk)
				conceptoDetall= 'Extornado de trasnferencia'
				Moneda= str(con_st.idCajaDebe.moneda)
				Csaldo= SaldoDisponibleCajas.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).values('pk','saldo_dolares','saldo_soles')
				cons_saldo= list(Csaldo)
				idSaldo= str(cons_saldo[0]['pk'])

				SaldoSoles= ConvertirDecimal(cons_saldo[0]['saldo_soles'])
				SaldoDolares= ConvertirDecimal(cons_saldo[0]['saldo_dolares'])
				MontoEgreso=ConvertirDecimal(con_st.idCajaDebe.cantidadDinero)
				#delta= datetime.now() - con_st.idCajaDebe.fecha
				if con_st.estado_transferencia == 'activo':
					if Moneda=='soles':
						if vericar_autorizacion_st_bancos(C, 'ExtornoTransferenciaBancos',con_st.idCajaDebe.fecha,con_st):
							if not con_st.es_privado:
								if SaldoSoles >= MontoEgreso:
									if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
										TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
										saldoEgreso=SaldoSoles-MontoEgreso
										Csaldo.update(saldo_soles=saldoEgreso)
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoTransferenciaBanco',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										
										EST=ExtornoTransferenciaBancos(idCajaHaber=CajaH,id_solicitud_transferencia=con_st,observaciones=obsp)
										EST.save()
										con_st.estado_transferencia='extornado'
										con_st.save()
										actualizar_autorizacion_st_bancos("ExtornoTransferenciaBancos", con_st.pk, C.pk)
										exito="exito"
									else:
										exito = "error en la operacion, verifique estado de transaccion"
								else:
									exito="saldo insuficiente"
							else:
								CE= ConfiguracionExtra_caja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								if CE.trans_banco_pri =='si' and Entidad_Bancaria_privado.objects.filter(id_caja=C.pk,entidad=con_st.banco).exists():
									if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
										TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR = int(Nrecibo.nroRE)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
										#saldoEgreso=SaldoSoles-MontoEgreso
										#Csaldo.update(saldo_soles=saldoEgreso)
										CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='ExtornoTransferenciaBanco',conceptoDetalle='Extorno de transferencia banco caja material',tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
										CajaH.save()
										
										EST=ExtornoTransferenciaBancos(idCajaHaber=CajaH,id_solicitud_transferencia=con_st,observaciones=obsp)
										EST.save()
										#--- pase d eefectivo
										saldom = SaldoDisponibleCajaMaterial.objects.get(id_caja=C.pk)
										#if (moneda =='dolares'and saldo.saldo_dolares>=monto) or (moneda =='soles'and saldo.saldo_soles>=monto):
										Nrecibo= NroReciboCajaMaterial.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroRE = int(Nrecibo.nroRE)+1
										NroReciboCajaMaterial.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroRE)
										THaber= TCajaHaberM(id_personal=C.id_usuario,tablaRelacional="ExtornoTransferenciaBanco",conceptoDetalle='Extorno de transferencia banco',tipoDocumento="R/E",cantidadDinero=MontoEgreso,moneda=Moneda,tipo_cambio=0,observaciones='',estadoTransaccion="enviado",nroRecibo=numeroRE,id_oficina=C.id_oficina,id_caja=C)
										THaber.save()
										SaldoDisponibleCajaMaterial.objects.select_for_update().filter(id_caja=C.pk).update(saldo_soles=(float(saldom.saldo_soles)-float(MontoEgreso)))
										
										
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroRI = int(Nrecibo.nroRI)+1
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroRI)
										Tdebe= TCajaDebe(id_personal= C.id_usuario,tablaRelacional='ExtornoTransferenciaBanco',conceptoDetalle='Extorno de transferencia banco caja material',tipoDocumento='R/I',cantidadDinero=MontoEgreso,moneda=Moneda,tipo_cambio=0,observaciones='',estadoTransaccion='recibido',nroRecibo=numeroRI,id_caja=C,id_oficina= C.id_oficina)
										Tdebe.save()
										#pase de fectivo
										con_st.estado_transferencia='extornado'
										con_st.save()

										actualizar_autorizacion_st_bancos("ExtornoTransferenciaBancos", con_st.pk, C.pk)

										exito="exito"
									else:
										exito = "error en la operacion, verifique estado de transaccion"
								else:
									exito="Error en banco privado"
						else:
							exito= "La transferncia no se puede extornar, solicite autorizacion al administrador"
					elif Moneda=='dolares':
						exito='La operacion esta en dolares'
						"""
						if SaldoDolares>=MontoEgreso:
							bandera=True
							if delta.days >1:
								if cod_aut !='':
									if SolicitudAutExtornoST.objects.filter(id_st=con_st.pk,estado='autorizado',codigo_aut=cod_aut).exists():
										bandera =True
										SolicitudAutExtornoST.objects.filter(id_st=con_st.pk,estado='autorizado',codigo_aut=cod_aut).update(fecha_extorno=datetime.now(),estado='utlizado')
									else:
										bandera=False
								else:
									bandera=False
							if bandera:
								if TCajaDebe.objects.filter(pk=idTcajaD, estadoTransaccion='activo').exists():
									TCajaDebe.objects.select_for_update().filter(pk=idTcajaD, estadoTransaccion='activo').update(estadoTransaccion='extornado')
									Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
									numeroR = int(Nrecibo.nroRE)+1
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
									saldoEgreso=SaldoDolares-MontoEgreso
									Csaldo.update(saldo_dolares=saldoEgreso)
									CajaH= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='TtransferenciaExtorno',conceptoDetalle=conceptoDetall,tipoDocumento='R/E',cantidadDinero=MontoEgreso,moneda=Moneda,estadoTransaccion='extornado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
									CajaH.save()
									#auxx=SolicitudTransferencia.objects.select_for_update().filter(pk=idTr).update(dni_beneficiado=dnib)

									OST= SolicitudTransferencia.objects.get(pk=idTr)
									EST=ExtornoTransferencia(idCajaHaber=CajaH,id_solicitud_transferencia=OST,observaciones=obsp)
									EST.save()
									#CDebe.update(estadoTransaccion='pagado')
									#TCajaDebe.objects.filter(pk=idTcajaD,estadoTransaccion='activo').update(estadoTransaccion='pagado')
									data="exito"
								else:
									data = "error en la operacion"
							else:
								data="error con codigo de autorizacion"
						else:
							data="saldo insuficiente"
						"""
					else:
						exito='fail moneda'
				else:
					exito='La transferencia ya se procesó o extornó'
				
			else:
				exito="Error en operacion"
	except IntegrityError:
		exito='intigriti '+ str(sys.exc_info()[1])
	except:
		exito='fail'+ str(sys.exc_info()[1])
	data= json.dumps({'exito':exito})
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def de_fecha_ajax_view(request):
	data=''
	try:
		with transaction.atomic():
			idCliente=''
			usr = request.user.username
			pkst=request.GET.get('pk')
			f1 = request.GET.get('f')
			fechao = dtime_.datetime.strptime(f1, '%Y-%m-%d %H:%M')
			debe = TCajaDebe.objects.filter(pk=pkst).update(fecha=fechao)
			data='exito'
	except:
		data='fail'+str(sys.exc_info()[1])

	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def autorizar_trans_fetch_view(request):
	data=''
	if request.is_ajax:
		idTr=request.GET.get('idT')
		idSoli=request.GET.get('idSoli')
		RST=request.GET.get('norReciboST')
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				if SolicitudDesbloqueoST.objects.filter(pk=idSoli,id_solicitud=idTr,id_solicitud__idCajaDebe__nroRecibo=RST,estadoAutorizacion='pendiente',activo=True).exists():
					solicitud = SolicitudDesbloqueoST.objects.get(pk=idSoli,id_solicitud=idTr,id_solicitud__idCajaDebe__nroRecibo=RST,estadoAutorizacion='pendiente',activo=True)
					solicitud.estadoAutorizacion = 'autorizado'
					solicitud.fecha_aut = datetime.now()
					solicitud.save()
					data='exito'
				else:
					data='Error en solicitud, verifique si corresponde'
				
		except:
			data='error '+ str(sys.exc_info()[1])
	else:
		data="fail ajax"
	d= {'exito':data}
	d= json.dumps(d)
	mimetype="application/json"
	return HttpResponse(d,mimetype)

@login_required
def actualizar_bd_view(request):
	data=''
	t=request.GET.get('t')
	i=request.GET.get('id')
	m=request.GET.get('monto')
	try:
		if t=='debe':
			aux = TCajaDebe.objects.filter(pk=i).update(cantidadDinero=m)
			data='exito'
		elif t=='haber':
			aux = TCajaHaber.objects.filter(pk=i).update(cantidadDinero=m)
			data='exito'
		else:
			data ='error tabla'
	except:
		data='error '+ str(sys.exc_info()[1])
	d= {'exito':data}
	d= json.dumps(d)
	mimetype="application/json"
	return HttpResponse(d,mimetype)

#-------------- send sunat
def get_template_invoice():
	invoice = {
	"ublVersion": "2.1",
	"tipoOperacion": "0101",
	"tipoDoc": "01",
	"serie": "F001",
	"correlativo": "111",
	"fechaEmision": "2021-02-06T12:34:00-05:00",
	"formaPago": {
	"tipo": "Contado"
	},
	"client": {
	"tipoDoc": "6",
	"numDoc": "20546687668",
	"rznSocial": "COMPANY SAC"
	},
	"company": {
	"ruc": "20609471256",
	"razonSocial": "INVERSIONES GOLDEN RAYS E.I.R.L.",
	"nombreComercial": "INVERSIONES GOLDEN RAYZ",
	"address": {
	"ubigueo": "170203",
	"codigoPais": "PE",
	"departamento": "MADRE DE DIOS",
	"provincia": "MANU",
	"distrito": "MADRE DE DIOS",
	"urbanizacion": "-",
	"direccion": "PJ. LAS PALMERAS MZA. 3A LOTE. F2 C.P. CENTRO POBLADO PUKIRI"
	}
	},
	"tipoMoneda": "PEN",
	"mtoOperExoneradas":100,
	"mtoIGV": 0,
	"totalImpuestos": 0,
	"valorVenta": 100,
	"subTotal": 100,
	"mtoImpVenta": 100,
	"details": [
	{
	"unidad": "NIU",
	"cantidad": 1,
	"codProducto": "P00001",
	"descripcion": "SERVICIOS DE TRANSACCIÓN DE DIVISAS AL CONTADO",
	"mtoValorUnitario": 100,
	"mtoBaseIgv": 100,
	"porcentajeIgv": 18.0,
	"igv": 0,
	"tipAfeIgv": "20",
	"totalImpuestos": 0,
	"mtoPrecioUnitario": 100,
	"mtoValorVenta": 100
	}
	],
	"legends": [
	{
	"code": "1000",
	"value": "SON CIENTO DIECIOCHO CON 00/100 SOLES"
	},
	{
	"code": "2002",
	"value": "SERVICIOS PRESTADOS EN LA AMAZONÍA REGIÓN SELVA PARA SER CONSUMIDOS EN LA MISMA"
	}
	]
	}
	return invoice
#@login_required

def save_xml(dxml,name,ruc):
	#save_path = '/home/deybis/data/django/django_imperial/deposito-seguro'
	save_path = '/home/ubuntu/sunat/2022/'+ruc
	completeName = os.path.join(save_path,name+'.xml' )
	#print(completeName)
	with open(completeName, "wb") as f:
		f.write(dxml.encode("utf-8"))
	return True
def get_zip(base_64,name,ruc):
	#save_path = '/home/deybis/data/django/django_imperial/deposito-seguro'
	save_path = '/home/ubuntu/sunat/2022/'+ruc
	completeName = os.path.join(save_path, name+'.zip')
	#print(completeName)
	b64_decode= base64.b64decode(base_64) 
	zip_result = open(completeName, 'wb') # create a writable image and write the decoding result
	zip_result.write(b64_decode)
	zip_result.close()
	return True

def enviar_sunat_invoices_view(request):
	exito=''
	if ConfigFacturacionV1.objects.filter(pk=1,estado_tareas='L').exists():#libre
		conf_aux = ConfigFacturacionV1.objects.filter(pk=1).update(estado_tareas = 'P')
		consulta = FacturacionOperacionV1.objects.filter(estado=True,estado_sunat__in=['activo','rechazado']).order_by('pk').values('pk','estado_sunat')
		if len(consulta)>0 and consulta[0]['estado_sunat']=='activo':#si es activo el primero
			try:
				for obj in consulta:
					invoice = FacturacionOperacionV1.objects.get(pk=obj['pk'])
					te_invoice = get_template_invoice()
					if invoice.tipo=='B' or invoice.tipo=='F':
						if invoice.tipo =='B':
							te_invoice['tipoDoc'] ="03"
							te_invoice['client']['tipoDoc']="1"
						if invoice.tipo =='F':
							te_invoice['tipoDoc'] ="01"
							te_invoice['client']['tipoDoc']="6"
						te_invoice['serie'] = invoice.serie
						te_invoice['correlativo']=invoice.correlativo
						te_invoice['fechaEmision']=invoice.fecha_tz_letras

						empresa = EmpresaSunat.objects.get(pk=invoice.id_empresa,estado=True)
						te_invoice['company']['ruc'] = empresa.ruc
						te_invoice['company']['razonSocial'] = empresa.razon
						te_invoice['company']['nombreComercial'] = empresa.nombre
						te_invoice['company']['address']['ubigueo'] = empresa.ubigeo
						te_invoice['company']['address']['codigoPais'] = empresa.codigo_pais
						te_invoice['company']['address']['departamento'] = empresa.departamento
						te_invoice['company']['address']['provincia'] = empresa.provincia
						te_invoice['company']['address']['distrito'] = empresa.distrito
						te_invoice['company']['address']['urbanizacion'] = empresa.urb
						te_invoice['company']['address']['direccion'] = empresa.direccion

						te_invoice['client']['numDoc']= invoice.nro_doc
						te_invoice['client']['rznSocial']= invoice.razon
						if invoice.tipo =='B' and invoice.nro_doc=='00000000':
							te_invoice['client']['rznSocial'] = 'GENERICO'
							te_invoice['client']['tipoDoc']="0"
						te_invoice['mtoOperExoneradas'] = round(float(invoice.m_total),2)
						te_invoice['valorVenta'] = round(float(invoice.m_neto),2)
						te_invoice['subTotal'] = round(float(invoice.m_total),2)
						te_invoice['mtoImpVenta'] = round(float(invoice.m_total),2)
						te_invoice['details'][0]['codProducto'] = invoice.codigo_pro
						te_invoice['details'][0]['descripcion'] = invoice.descripcion
						te_invoice['details'][0]['mtoValorUnitario'] = round(float(invoice.m_neto),2)
						te_invoice['details'][0]['mtoBaseIgv'] = round(float(invoice.m_neto),2)
						te_invoice['details'][0]['mtoPrecioUnitario'] = round(float(invoice.m_neto),2)
						te_invoice['details'][0]['mtoValorVenta'] = round(float(invoice.m_total),2)
						te_invoice['legends'][0]['value'] = invoice.monto_letras
						#print(te_invoice)
						PARAMS = {'token':"Fe1245dock.Dex"}
						api_url = "http://localhost:8000/api/v1/invoice/send"
						r = requests.post(url = api_url,params =PARAMS, data = json.dumps(te_invoice))
						if r.status_code == requests.codes.ok:
							r_data = r.json()
							#print(r_data)
							f_envi = datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
							name_xml = empresa.ruc+"-"+te_invoice['tipoDoc']+"-"+invoice.serie+"-"+str(invoice.correlativo)
							name_zip = invoice.serie+"-"+str(invoice.correlativo)+"_"+f_envi
							#print("generando xml")
							save_xml(r_data['xml'],name_xml,empresa.ruc)
							if r_data['sunatResponse']['success']:#True
								invoice.fecha_envio = datetime.now()
								invoice.estado_sunat = 'enviado'
								invoice.cdr_id = r_data['sunatResponse']['cdrResponse']['id']
								invoice.cdr_code = r_data['sunatResponse']['cdrResponse']['code']
								invoice.cdr_description = r_data['sunatResponse']['cdrResponse']['description']
								invoice.invoice_hash = r_data['hash']
								invoice.save()
								#print("generando zip")
								get_zip(r_data['sunatResponse']['cdrZip'],name_zip,empresa.ruc)
							else:
								invoice.fecha_error = datetime.now()
								invoice.errores = r_data['sunatResponse']['error']['message'][:300]
								invoice.estado_sunat = 'rechazado'
								error = ErroresFact(id_fa="0",
									codigo=r_data['sunatResponse']['error']['code'],
									descripcion=r_data['sunatResponse']['error']['message'][:250],
									notes=r_data['sunatResponse']['error']['message'][:500],
									status="200",
									serie=invoice.serie,
									correlativo=invoice.correlativo,
									ruc = empresa.ruc)
								error.save()
								invoice.save()
								break

						else:
							error = ErroresFact(descripcion="error servidor de la sunat",
								status=str(r.status_code),
								serie=invoice.serie,
								correlativo=invoice.correlativo,
								ruc = empresa.ruc)
							error.save()
							exito="Error status envio"
							break
					else:
						exito="Error tipo"
						break
					#break

			except:
				error = ErroresFact(descripcion=str(sys.exc_info()[0])[:250],
					status="0000",
					serie="0000",
					correlativo=1,
					notes=str(sys.exc_info()[1])[:500])
				error.save()
				exito='fail '+ str(sys.exc_info()[1])
				#print(exito)
		conf_aux = ConfigFacturacionV1.objects.filter(pk=1).update(estado_tareas = 'L')
	data= json.dumps({'exito':exito})
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def crear_retiro_transferencia_view(request):
	idCliente=request.POST.get('IdCliente')
	tipo_persona_cli=request.POST.get('TipoPersona')
	dni_cli=request.POST.get('DniRucCln')
	nombre_cli=request.POST.get('NombreCln')
	paterno_cli=request.POST.get('PaternoCln')
	materno_cli=request.POST.get('MaternoCln')
	celular=request.POST.get('CelularCln','')
	MontoRetiro= request.POST.get('monto')
	Comision= request.POST.get('comision','0')
	operacion = request.POST.get('operacion','')
	banco= request.POST.get('banco')
	Observacion = request.POST.get('obs','')
	transac_= request.POST.get('transac')
	chb_comi= request.POST.get('chb_comi','no')
	usr=request.user.username
	transac=''
	nombre=''
	dni=''
	exito=''
	oficinaRecibo=''
	montoRecibo=0
	comisionRecibo=0
	operacion=''
	Monto=0
	Comi=0
	Total = 0
	moneda=""
	saldo_aportes=''
	concepto=''
	nroRe=''
	fechaActual=''
	horaActual=''
	nombreRecibo=''
	ctaRecibo=''
	opRecibo =''
	bancoRecibo=''
	operacionRecibo = ''
	#-----
	#------
	C= Cajas.objects.get(id_usuario__usuario=usr)
	
	#------
	if MontoRetiro!= None and MontoRetiro !='':
		fechaActual = time.strftime("%Y-%m-%d")
		horaActual = time.strftime("%H:%M:%S")
		if operacion =='':
			operacion=0
		else:
			operacion = int(operacion)

		try:
			with transaction.atomic():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					auxt= str(confi[0]['aux1'])
					cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= auxt

					if idCliente == '' or idCliente== None:
						sq= Cliente.objects.filter(nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli).values('pk')
						if sq.count()==0:
							cln = Cliente(dni=dni_cli,nombre=nombre_cli,Apellido_paterno=paterno_cli,Apellido_materno=materno_cli,tipo_persona=tipo_persona_cli,idCaja=C.pk)
							cln.save()
							idCliente = str(cln.pk)
						else:
							lista5= list(sq)
							idCliente= str(lista5[0]['pk'])
					cli = Cliente.objects.get(pk=idCliente)
					#--
					cli.telefono = celular
					cli.save()
					#---
					nombre= cli.nombre +' '+ cli.Apellido_paterno+' '+cli.Apellido_materno
					dni=cli.dni
					egreso= ConvertirDecimal(MontoRetiro)
					ingreso= ConvertirDecimal(Comision)
					if egreso >0:

						Monto=egreso
						Comi=ingreso
						aux_banco = banco.split('*')
						banco =aux_banco[0]
						pkb = aux_banco[1]
						eb = aux_banco[0]
						#---------
						if operacion > 0:
							operacion_age = Operacion_agente.objects.get(pk=operacion)
							operacionRecibo = operacion_age.operacion

						if Entidad_Bancaria_caja.objects.filter(pk=pkb,entidad=eb,estado=True).exists():

							entidad = Entidad_Bancaria_caja.objects.get(pk=pkb)
							pk_capital = entidad.cta
							pk_comision = entidad.cta_comi

							if CtaCte_main.objects.filter(pk=pk_capital).exists():
								cta= CtaCte_main.objects.get(pk=pk_capital)

								moneda = cta.moneda
								Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								numeroR = int(Nrecibo.nroRE)+1
								nroRe=numeroR

								#solo para soles por ahora
								concepto= 'Retiro ST '+ banco+' a '+cli.nombre +' '+ cli.Apellido_paterno
								haber= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle=concepto,tipoDocumento='R/E',cantidadDinero=egreso,moneda=moneda,observaciones=Observacion,estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
								haber.save()

								movimientoCapi= CtaCteMovimientos_main(id_ctacte=cta,tabla='TCajaHaber',idDebeHaber=haber.pk,montoDeposito=egreso,saldo=(float(cta.saldo)+egreso),conceptoDetalle=concepto,observacionesMovimientos=Observacion,moneda=moneda)
								movimientoCapi.save()
								#saldo_cta=str(float(cta.saldo)-Ingres)
								aux= CtaCte_main.objects.filter(pk=cta.pk).update(saldo=(float(cta.saldo)+egreso))

								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
								
								cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
								
								if moneda == 'soles':
									SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
									saldo= SaldoSoles - egreso
									SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
								elif moneda == 'dolares':
									SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
									saldo= SaldoDolares - egreso
									SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
								
								#deposito de comision
								pk_movimiento_co =0
								if ingreso>0:
									moneda_co = moneda
									#nombre= cta.id_cliente.nombre +' '+ cta.id_cliente.Apellido_paterno+' '+cta.id_cliente.Apellido_materno
									#dni=cta.id_cliente.dni
									concepto_co= 'Deposito ST comision '+banco
									if chb_comi=='si':
										cta_co= CtaCte_main.objects.get(pk=pk_capital)
										movimiento= CtaCteMovimientos_main(id_ctacte=cta_co,tabla='RetiroTransferenciaCtaComision',idDebeHaber= -1 ,montoDeposito=ingreso,saldo=(float(cta_co.saldo)+ingreso),conceptoDetalle=concepto_co,observacionesMovimientos=Observacion,moneda=moneda)
										movimiento.save()
										pk_movimiento_co = movimiento.pk
										aux= CtaCte_main.objects.filter(pk=cta_co.pk).update(saldo=(float(cta_co.saldo)+ingreso))
									else:
										Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										numeroR= int(Nrecibo.nroRI)+1
										#solo para soles por ahora
										
										debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos_main',conceptoDetalle=concepto_co,tipoDocumento='R/I',cantidadDinero=ingreso,moneda=moneda_co,observaciones="Comision",estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
										debe.save()
										NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
										if pk_comision > 0:
											cta_co= CtaCte_main.objects.get(pk=pk_comision)
											movimiento= CtaCteMovimientos_main(id_ctacte=cta_co,tabla='TCajaDebe',idDebeHaber= debe.pk ,montoDeposito=ingreso,saldo=(float(cta_co.saldo)+ingreso),conceptoDetalle=concepto_co,observacionesMovimientos=Observacion,moneda=moneda)
											movimiento.save()
											pk_movimiento_co = movimiento.pk
											aux= CtaCte_main.objects.filter(pk=cta_co.pk).update(saldo=(float(cta_co.saldo)+ingreso))

										cons_saldo= SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
										if moneda_co == 'soles':
											SaldoSoles= ConvertirDecimal(cons_saldo.saldo_soles)
											saldo= SaldoSoles+ ingreso
											SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_soles=saldo)
										elif moneda_co == 'dolares':
											SaldoDolares= ConvertirDecimal(cons_saldo.saldo_dolares)
											saldo= SaldoDolares+ingreso
											SaldoDisponibleCajas.objects.select_for_update().filter(pk= cons_saldo.pk).update(saldo_dolares=saldo)
								#------------------------
								retiroTrans = RetiroTransferenciaCta(id_personal=C.id_usuario,id_oficina=C.id_oficina,id_caja=C,id_cliente=cli,tabla_capita="CtaCte_main",id_capital=cta.pk,tabla_comi="CtaCte_main",id_comi=pk_comision,monto=egreso,comision=ingreso,banco=banco,observaciones=Observacion[:85]+" | "+celular,estado="activo",conceptoDetalle=concepto,tabla_capita_mov="CtaCteMovimientos_main",id_capital_mov=movimientoCapi.pk, tabla_comi_mov="CtaCteMovimientos_main", id_comi_mov=pk_movimiento_co, tipo_doc="R/E",nro_re=nroRe)
								retiroTrans.save()
								#-------------------------
								exito='exito'
							else:
								exito='Operacion Rechazada'
						else:
							exito='Operacion Rechazada Entidad'
					else:
						exito='Monto de retiro o comision incorrectos'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		except:
			exito='fail1'+ str(sys.exc_info()[1])
			if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
				CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
				CTG.save()
				transac='1'
			else:
				cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
				transac='1'
	else:
		if not conf_permisos_Cajas.objects.filter(id_caja=C.pk).exists():
			CTG= conf_permisos_Cajas(id_caja=C,aux1='0')
			CTG.save()
			transac='1'
		else:
			cnc=conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1='0')
			transac='1'
	return render(request,"CrearRetiroBancos.html",{"resultado":exito,"operacionRecibo":operacionRecibo,"obs":Observacion,"nombreRecibo":nombre,"ctaRecibo":ctaRecibo,"dniRecibo":dni,"nroRecibo":nroRe,"montoRecibo":Monto,"comision":Comi,"monedaRecibo":moneda,"conceptoDetalleRecibo":concepto,"horaRecibo":horaActual,"fechaRecibo":fechaActual,"transac":transac} )

def vericar_autorizacion_cta_main(C,tabla, cta, monto, moneda):
	#Retiro_Cta_Cte
	#delta = dtime_.datetime.today()- opfecha
	if SolicitudDesbloqueoCtaCteMovimientos_main.objects.filter(id_ctacte=cta.pk,tabla=tabla, id_caja= C.pk,monto_operacion=monto, moneda=moneda, estadoAutorizacion__in=['pendiente','autorizado']).exists():
		if SolicitudDesbloqueoCtaCteMovimientos_main.objects.filter(id_ctacte=cta.pk,tabla=tabla, id_caja= C.pk,monto_operacion=monto, moneda=moneda, estadoAutorizacion ='pendiente').exists():
			return False
		else:
			solicitud_des = SolicitudDesbloqueoCtaCteMovimientos_main.objects.get(id_ctacte=cta.pk,tabla=tabla, id_caja= C.pk, monto_operacion=monto, moneda=moneda, estadoAutorizacion ='autorizado')
			if solicitud_des.id_oficina.pk == C.id_oficina.pk and solicitud_des.id_caja.pk==C.pk and solicitud_des.id_personal.pk == C.id_usuario.pk:
				return solicitud_des.estadoAutorizacion == "autorizado" and solicitud_des.activo
			else:
				solicitud_des = SolicitudDesbloqueoCtaCteMovimientos_main(id_ctacte=cta,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,monto_operacion=monto,moneda=moneda,tabla=tabla,estadoAutorizacion="pendiente")
				solicitud_des.save()
				return False
	else:
		solicitud_des = SolicitudDesbloqueoCtaCteMovimientos_main(id_ctacte=cta,id_oficina=C.id_oficina,id_caja=C,id_personal=C.id_usuario,monto_operacion=monto,moneda=moneda,tabla=tabla,estadoAutorizacion="pendiente")
		solicitud_des.save()
		return False

def actualizar_autorizacion_cta_main(tabla,pk_cta,pk_caja, monto, moneda):
	if SolicitudDesbloqueoCtaCteMovimientos_main.objects.filter(id_ctacte=pk_cta,tabla=tabla, id_caja= pk_caja,monto_operacion=monto, moneda=moneda,estadoAutorizacion ='autorizado').exists():
		solicitud_des = SolicitudDesbloqueoCtaCteMovimientos_main.objects.get(id_ctacte=pk_cta,tabla=tabla, id_caja= pk_caja,monto_operacion=monto, moneda=moneda,estadoAutorizacion ='autorizado')
		solicitud_des.estadoAutorizacion = 'utilizado'
		solicitud_des.fecha_op = datetime.now()
		solicitud_des.save()
	return True

@login_required
@transaction.atomic
def autorizar_cta_main_fetch_view(request):
	data=''
	if request.is_ajax:
		id_cta=request.GET.get('idCta')
		idSoli=request.GET.get('idSoli')
		usr= request.user.username
		try:
			with transaction.atomic():
				C = Cajas.objects.get(id_usuario__usuario=usr)
				if SolicitudDesbloqueoCtaCteMovimientos_main.objects.filter(pk=idSoli,id_ctacte=id_cta,estadoAutorizacion='pendiente',activo=True).exists():
					solicitud = SolicitudDesbloqueoCtaCteMovimientos_main.objects.get(pk=idSoli,id_ctacte=id_cta,estadoAutorizacion='pendiente',activo=True)
					solicitud.estadoAutorizacion = 'autorizado'
					solicitud.fecha_aut = datetime.now()
					solicitud.save()
					data='exito'
				else:
					data='Error en solicitud, verifique si corresponde'
				
		except:
			data='fail s'+ str(sys.exc_info()[1])
	else:
		data="fail ex"
	d= {'exito':data}
	d= json.dumps(d)
	mimetype="application/json"
	return HttpResponse(d,mimetype)