# -*- 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, Group
from django.db.models import Sum,Q,Avg,Count
from django.http import HttpResponseRedirect
from django.http import HttpResponse
from django.db  import  IntegrityError ,  transaction 
import json
import sys
from django.core import serializers
from Main.models import *
from Process.models import *
from Maintenance.models import *
from Consult.models import *
from Process.models import SaldoDisponibleCajas
from datetime import  date, time, timedelta
from django.shortcuts import redirect
import time
import datetime
#****
import string
import random
#modulos adicionalesr
def QuitarEspacios(texto):
	a=str(texto)
	return " ".join(a.split())
def ConvertirDecimal(numtext):
	a=str(numtext)
	return float(a.replace(',','.'))
def poner_coma(numero):
	cadena=numero
	n= len(cadena)
	resul=''
	p=n
	while p>3:
		p= p-3
		p1=cadena[:p]
		p2=cadena[p:]
		resul= ','+p2+resul
		cadena= p1
	return (cadena+resul)
def normalizar(numero):
	cadena=str(float(numero))
	part= cadena.split('.')
	num= part[0]
	dec= part[1]
	cade= poner_coma(num)
	return cade+'.'+dec
# Create your views here.
@login_required
@transaction.atomic
def CrearCliente_view(request):#este formulario sigue la misma logica
	Dni = request.POST.get('DniCli')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','DniCli','TipoPersona','NombreCli','PaternoCli','MaternoCli','TelefonoCli','CelularCli','DircCli','fechaNaCli','CuidadNaCli','EmailCli','DremCli')
	Nombre= request.POST.get('NombreCli')
	Apellido_Paterno= request.POST.get('PaternoCli')
	Apellido_Materno= request.POST.get('MaternoCli')
	Telefono = request.POST.get('TelefonoCli')
	Direccion = request.POST.get('DircCli')
	Fecha_Nacimiento = request.POST.get('fechaNaCli')
	Email = request.POST.get('EmailCli')
	Drem = request.POST.get('DremCli')#cambiar a varchar
	exito=''
	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 Nombre != None:
		try:
			with transaction.atomic():
				C1 = Cliente(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno,telefono=Telefono,direccion=Direccion,fecha_nacimiento=Fecha_Nacimiento,email=Email,drem=Drem,tipo_persona= TipoPersona)
				C1.save()
				exito='exito'
		except IntegrityError:
			exito= 'fail '+sys.exc_info()[0]
		except:
			exito='fail'+sys.exc_info()[0]
		else:
			exito='exito'
	return render(request,"CrearCliente.html",{"resultado":exito,"cargo":cargo} )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearClienteAdminModal_view(request):
	Dni = request.POST.get('DniCli')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','DniCli','TipoPersona','NombreCli','PaternoCli','MaternoCli','TelefonoCli','CelularCli','DircCli','fechaNaCli','CuidadNaCli','EmailCli','DremCli')
	Nombre= request.POST.get('NombreCli')
	Apellido_Paterno= request.POST.get('PaternoCli')
	Apellido_Materno= request.POST.get('MaternoCli')
	Telefono = request.POST.get('TelefonoCli')
	Direccion = request.POST.get('DircCli')
	Fecha_Nacimiento = request.POST.get('fechaNaCli')
	Email = request.POST.get('EmailCli')
	Drem = request.POST.get('DremCli')#cambiar a varchar
	exito=''
	if Nombre != None:
		try:
			with transaction.atomic():
				if not Cliente.objects.filter(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno).exists():
					C1 = Cliente(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno,telefono=Telefono,direccion=Direccion,fecha_nacimiento=Fecha_Nacimiento,email=Email,drem=Drem,tipo_persona= TipoPersona,tablaRelacional='TCCM')
					C1.save()
				exito='exito'
		except IntegrityError:
			exito= 'fail '+sys.exc_info()[0]
		except:
			exito='fail'+sys.exc_info()[0]
		else:
			exito='exito'
	return render(request,"CierreVentaMaterial.html",{"resultado":exito} )



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearClienteCompraAdminModal_view(request):
	Dni = request.POST.get('DniCli')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','DniCli','TipoPersona','NombreCli','PaternoCli','MaternoCli','TelefonoCli','CelularCli','DircCli','fechaNaCli','CuidadNaCli','EmailCli','DremCli')
	Nombre= request.POST.get('NombreCli')
	Apellido_Paterno= request.POST.get('PaternoCli')
	Apellido_Materno= request.POST.get('MaternoCli')
	Telefono = request.POST.get('TelefonoCli')
	Direccion = request.POST.get('DircCli')
	Fecha_Nacimiento = request.POST.get('fechaNaCli')
	Email = request.POST.get('EmailCli')
	Drem = request.POST.get('DremCli')#cambiar a varchar
	exito=''
	if Nombre != None:
		try:
			with transaction.atomic():
				if not Cliente.objects.filter(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno).exists():
					C1 = Cliente(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno,telefono=Telefono,direccion=Direccion,fecha_nacimiento=Fecha_Nacimiento,email=Email,drem=Drem,tipo_persona= TipoPersona,tablaRelacional='TCCM')
					C1.save()

				exito='exito'
		except IntegrityError:
			exito= 'fail '+sys.exc_info()[0]
		except:
			exito='fail'+sys.exc_info()[0]
		else:
			exito='exito'

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



@login_required
@transaction.atomic
def ModificarCliente_ajax_view(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		idC=request.GET.get('IdCliente','')
		dniC=request.GET.get('DniCli','')
		TipoPers=request.GET.get('TipoPersona','')
		NombreC=request.GET.get('NombreCli','')
		PaternoC= request.GET.get('PaternoCli','')
		MaternoC=request.GET.get('MaternoCli','')
		TelefonoC=request.GET.get('TelefonoCli','')
		DireccionC=request.GET.get('DircCli','')
		Fecha_NacimientoC=request.GET.get('fechaNaCli','')
		EmailC=request.GET.get('EmailCli','')
		DremC= request.GET.get('DremCli','')
		try:
			with transaction.atomic():
				aux= Cliente.objects.select_for_update().filter(pk=idC).update(nombre=NombreC,Apellido_paterno=PaternoC,Apellido_materno=MaternoC,telefono=TelefonoC,direccion=DireccionC,fecha_nacimiento=Fecha_NacimientoC,email=EmailC,drem=DremC,tipo_persona=TipoPers)
				#C1=Cliente(id=idC,dni=dniC,nombre=NombreC,Apellido_paterno=PaternoC,Apellido_materno=MaternoC,telefono=TelefonoC,direccion=DireccionC,fecha_nacimiento=Fecha_NacimientoC,email=EmailC,drem=DremC,tipo_persona=TipoPers)
				#C1.save()
				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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarPersonal_ajax_view(request):
	if request.is_ajax:
		data=''
		idp=request.POST.get('pk','')
		dnip=request.POST.get('dni','')
		nombrep=request.POST.get('nom','')
		ap= request.POST.get('ap','')
		am=request.POST.get('am','')
		telefonop=request.POST.get('tel','')
		direccionp=request.POST.get('dir','')
		fn=request.POST.get('fn','')
		fc=request.POST.get('fc','')
		emailp=request.POST.get('email','')
		cargop= request.POST.get('cargo','')
		sueldo=request.POST.get('sueldo')
		obs= request.POST.get('obs','')
		contrap=request.POST.get('pass')
		usu=request.POST.get('usr')
		est=request.POST.get('est')
		esta= True
		if est =="desactivo":
			esta=False
		sueldop= ConvertirDecimal(sueldo)
		if cargop=='operador':
			try:
				with transaction.atomic():
					if contrap!='' and contrap != None:
						if fn== None or fn =='' or fn =='None':
							fn = datetime.date.today()
						if fc== None or fc ==''or fc =='None':
							fc = datetime.date.today()
						if Personal.objects.filter(pk=idp,cargo='gerente').exists():
							u= User.objects.get(username=usu)
							g = Group.objects.get(name='gerente') 
							g.user_set.remove(u)
							G1=Gerente.objects.get(id_usuario=idp)
							Gerente.objects.filter(id_usuario=idp).delete() 
							Gerente_conf.objects.filter(id_gerente=G1.pk).delete()
							aux= Personal.objects.select_for_update().filter(pk=idp).update(dni=dnip,nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,telefono=telefonop,direccion=direccionp,fecha_nacimiento=fn,fecha_contratacion=fc,email=emailp,cargo=cargop,sueldo=sueldop,observacion=obs,password=contrap,estado=esta)
							u.set_password(str(contrap))
							u.save()
						else:
							aux= Personal.objects.select_for_update().filter(pk=idp).update(dni=dnip,nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,telefono=telefonop,direccion=direccionp,fecha_nacimiento=fn,fecha_contratacion=fc,email=emailp,cargo=cargop,sueldo=sueldop,observacion=obs,password=contrap,estado=esta)
							u= User.objects.get(username=usu)
							u.set_password(str(contrap))
							u.save()

						data='exito'
					else:
						data='llene el campo del password'
			except:
				data='fail'+ str(sys.exc_info()[1])
		else:
			try:
				with transaction.atomic():
					if contrap!='' and contrap != None:
						if Gerente.objects.filter(id_usuario=idp).exists():
							u= User.objects.get(username=usu)
							Gerente.objects.select_for_update().filter(id_usuario=idp).update(nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,email=emailp,observacion=obs,password=contrap,estado=esta)
							OG=Gerente.objects.get(id_usuario=idp)
							Gerente_conf.objects.select_for_update().filter(id_gerente=OG.pk).update(estado=est,sueldo=sueldop,telefono=telefonop)
							aux= Personal.objects.select_for_update().filter(pk=idp).update(dni=dnip,nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,telefono=telefonop,direccion=direccionp,fecha_nacimiento=fn,email=emailp,cargo="gerente",sueldo=sueldop,observacion=obs,password=contrap,estado=esta)
							u.set_password(str(contrap))
							u.save()
						else:
							u= User.objects.get(username=usu)
							g = Group.objects.get(name='gerente') 
							g.user_set.add(u)
							P=Personal.objects.get(pk=idp)
							G1= Gerente(nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,email=emailp,observacion=obs,estado=esta,usuario=P.usuario,password=contrap,id_usuario=P)
							G1.save()
							GC = Gerente_conf(id_gerente=G1,subGerente="si",estado=est,sueldo=sueldop,telefono=telefonop)
							GC.save()
							aux= Personal.objects.select_for_update().filter(pk=idp).update(dni=dnip,nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,telefono=telefonop,direccion=direccionp,fecha_nacimiento=fn,email=emailp,cargo="gerente",sueldo=sueldop,observacion=obs,password=contrap,estado=esta)
							u.set_password(str(contrap))
							u.save()

						data='exito'
					else:
						data='llene el campo del password'
			except:
				data='fail1'+ str(sys.exc_info()[1])
	else:
		data="fail"

	return render(request,"Personales.html",{"resultado":data} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def DespedirPersonal_ajax_view(request):
	if request.is_ajax:
		data=''
		idp=request.GET.get('pk','')
		try:
			with transaction.atomic():
				aux= Personal.objects.select_for_update().filter(pk=idp).update(estado=False)
				data='exito'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarGerente_ajax_view(request):
	if request.is_ajax:
		data=''
		idp=request.GET.get('pk','')
		dnip=request.GET.get('dni','')
		nombrep=request.GET.get('nom','')
		ap= request.GET.get('ap','')
		am=request.GET.get('am','')
		telefonop=request.GET.get('tel','')
		direccionp=request.GET.get('dir','')
		fn=request.GET.get('fn','')
		emailp=request.GET.get('email','')
		obs= request.GET.get('obs','')
		est=request.GET.get('estado','')
		if est== 'activo':
			est=True
		elif est=='desactivo':
			est=False
		else:
			est=False
		try:
			with transaction.atomic():
				aux= Gerente.objects.select_for_update().filter(pk=idp).update(nombre=nombrep,Apellido_paterno=ap,Apellido_materno=am,telefono=telefonop,direccion=direccionp,fecha_nacimiento=fn,email=emailp,observacion=obs)
				data='exito'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)
"""
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarSucursal_ajax_view(request):
	if request.is_ajax:
		data=''
		ids=request.GET.get('pk','')
		nom=request.GET.get('nombre','')
		ciu=request.GET.get('ciudad','')
		des= request.GET.get('des','')
		try:
			with transaction.atomic():
				aux= Sucursal.objects.filter(nombre_sucursal=ids).update(ciudad=ciu,descripcion=des)
				data='exito'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)"""

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarOficina_ajax_view(request):
	if request.is_ajax:
		data=''
		ido=request.GET.get('pk','')
		nom=request.GET.get('nombre','')
		dire=request.GET.get('dir','')
		ciu=request.GET.get('ciu','')
		des= request.GET.get('des','')
		obs= request.GET.get('obs','')
		est= request.GET.get('estado','')
		if est== 'activo':
			est=True
		elif est=='desactivo':
			est=False
		else:
			est=False
		try:
			with transaction.atomic():
				aux= Oficina.objects.select_for_update().filter(pk=ido).update(nombre_oficina=nom,direccion=dire,ciudad=ciu,descripcion=des,observaciones=obs,estado_oficina=est)
				data='exito'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCaja_ajax_view(request):
	if request.is_ajax:
		data=''
		idc=request.GET.get('pk','')
		nom=request.GET.get('nombre','')
		est=request.GET.get('estado','')
		if est== 'activo':
			est=True
		elif est=='desactivo':
			est=False
		else:
			est=False
		try:
			with transaction.atomic():
				aux= Cajas.objects.select_for_update().filter(pk=idc).update(nombre=nom,estado=est)
				data='exito'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)


#views admi
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearClienteAdmin_view(request):
	Dni = request.POST.get('DniCli')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','DniCli','TipoPersona','NombreCli','PaternoCli','MaternoCli','TelefonoCli','CelularCli','DircCli','fechaNaCli','CuidadNaCli','EmailCli','DremCli')
	Nombre= request.POST.get('NombreCli')
	Apellido_Paterno= request.POST.get('PaternoCli')
	Apellido_Materno= request.POST.get('MaternoCli')
	Telefono = request.POST.get('TelefonoCli')
	Direccion = request.POST.get('DircCli')
	Fecha_Nacimiento = request.POST.get('fechaNaCli')
	Email = request.POST.get('EmailCli')
	Drem = request.POST.get('DremCli')#cambiar a varchar
	exito=''
	if Nombre != None:
		try:
			with transaction.atomic():
				C1 = Cliente(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno,telefono=Telefono,direccion=Direccion,fecha_nacimiento=Fecha_Nacimiento,email=Email,drem=Drem,tipo_persona= TipoPersona)
				C1.save()
				exito='exito'
		except IntegrityError:
			exito= 'fail '+sys.exc_info()[0]
		except:
			exito='fail'+sys.exc_info()[0]
		else:
			exito='exito'
	return render(request,"CrearClienteAdmin.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarClienteAdmin_ajax_view(request):
	data='exito'
	if request.is_ajax:
		idC=request.GET.get('IdCliente','')
		dniC=request.GET.get('DniCli','')
		TipoPers=request.GET.get('TipoPersona','')
		NombreC=request.GET.get('NombreCli','')
		PaternoC= request.GET.get('PaternoCli','')
		MaternoC=request.GET.get('MaternoCli','')
		TelefonoC=request.GET.get('TelefonoCli','')
		DireccionC=request.GET.get('DircCli','')
		Fecha_NacimientoC=request.GET.get('fechaNaCli','')
		EmailC=request.GET.get('EmailCli','')
		DremC= request.GET.get('DremCli','')
		try:
			with transaction.atomic():
				aux= Cliente.objects.select_for_update().filter(pk=idC).update(nombre=NombreC,Apellido_paterno=PaternoC,Apellido_materno=MaternoC,telefono=TelefonoC,direccion=DireccionC,fecha_nacimiento=Fecha_NacimientoC,email=EmailC,drem=DremC,tipo_persona=TipoPers)
				#C1=Cliente(id=idC,dni=dniC,nombre=NombreC,Apellido_paterno=PaternoC,Apellido_materno=MaternoC,telefono=TelefonoC,direccion=DireccionC,fecha_nacimiento=Fecha_NacimientoC,email=EmailC,drem=DremC,tipo_persona=TipoPers)
				#C1.save()
				data="exito"
		except IntegrityError:
			data='fail'+ sys.exc_info()[0]
		else:
			data="exito"
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearOficina_view(request):
	NombreO=request.POST.get('NomOficina')#atributos('NomOficina','CiuOficina','Des','obs','EstOficina')
	Direccion = request.POST.get('DirOficina')
	Descripcion = request.POST.get('Des')
	Observaciones= request.POST.get('obs')
	Estado = request.POST.get('EstOficina')
	operador = request.POST.get('operador')
	nombrep = request.POST.get('nombre')
	ap = request.POST.get('paterno')
	am = request.POST.get('materno')
	usr = request.POST.get('usuario')
	pas = request.POST.get('contra')
	if Estado== 'activo':
		Estado=True
	elif Estado=='desactivo':
		Estado=False
	else:
		Estado=False
	exito =''
	if NombreO != None:
		try:
			with transaction.atomic():
				if operador == None:
					user = User.objects.create_user(username=usr, password=pas)
					user.save()
					g = Group.objects.get(name='operador')  
					g.user_set.add(user)
					fn = datetime.date.today()
					P= Personal(nombre= nombrep,Apellido_paterno=ap,Apellido_materno=am,usuario=usr,password=pas,sueldo=0,cargo='operador',fecha_nacimiento=fn)
					P.save()
				else:
					P= Personal.objects.get(pk= str(operador))
				O = Oficina(nombre_oficina=NombreO,direccion=Direccion,descripcion=Descripcion,observaciones=Observaciones,estado_oficina=Estado,id_usuario=P)
				O.save()
				C= Cajas(nombre="Caja Principal",estado=True,id_oficina=O,id_usuario=P)
				C.save()
				SI = SaldoInicialCaja(id_caja=C,saldo_soles=0,saldo_dolares=0)
				SI.save()
				
				configO= ConfiguracionExtra_caja(id_oficina=O,id_caja=C,Prj_comicion_queda=0,cierreObligatorio='si',otros_conceptos_minimo=0,extorno_total='no',monto_tope=20000,comision_minima=0,aux1='',aux2='',aux3='')
				configO.save()

				Nr= NroReciboCaja(id_oficina= O,id_caja=C,nroRE=0,nroRI=0,nroST= 0,nroPT=0,nroSI=0,nroPI=0)
				Nr.save()

				S=SaldoDisponibleCajas(id_oficina=O,id_caja=C,saldo_soles=0,saldo_dolares=0)
				S.save()

				CTG= conf_permisos_Cajas(id_caja=C,Trans_global='no',aux2='no')
				CTG.save()
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito="error "+str(sys.exc_info()[1])
	return render(request,"CrearOficina.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearOficina_externa_view(request):#Money
	CodOfiExt=request.POST.get('CodOficina')#money
	NombreO=request.POST.get('NomOficina')
	Observaciones= request.POST.get('obs')
	id_O = request.POST.get('oficina')
	exito =''
	if NombreO != None:
		try:
			with transaction.atomic():
				O = Oficina.objects.get(pk=id_O)
				if not Oficina_externa.objects.filter(id_oficina_imperial=id_O).exists():
					oficinaExterna= Oficina_externa(idOf_Ext=CodOfiExt,nombreOf_Ext=NombreO,observaciones=Observaciones,id_oficina_imperial=O)
					oficinaExterna.save()
					exito='exito'
				else:
					exito="error con oficina"
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito="error "+str(sys.exc_info()[1])
	return render(request,"CrearOficinaExterna.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearCaja_view(request):
	NombreCaja=request.POST.get('NomCaja')#atributos('NomCaja','sucursal','oficina','EstCaja')
	idOficina = request.POST.get('oficina')
	EstadoC = request.POST.get('EstCaja')
	operador = request.POST.get('operador')
	nombrep = request.POST.get('nombre')
	ap = request.POST.get('paterno')
	am = request.POST.get('materno')
	usr = request.POST.get('usuario')
	pas = request.POST.get('contra')
	if EstadoC== 'activo':
		EstadoC=True
	elif EstadoC=='desactivo':
		EstadoC=False
	else:
		EstadoC=False
	exito=''
	if NombreCaja != None:
		try:
			with transaction.atomic():
				if operador == None or operador =="":
					user = User.objects.create_user(username=usr, password=pas)
					user.save()
					g = Group.objects.get(name='operador')  
					g.user_set.add(user)
					fn = datetime.date.today()
					P= Personal(nombre= nombrep,Apellido_paterno=ap,Apellido_materno=am,usuario=usr,password=pas,sueldo=0,cargo='operador',fecha_nacimiento=fn)
					P.save()
				else:
					P= Personal.objects.get(pk= str(operador))
				O= Oficina.objects.get(pk=idOficina)
				Ca1= Cajas(nombre=NombreCaja,estado=EstadoC,id_oficina=O,id_usuario=P)
				Ca1.save()
				Nr= NroReciboCaja(id_oficina= O,id_caja=Ca1,nroRE=0,nroRI=0,nroST= 0,nroPT=0,nroSI=0,nroPI=0)
				Nr.save()

				configO= ConfiguracionExtra_caja(id_oficina=O,id_caja=Ca1,Prj_comicion_queda=0,cierreObligatorio='si',otros_conceptos_minimo=0,extorno_total='no',monto_tope=20000,comision_minima=0,aux1='',aux2='',aux3='')
				configO.save()

				configTS= TConfiguracionSistema(id_oficina=O,id_caja=Ca1,tipoSistema='transferencia',cajaDolar='no',conf1='',conf2='')
				configTS.save()

				SI = SaldoInicialCaja(id_caja=Ca1,saldo_soles=0,saldo_dolares=0)
				SI.save()

				S=SaldoDisponibleCajas(id_oficina=O,id_caja=Ca1,saldo_soles=0,saldo_dolares=0)
				S.save()

				CTG= conf_permisos_Cajas(id_caja=Ca1,Trans_global='no',aux2='no')
				CTG.save()
				exito='exito'

		except IntegrityError:
			exito='fail' + str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"CrearCaja.html",{"resultado":exito} )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CambiarOperador_caja_ajax_view(request):
	idCaja=request.GET.get('pkCaja')
	operador = request.GET.get('operador')
	nombrep = request.GET.get('nombre')
	ap = request.GET.get('paterno')
	am = request.GET.get('materno')
	usr = request.GET.get('usuario')
	pas = request.GET.get('contra')
	exito=''
	if idCaja != None:
		try:
			with transaction.atomic():
				if operador == None or operador =="":
					user = User.objects.create_user(username=usr, password=pas)
					user.save()
					g = Group.objects.get(name='operador')  
					g.user_set.add(user)
					fn = datetime.date.today()
					P= Personal(nombre= nombrep,Apellido_paterno=ap,Apellido_materno=am,usuario=usr,password=pas,sueldo=0,cargo='operador',fecha_nacimiento=fn)
					P.save()
				else:
					P= Personal.objects.get(pk= operador)
				C_aux= Cajas.objects.get(pk=idCaja)
				C_user = C_aux.id_usuario.pk
				O_user = C_aux.id_oficina.id_usuario.pk
				idOf=C_aux.id_oficina.pk
				C_aux =None
				if C_user == O_user:
					Of1= Oficina.objects.select_for_update().filter(pk=idOf).update(id_usuario=P)
				Ca1= Cajas.objects.select_for_update().filter(pk=idCaja).update(id_usuario=P)
				exito='exito'

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

"""@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearSucursal_view(request):#sigue  la misma logica que los formularios anteriores
	NombreSucursal=request.POST.get('NomSucursal')
	Ciudad = request.POST.get('CiuSucursal')
	Descripcion= request.POST.get('Des')
	exito=''
	if NombreSucursal != None:
		try:
			with transaction.atomic():
				S1= Sucursal(nombre_sucursal=NombreSucursal, ciudad=Ciudad,descripcion=Descripcion)
				S1.save()
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"CrearSucursal.html",{"resultado":exito} )
"""
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearPersonal_view(request):#sigue la misma logica q los formularios anterioes
	DNIPer=request.POST.get('DNIPersonal')#atributos('DNIPersonal','NomPersonal','PaternoPersonal','MaternoPersonal','TelefonoPersonal','CelularPersonal','DirPersonal','fechaNaPersonal','NacionalidadPersonal','CuidadNaPersonal','EmailPersonal','CargoPersonal','SueldoPersonal','fechaContratPers','EstadoPersonal','observaciones','User','Password')
	Nombres = request.POST.get('NomPersonal')
	A_paterno = request.POST.get('PaternoPersonal')
	A_materno = request.POST.get('MaternoPersonal')
	Telefonop = request.POST.get('TelefonoPersonal')
	Direccionp = request.POST.get('DirPersonal')
	FechaNacimiento = request.POST.get('fechaNaPersonal')
	Emailp= request.POST.get('EmailPersonal')
	Cargop = request.POST.get('CargoPersonal')
	Sueldop= request.POST.get('SueldoPersonal')
	FechaContratacion = request.POST.get('fechaContratPers')
	Estadop = request.POST.get('EstadoPersonal')
	Observacionp = request.POST.get('obs')
	Usuariop = request.POST.get('User')
	Passwordp =request.POST.get('Password')
	if Estadop== 'activo':
		Estadop=True
	elif Estadop=='desactivo':
		Estadop=False
	else:
		Estadop=False
	exito=''
	if DNIPer != None:
		try:
			with transaction.atomic():
				salario = ConvertirDecimal(Sueldop)
				user = User.objects.create_user(username=Usuariop, email=Emailp, password=Passwordp)
				user.save()
				g = Group.objects.get(name='operador')  
				g.user_set.add(user)
				P1= Personal(dni=DNIPer,nombre=Nombres,Apellido_paterno=A_paterno,Apellido_materno=A_materno,telefono=Telefonop,direccion=Direccionp,fecha_nacimiento=FechaNacimiento,email=Emailp,cargo=Cargop,sueldo=salario,fecha_contratacion=FechaContratacion,observacion=Observacionp,estado=Estadop,usuario=Usuariop,password=Passwordp)
				P1.save();
				exito='exito'
		except IntegrityError:
			exito='fail'+ sys.exc_info()[0]
		else:
			exito='exito'
	return render(request,"CrearPersonal.html",{"resultado":exito} )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearGerente_view(request):#sigue la misma logica q los formularios anterioes
	DNIG=request.POST.get('DNI')#atributos('DNIPersonal','NomPersonal','PaternoPersonal','MaternoPersonal','TelefonoPersonal','CelularPersonal','DirPersonal','fechaNaPersonal','NacionalidadPersonal','CuidadNaPersonal','EmailPersonal','CargoPersonal','SueldoPersonal','fechaContratPers','EstadoPersonal','observaciones','User','Password')
	Nombres = request.POST.get('Nombre')
	A_paterno = request.POST.get('APaterno')
	A_materno = request.POST.get('AMaterno')
	Telefonog = request.POST.get('Telefono')
	Direcciong = request.POST.get('Dir')
	FechaNacimiento = request.POST.get('fechaNa')
	Emailg= request.POST.get('Email')
	Estadog = request.POST.get('EstadoPersonal')
	if Estadog== 'activo':
		Estadog=True
	elif Estadog=='desactivo':
		Estadog=False
	else:
		Estadog=False
	Observaciong = request.POST.get('obs')
	Usuariog = request.POST.get('User')
	Passwordg =request.POST.get('Password')
	exito=''
	if DNIG != None:
		try:
			with transaction.atomic():
				user = User.objects.create_user(username=Usuariog, email=Emailg, password=Passwordg)
				user.save()
				g = Group.objects.get(name='gerente') 
				g.user_set.add(user)
				P= Personal(dni=DNIG,nombre= Nombres,Apellido_paterno=A_paterno,Apellido_materno=A_materno,telefono=Telefonog,direccion=Direcciong,cargo="gerente")
				P.save()
				G1= Gerente(dni=DNIG,nombre=Nombres,Apellido_paterno=A_paterno,Apellido_materno=A_materno,telefono=Telefonog,direccion=Direcciong,fecha_nacimiento=FechaNacimiento,email=Emailg,observacion=Observaciong,estado=Estadog,usuario=Usuariog,password=Passwordg,id_usuario=P)
				G1.save()
				O= Oficina(nombre_oficina="Gerencia",descripcion="oficina gerencia",id_usuario=P)
				O.save()
				C= Cajas(nombre="caja gerencia",id_oficina=O,id_usuario=P)
				C.save()
				Nr= NroReciboCaja(id_oficina= O,id_caja=C,nroRE=0,nroRI=0,nroST= 0,nroPT=0,nroSI=0,nroPI=0)
				Nr.save()
				S=SaldoDisponibleCajas(id_oficina=O,id_caja=C,saldo_soles=0,saldo_dolares=0)
				S.save()

				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"CrearGerente.html",{"resultado":exito} )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurarMontosAutorizados(request):
	id=request.POST.get('pk')#atributos('DNIPersonal','NomPersonal','PaternoPersonal','MaternoPersonal','TelefonoPersonal','CelularPersonal','DirPersonal','fechaNaPersonal','NacionalidadPersonal','CuidadNaPersonal','EmailPersonal','CargoPersonal','SueldoPersonal','fechaContratPers','EstadoPersonal','observaciones','User','Password')
	MSCC = request.POST.get('montoSolesCtaCte')
	MDCC = request.POST.get('montoDolaresCtaCte')
	MSCA = request.POST.get('montoSolesCtaAhorros')
	MDCA = request.POST.get('montoDolaresCtaAhorros')
	exito=''
	if id != None:
		try:
			with transaction.atomic():
				aux= ConfiguracionPeticiones.objects.select_for_update().filter(pk=id).update(montoSolesCtaCte=MSCC,montoDolaresCtaCte=MDCC,montoSolesCtaAhorros=MSCA,montoDolaresCtaAhorros=MDCA)
				exito='exito'
		except IntegrityError:
			exito='fail'#+str(sys.exc_info()[1])
		except:
			exito='fail'#+ str(sys.exc_info()[1])
	return render(request,"configurarMontosAutorizados.html",{"resultado":exito} )




@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurarRecibo(request):
	idO=request.POST.get('pkO')
	idC=request.POST.get('pkC')
	RE = request.POST.get('re')
	RI = request.POST.get('ri')
	ST = request.POST.get('st')
	PT = request.POST.get('pt')
	exito=''
	if idO != None:
		try:
			with transaction.atomic():
				NroReciboCaja.objects.select_for_update().filter(id_oficina=idO,id_caja=idC).update(nroRE=int(RE),nroRI=int(RI),nroST=int(ST),nroPT=int(PT))
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail'+ str(sys.exc_info()[0])
	return render(request,"configurarNroRecibo.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurar_mt_cm(request):
	idR=request.POST.get('pkR')#atributos('DNIPersonal','NomPersonal','PaternoPersonal','MaternoPersonal','TelefonoPersonal','CelularPersonal','DirPersonal','fechaNaPersonal','NacionalidadPersonal','CuidadNaPersonal','EmailPersonal','CargoPersonal','SueldoPersonal','fechaContratPers','EstadoPersonal','observaciones','User','Password')
	mt = request.POST.get('mt')
	cm = request.POST.get('cm')
	ocm = request.POST.get('ocm')
	ce = request.POST.get('ce')
	exito=''
	if idR != None:
		try:
			with transaction.atomic():
				aux= ConfiguracionExtra_caja.objects.select_for_update().filter(pk=idR).update(monto_tope=float(mt),comision_minima=float(cm),otros_conceptos_minimo= float(ocm),extorno_total=ce)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail '+ str(sys.exc_info()[0])
	return render(request,"config_monto_comi.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def config_extra(request):
	idR=request.POST.get('pko')
	cf = request.POST.get('cf')
	ipCf = request.POST.get('pk')
	Porcentaje = request.POST.get('porcentaje')
	tpo = request.POST.get('tipoOfi')
	vs = request.POST.get('verSaldo')
	exito=''
	if ipCf != None:
		try:
			with transaction.atomic():
				aux=ConfiguracionExtra_oficina.objects.select_for_update().filter(pk=ipCf).update(cierreObligatorio=cf,Prj_comicion_queda=float(Porcentaje),aux2=tpo,aux3=vs)
				exito='exito'
		except IntegrityError:
			exito='fail'
		except:
			exito='fail '+ str(sys.exc_info()[0])
	return render(request,"config_extra.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def cacelarCierre_view(request):
	return render(request,"ListadoCierres.html" )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearCtaCte(request):#encargado de crear cta cte
	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('DniCli','')
	NombreCliente= request.POST.get('NombreCli','')
	A_paternoCliente= request.POST.get('PaternoCli','')
	A_maternoCliente= request.POST.get('MaternoCli','')
	TelefonoCli= request.POST.get('TelefonoCli','')
	DireccionCli= request.POST.get('DirCli')
	EmailCli= request.POST.get('EmailCli','')
	MontoApertura= request.POST.get('montoapertura')
	Moneda= request.POST.get('Combomoneda','')
	Observacion = request.POST.get('observacion','')
	comision = request.POST.get('comision','')
	FechaNacimiento = request.POST.get('fechaNa')
	Nro = request.POST.get('nro')
	usr=request.user.username
	cargo =''

	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'

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


	nombreRecibo=NombreCliente+" "+A_paternoCliente+" "+A_maternoCliente
	montoRecibo=str(MontoApertura)
	comisionRecibo=str(comision)
	montoTotalRecibo=str(ConvertirDecimal(MontoApertura)+ConvertirDecimal(comision))
	monedaRecibo=Moneda
	nroR=0
	conceptoDetalleRecibo="Apertura de Cta. Cte. en "+ Moneda.upper()+ " "+Observacion
	dniRecibo=DniRucCliente[:4]+"****"
	oficinaRecibo=''
	fechaActual = time.strftime("%Y-%m-%d")
	horaActual = time.strftime("%H:%M:%S")
	exito='' #en caso de ser exitosa la creacion.. devolver un string 'exito'caso contrario retornar'fail'
	G= Gerente.objects.get(usuario=usr)
	C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
	if NombreCliente != None:
		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,fecha_nacimiento=FechaNacimiento,tipo_persona=TipoPersona,idCaja=C.pk)
					cln.save()
					idCliente = str(cln.pk)
				else:
					lista5= list(sq)
					idCliente= str(lista5[0]['pk'])

				C= Cajas.objects.get(id_usuario=G.id_usuario.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
				nroR=numeroR
				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+comision)
					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+comision,moneda=Moneda,observaciones=Observacion,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=FechaNacimiento)
					rctacte.save()
					mctacte= CtaCteMovimientos(id_ctacte=rctacte,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos=conceptoDetalleRecibo,tipoDocumento='R/I',nroRecibo=numeroR,comision=comision,aux1=ctacte.pk,tabla='TCajaDebe')
					mctacte.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)
					saldo= SaldoSoles+Ingres
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo+comision)
					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+comision,moneda=Moneda,observaciones=Observacion,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=FechaNacimiento)
					rctacte.save()
					mctacte= CtaCteMovimientos(id_ctacte=rctacte,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos=conceptoDetalleRecibo,tipoDocumento='R/I',nroRecibo=numeroR,comision=comision,aux1=ctacte.pk,tabla='TCajaDebe')
					mctacte.save()
					exito='exito'
				else:
					exito='fail1'


		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail1'+ str(sys.exc_info()[1])
	return render(request,"CrearCtaCte.html",{"resultado":exito,"nombreRecibo":nombreRecibo,"oficinaRecibo":oficinaRecibo,"montoRecibo":montoRecibo,"comisionRecibo":comisionRecibo,"montoTotalRecibo":montoTotalRecibo,"monedaRecibo":monedaRecibo,"conceptoDetalleRecibo":conceptoDetalleRecibo,"dniRecibo":dniRecibo,"nroRecibo":nroR,"fechaRecibo":fechaActual,"horaRecibo":horaActual} )



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CtaCteAnularIntereses(request):#encargado de crear cta cte
	data=''
	if request.is_ajax:
		id=0
		deposito=0
		retiro=0
		saldoanterior=0
		IdCtaCte=request.GET.get('idctacte','')
		try:
			with transaction.atomic():
				consulta1= list(CtaCteMovimientos.objects.filter(pk=IdCtaCte).values('pk','montoDeposito','montoRetiro'))
				for obj in consulta1:
					id=obj['pk']
					deposito=obj['montoDeposito']
					retiro=obj['montoRetiro']
					consulta2=CtaCteMovimientos.objects.filter(pk__lt=id,id_ctacte=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))
					CtaCteMovimientos.objects.select_for_update().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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCtaCteEstado(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		estado=request.GET.get('estado','')
		try:
			with transaction.atomic():
				aux= CtaCte.objects.select_for_update().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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCtaCteClave(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		password=request.GET.get('clave','')
		try:
			with transaction.atomic():
				aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(claveAcceso=password)
				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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCtaCtePrivado(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		privado=request.GET.get('privado','')
		try:
			with transaction.atomic():
				aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(privadoOficina=privado)
				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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCtaAhorrosEstado(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		estado=request.GET.get('estado','')
		try:
			with transaction.atomic():
				aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCtaAhorrosInteres(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		interes=request.GET.get('interes','')
		try:
			with transaction.atomic():
				aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(interes=interes)
				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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCtaAhorrosInteresAcumulado(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		interes=request.GET.get('interes','')
		try:
			with transaction.atomic():
				aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(tipoCuenta=interes)
				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
@permission_required('Main.add_oficina')
@transaction.atomic
def ModificarCtaAhorrosClave(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		password=request.GET.get('clave','')
		try:
			with transaction.atomic():
				aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(claveAcceso=password)
				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 ModificarCtaAhorrosPrivado(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		privado=request.GET.get('privado','')
		try:
			with transaction.atomic():
				aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(privadoOficina=privado)
				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
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearCtaAhorros(request):
	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('DniCli','')
	NombreCliente= request.POST.get('NombreCli')
	A_paternoCliente= request.POST.get('PaternoCli')
	A_maternoCliente= request.POST.get('MaternoCli','')
	TelefonoCli= request.POST.get('TelefonoCli','')
	DireccionCli= request.POST.get('DirCli')
	EmailCli= request.POST.get('EmailCli','')
	MontoApertura= request.POST.get('montoapertura')
	Moneda= request.POST.get('Combomoneda')
	comision = request.POST.get('comision','')
	frecNroDias=request.POST.get('ComboFrecuenciaNroDias')
	NroDias=request.POST.get('nroDias','')
	frecInteres=request.POST.get('ComboFrecuenciaInteres')
	Interes= request.POST.get('interes')
	Observacion = request.POST.get('observacion','')
	FechaNacimiento = request.POST.get('fechaNa')
	transac_= request.POST.get('transac')
	usr=request.user.username
	cargo =''
	transac=''
	nombreRecibo=''
	conceptoDetalleRecibo=''

	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

	dniRecibo= DniRucCliente[:4]+"****"
	oficinaRecibo=''
	fechaActual = time.strftime("%Y-%m-%d")
	horaActual = time.strftime("%H:%M:%S")
	exito='' #en caso de ser exitosa la creacion.. devolver un string 'exito'caso contrario retornar'fail'

	G= Gerente.objects.get(usuario=usr)
	C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
	cargo='gerente'
	if NombreCliente != None:
		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():
				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)
					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)
					oficinaRecibo=O1.nombre_oficina
					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)
					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)
					oficinaRecibo=O1.nombre_oficina
					exito='exito'
				else:
					exito='fail'

		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[0])
	else:
		exito='fail'
	return render(request,"CrearCtaAhorros.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":nombreRecibo,"oficinaRecibo":oficinaRecibo,"montoRecibo":montoRecibo,"comisionRecibo":comisionRecibo,"montoTotalRecibo":montoTotalRecibo,"monedaRecibo":monedaRecibo,"conceptoDetalleRecibo":conceptoDetalleRecibo,"nroRecibo":nroR,"dniRecibo":dniRecibo,"fechaRecibo":fechaActual,"horaRecibo":horaActual} )




@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CtaCteDepositar(request):
	data=''
	data1=''
	dataNro=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		idCtaCteM=request.GET.get('idctactem','')
		montoDeposito=request.GET.get('montodeposito','')
		observaciones=request.GET.get('observaciones','')
		comision=request.GET.get('comision','')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")
		G= Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)

		if comision=='' or comision==None:
			comision=0

		if montoDeposito !='' and montoDeposito != None:
			montoDeposito = ConvertirDecimal(montoDeposito)
			try:
				with transaction.atomic():
					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= 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.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)
							ctacte= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' 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')
							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='Abono a Cta Cte Nro. '+str(IdCtaCte),tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=ctacte.pk,comision=comision)
							mctacte.save()
							mcomisionctacte=ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=comision,tipo='abono')
							mcomisionctacte.save()
							aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).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)
							data1='Abono a Cta Cte Nro. '+str(IdCtaCte)
							data='exito'
						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)
							ctacte= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' 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')
							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='Abono a Cta Cte Nro. '+str(IdCtaCte),tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=ctacte.pk,comision=comision)
							mctacte.save()
							mcomisionctacte=ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=comision,tipo='abono')
							mcomisionctacte.save()
							aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).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)
							data1='Abono a Cta Cte Nro. '+str(IdCtaCte)
							data='exito'
					else:
						#------- sobregiro --------
						ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte,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='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' 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)))

						
						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=(ConvertirDecimal(saldoUMov)-ConvertirDecimal(interesMoraSobregiro)),observacionesMovimientos='Deposito en Cta Cte Nro. '+str(IdCtaCte)+' <Pago de Sobregiro>',auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=cd.pk,comision=comision)
						mctacte.save()
						mcomisionctacte=ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=comision,tipo='abono')
						mcomisionctacte.save()
						aux= CtaCte.objects.filter(pk=IdCtaCte).update(saldo=saldoUMovAhora,fechaCierre=fechaActual)

						#montoSobregiroRestante=(montoSobregiroRestante+interesMoraSobregiro)-montoDeposito
						if moneda=='soles':
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)+float(montoDeposito)+float(comision),fecha=fechaActual)
						else:
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoDolares)+float(montoDeposito)+float(comision),fecha=fechaActual)

						data1='Deposito en Cta Cte Nro. '+str(IdCtaCte)+' <Pago de Sobregiro>'
						data='exito'
						
 
			except IntegrityError:
				data1='fail'
				data=str(sys.exc_info()[1])
			except:
				data1='fail'
				data=str(sys.exc_info()[1])
		else:
			data='Monto ingresado es incorrecto'
	else:
		data="fail"

	exito={'resultado':data,'msg':data1,'nro':dataNro}
	resultado= json.dumps(exito)
	mimetype="application/json" 
	return HttpResponse(resultado,mimetype)




	'''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','')
		moneda=request.GET.get('moneda','')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")
		G= Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)

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

		try:
			with transaction.atomic():
				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)
				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 '+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()
					aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo)+float(montoDeposito)),fechaCierre=fechaActual)
				else:
					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.strptime(str(fechaDelSobregiro), formato_fecha)
					fecha_final = 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)
						O1= Oficina.objects.get(pk= C.id_oficina.pk)
						ctacte= TCajaDebe(id_personal=C.id_usuario, tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+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:
							saldoUMov=(float(saldoUMov)+float(montoDeposito))-float(interesMoraSobregiro)
						elif (float(saldoUMov)+float(montoDeposito))>=float(interesMoraSobregiro):
							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()
						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)
						O1= Oficina.objects.get(pk= C.id_oficina.pk)
						ctacte= TCajaDebe(id_personal=C.id_usuario, tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+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:
							saldoUMovAhora=(float(saldoUMov)+float(montoDeposito))-interesMoraSobregiro
						elif (float(saldoUMov)+float(montoDeposito))>=interesMoraSobregiro:
							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()
						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)
					data='exito'
				else:
					saldo=float(SaldoSoles)+float(montoDeposito)
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo,fecha=fechaActual)
					data='exito'			

		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data="fail"
	exito={'resultado':data}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(data,mimetype)'''



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CtaAhorrosDepositar(request):
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		montoDeposito=request.GET.get('montodeposito','')
		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')
		Interes= request.POST.get('interes')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")

		G= Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)

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

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

		if comision=='' or comision==None:
			comision=0

		if montoDeposito !='' and montoDeposito != None:
			montoDeposito = ConvertirDecimal(montoDeposito)
			try:
				with transaction.atomic():
					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()
							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)
							data1='Abono a Cta Ahorros Nro. '+str(IdCtaAhorros)
							data='exito'
						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()
							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)
							data1='Abono a Cta Ahorros Nro. '+str(IdCtaAhorros)
							data='exito'
					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()
						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)


						#montoSobregiroRestante=(montoSobregiroRestante+interesMoraSobregiro)-montoDeposito
						data1='Deposito en Cta Ahorros Nro. '+str(IdCtaAhorros)+' <Pago de Sobregiro>'
						data='exito'
			except IntegrityError:
				data1='fail'
				data=str(sys.exc_info()[1])
			except:
				data1='fail'
				data=str(sys.exc_info()[1])
		else:
			data='Monto ingresado es incorrecto'

	else:
		data="fail"
	
	exito={'resultado':data,'msg':data1,'nro':dataNro}
	resultado= json.dumps(exito)
	mimetype="application/json" 
	return HttpResponse(resultado,mimetype)



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CtaCteRetirar(request):
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	tcRecibo=''
	importeRecibo=''
	importeReciboDolarizadoSolarizado=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		montoRetiro=request.GET.get('montoretiro','')
		observaciones=request.GET.get('observaciones','')
		interes=request.GET.get('interes','')
		nroDias=request.GET.get('nrodias','')
		estadoConf=request.GET.get('estado','')
		comision=request.GET.get('comision','')
		tipoC=request.GET.get('tc','')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		G= Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)

		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():
						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 (float(ObjSaldo.saldo)-float(montoRetiro)-float(comision))>=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()
									ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
									ctacteM.save()
									aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
									conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
									nroRecibo=str(numeroR)
									saldoTotalRecibo='S/. '+str(saldoEgreso)
									importeRecibo='S/. '+str(montoRetiro)
									est=1
									data='exito'
								else:
									if estadoConf==0 or estadoConf=='0':
										est=3
										data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											conceptoRecibo='Retiro de dinero dolarizado de la Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='S/. '+str(saldoEgreso)
											importeRecibo='S/. '+str(montoRetiro)
											importeReciboDolarizadoSolarizado='US$. '+str(montoDolarizado)
											#importeRecibo='$/. '+str(montoDolarizado)
											tcRecibo=str(tipoC)
											est=1
											data='exito'
										else:
											est=4
											data='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()
									ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
									ctacteM.save()
									aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
									conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
									nroRecibo=str(numeroR)
									saldoTotalRecibo='US$. '+str(saldoEgreso)
									importeRecibo='US$. '+str(montoRetiro)
									est=1
									data='exito'
								else:
									if estadoConf==0 or estadoConf=='0':
										est=3
										data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											conceptoRecibo='Retiro de dinero solarizado de la Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='US$. '+str(saldoEgreso)
											importeRecibo='US$. '+str(montoRetiro)
											importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
											#importeRecibo='S/. '+str(montoSolarizado)
											tcRecibo=str(tipoC)
											est=1
											data='exito'
										else:
											est=4
											data='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()
									ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
									ctacteM.save()
									aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
									conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
									nroRecibo=str(numeroR)
									saldoTotalRecibo='S/. '+str(saldoEgreso)
									importeRecibo='S/. '+str(montoRetiro)
									est=1
									data='exito'
								else:
									if estadoConf==0 or estadoConf=='0':
										est=3
										data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											conceptoRecibo='Retiro con Sobregiro Dolarizado de Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='S/. '+str(saldoEgreso)
											importeRecibo='S/. '+str(montoRetiro)
											importeReciboDolarizadoSolarizado='US$. '+str(montoDolarizado)
											#importeRecibo='$/. '+str(montoDolarizado)
											tcRecibo=str(tipoC)
											est=1
											data='exito'
										else:
											est=4
											data='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()
									ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
									ctacteM.save()
									aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
									conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
									nroRecibo=str(numeroR)
									saldoTotalRecibo='US$. '+str(saldoEgreso)
									importeRecibo='US$. '+str(montoRetiro)
									est=1
									data='exito'
								else:
									if estadoConf==0 or estadoConf=='0':
										est=3
										data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											conceptoRecibo='Retiro con Sobregiro Solarizado de Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='US$. '+str(saldoEgreso)
											importeRecibo='US$. '+str(montoRetiro)
											importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
											#importeRecibo='S/. '+str(montoSolarizado)
											tcRecibo=str(tipoC)
											est=1
											data='exito'
										else:
											est=4
											data='Saldo insuficiente en la caja de soles'

				except IntegrityError:
					est=4
					data=str(sys.exc_info()[1])
				except:
					est=4
					data=str(sys.exc_info()[1])
				
			else:
				est=4
				data='Monto ingresado es incorrecto'

		else:
			est=4
			data='Monto ingresado es incorrecto'
	else:
		est=4
		data='fail'
	exito={'resultado':data,'estado':est,'concepto':conceptoRecibo,'nroRecibo':nroRecibo,'saldo':saldoTotalRecibo,'tc':tcRecibo,'importe':importeRecibo,'importeDS':importeReciboDolarizadoSolarizado}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)


@login_required#----
@transaction.atomic
def CtaCteRetirar_operador(request):#
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	importeRecibo=''
	tcRecibo=''
	importeReciboDolarizadoSolarizado=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		montoRetiro=request.GET.get('montoretiro','')
		observaciones=request.GET.get('observaciones','')
		interes=request.GET.get('interes','')
		nroDias=request.GET.get('nrodias','')
		estadoConf=request.GET.get('estado','')
		tipoC=request.GET.get('tc','')
		comision=request.GET.get('comision','')
		CodigoA = request.GET.get('CodigoAut')
		Clave= request.GET.get('clave')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)

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

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

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

		if (CtaCte.objects.filter(id=IdCtaCte,claveAcceso=Clave).exists()):
			if montoRetiro !='' and montoRetiro != None:
				montoRetiro = ConvertirDecimal(montoRetiro)
				if montoRetiro>0:
					try:
						with transaction.atomic():
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							MontosAutorizado=ConfiguracionPeticiones.objects.get(id_oficina=C.id_oficina.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)-float(comision))>=0: 
									if moneda=='soles':
										if (SaldoSoles >= montoRetiro):
											if (montoRetiro<=MontosAutorizado.montoSolesCtaCte):
												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()
												ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
												ctacteM.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
												conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
												nroRecibo=str(numeroR)
												saldoTotalRecibo='S/. '+str(saldoEgreso)
												importeRecibo='S/. '+str(montoRetiro)
												est=1
												data='exito'
											else:
												est=2
												data='Monto excede al autorizado.'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='Saldo insuficiente en la caja de soles. ¿Desea retirar de la caja de dolares?'
											else:
												montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
												if (montoDolarizado<=MontosAutorizado.montoDolaresCtaCte):
													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()
														ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
														ctacteM.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),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='US$. '+str(montoDolarizado)
														tcRecibo=str(tipoC)
														est=1
														data='exito'
													else:
														est=4
														data='Saldo insuficiente en la caja de dolares'
												else:
													est=2
													data='Monto excede al autorizado.'

									elif moneda=='dolares':
										if (SaldoDolares>=montoRetiro):
											if (montoRetiro<=MontosAutorizado.montoDolaresCtaCte):
												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()
												ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
												ctacteM.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
												conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
												nroRecibo=str(numeroR)
												saldoTotalRecibo='US$. '+str(saldoEgreso)
												importeRecibo='US$. '+str(montoRetiro)
												est=1
												data='exito'
											else:
												est=2
												data='Monto excede al autorizado.'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
											else:
												montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
												if (montoSolarizado<=MontosAutorizado.montoSolesCtaCte):
													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()
														ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
														ctacteM.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),fechaCierre=fechaActual)
														conceptoRecibo='Retiro de dinero solarizado de la Cta Cte Nro. '+str(IdCtaCte)
														nroRecibo=str(numeroR)
														saldoTotalRecibo='US$. '+str(saldoEgreso)
														#importeRecibo='S/. '+str(montoSolarizado)
														importeRecibo='US$. '+str(montoRetiro)
														importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
														tcRecibo=str(tipoC)
														est=1
														data='exito'
													else:
														est=4
														data='Saldo insuficiente en la caja de soles'
												else:
													est=2
													data='Monto excede al autorizado.'

								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,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).exists():
											cod_aut=True

									if cod_aut:
										if moneda=='soles':
											if (SaldoSoles >= montoRetiro):
												if (montoRetiro<=MontosAutorizado.montoSolesCtaCte):
													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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
													conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
													nroRecibo=str(numeroR)
													saldoTotalRecibo='S/. '+str(saldoEgreso)
													importeRecibo='S/. '+str(montoRetiro)
													est=1
													data='exito'
													Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
												else:
													est=2
													data= 'Monto excede al autorizado.'
											else:
												if estadoConf==0 or estadoConf=='0':
													est=3
													data='Saldo insuficiente en la caja de soles. ¿Desea hacer el sobregiro en dolares?'
												else:
													montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
													if (montoDolarizado<=MontosAutorizado.montoDolaresCtaCte):
														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()
															ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
															ctacteM.save()
															aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),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='US$. '+str(montoDolarizado)
															tcRecibo=str(tipoC)
															est=1
															data='exito'
															Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
														else:
															est=4
															data='Saldo insuficiente en la caja de dolares'
													else:
														est=2
														data= 'Monto excede al autorizado.'


										elif moneda=='dolares':
											if (SaldoDolares>=montoRetiro):
												if (montoRetiro<=MontosAutorizado.montoDolaresCtaCte):
													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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
													conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
													nroRecibo=str(numeroR)
													saldoTotalRecibo='US$. '+str(saldoEgreso)
													importeRecibo='S/. '+str(montoRetiro)
													est=1
													data='exito'
													Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
												else:
													est=2
													data='Monto excede al autorizado.'
											else:
												if estadoConf==0 or estadoConf=='0':
													est=3
													data='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
												else:
													montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
													if (montoRetiro<=MontosAutorizado.montoDolaresCtaCte):
														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)
															aldoDisponibleCajas.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()
															ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
															ctacteM.save()
															aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
															conceptoRecibo='Retiro con Sobregiro Solarizado de Cta Cte Nro. '+str(IdCtaCte)
															nroRecibo=str(numeroR)
															saldoTotalRecibo='US$. '+str(saldoEgreso)
															#importeRecibo='S/. '+str(montoSolarizado)
															importeRecibo='US$. '+str(montoRetiro)
															importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
															tcRecibo=str(tipoC)
															est=1
															data='exito'
															Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
														else:
															est=4
															data='Saldo insuficiente en la caja de soles'
													else:
														est=2
														data='Monto excede al autorizado.'
									else:
										est=5
										data=''
							else:
								est=4
								data='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'

					except IntegrityError:
						est=4
						data=str(sys.exc_info()[1])
					except:
						est=4
						data=str(sys.exc_info()[1])
					
				else:
					est=4
					data='Monto ingresado es incorrecto'

			else:
				est=4
				data='Monto ingresado es incorrecto'
		else:
			est=4
			data='La clave de acceso es incorrecta'
	else:
		est=4
		data='fail'
	exito={'resultado':data,'estado':est,'concepto':conceptoRecibo,'nroRecibo':nroRecibo,'saldo':str(saldoTotalRecibo),'tc':str(tcRecibo),'importe':str(importeRecibo),'importeDS':str(importeReciboDolarizadoSolarizado)}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)


@login_required#----
@transaction.atomic
def CtaCteRetirarPorPeticion_operador(request):#encargado de crear cta cte
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	tcRecibo=''
	importeRecibo=''
	importeReciboDolarizadoSolarizado=''
	if request.is_ajax:
		idPeticion=request.GET.get('idpeticion','')
		estadoConf=request.GET.get('estado','')
		tipoC=request.GET.get('tc','')
		if PeticionesCtaCtes.objects.filter(pk=idPeticion,estado='CONFIRMADO').exists():
			PCtaCte=PeticionesCtaCtes.objects.get(pk=idPeticion)
			OCtaCte=CtaCte.objects.filter(pk=PCtaCte.idctacte.pk)[:1].values('id_cliente')
			OCliente=Cliente.objects.get(pk=OCtaCte[0]['id_cliente'])
			IdCtaCte=PCtaCte.idctacte.pk
			montoRetiro=PCtaCte.monto
			interes=PCtaCte.interesSobregiro
			nroDias=PCtaCte.nroDiasSobregiro
			comision=PCtaCte.comision
			observaciones=''
			nombre=OCliente.nombre
			ap=OCliente.Apellido_paterno
			am=OCliente.Apellido_materno
			moneda=PCtaCte.tipoMoneda
			usr=request.user.username
			fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
			C= Cajas.objects.get(id_usuario__usuario=usr)

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

			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)

			if montoRetiro !='' and montoRetiro != None:
				montoRetiro = ConvertirDecimal(montoRetiro)
				if montoRetiro>0:
					try:
						with transaction.atomic():
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							MontosAutorizado=ConfiguracionPeticiones.objects.get(id_oficina=C.id_oficina.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)-float(comision))>=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()
											mcomisionctacte=ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=comision,tipo='retiro')
											mcomisionctacte.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
											conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='S/. '+str(saldoEgreso)
											importeRecibo='S/. '+str(montoRetiro)
											est=1
											data='exito'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),fechaCierre=fechaActual)
													PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
													conceptoRecibo='Retiro de dinero dolarizado de la Cta Cte Nro. '+str(IdCtaCte)
													nroRecibo=str(numeroR)
													saldoTotalRecibo='S/. '+str(saldoEgreso)
													importeRecibo='S/. '+str(montoRetiro)
													importeReciboDolarizadoSolarizado='US$. '+str(montoDolarizado)
													#importeRecibo='$/. '+str(montoDolarizado)
													tcRecibo=str(tipoC)
													est=1
													data='exito'
												else:
													est=4
													data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
											conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='US$. '+str(saldoEgreso)
											importeRecibo='US$. '+str(montoRetiro)
											est=1
											data='exito' 
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),fechaCierre=fechaActual)
													PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
													conceptoRecibo='Retiro de dinero solarizado de la Cta Cte Nro. '+str(IdCtaCte)
													nroRecibo=str(numeroR)
													saldoTotalRecibo='US$. '+str(saldoEgreso)
													importeRecibo='US$. '+str(montoRetiro)
													importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
													#importeRecibo='S/. '+str(montoSolarizado)
													tcRecibo=str(tipoC)
													est=1
													data='exito'
												else:
													est=4
													data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
											conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='S/. '+str(saldoEgreso)
											importeRecibo='S/. '+str(montoRetiro)
											est=1
											data='exito'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
													PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
													conceptoRecibo='Retiro con Sobregiro Dolarizado de Cta Cte Nro. '+str(IdCtaCte)
													nroRecibo=str(numeroR)
													saldoTotalRecibo='S/. '+str(saldoEgreso)
													importeRecibo='S/. '+str(montoRetiro)
													importeReciboDolarizadoSolarizado='US$. '+str(montoDolarizado)
													#importeRecibo='$/. '+str(montoDolarizado)
													tcRecibo=str(tipoC)
													est=1
													data='exito'
												else:
													est=4
													data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
											conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='US$. '+str(saldoEgreso)
											importeRecibo='US$. '+str(montoRetiro)
											est=1
											data='exito'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
													PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
													conceptoRecibo='Retiro con Sobregiro Solarizado de Cta Cte Nro. '+str(IdCtaCte)
													nroRecibo=str(numeroR)
													saldoTotalRecibo='US$. '+str(saldoEgreso)
													importeRecibo='US$. '+str(montoRetiro)
													importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
													#importeRecibo='S/. '+str(montoSolarizado)
													tcRecibo=str(tipoC)
													est=1
													data='exito'
												else:
													est=4
													data='Saldo insuficiente en la caja de soles'
							else:
								est=4
								data='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'		

					except IntegrityError:
						est=4
						data=str(sys.exc_info()[1])
					except:
						est=4
						data=str(sys.exc_info()[1])
					
				else:
					est=4
					data='Monto ingresado es incorrecto'

			else:
				est=4
				data='Monto ingresado es incorrecto'
		else:
			est=4
			data='El monto no se puede retirar, porque no esta autorizado'
	else:
		est=4
		data='fail'
	exito={'resultado':data,'estado':est,'concepto':conceptoRecibo,'nroRecibo':nroRecibo,'saldo':str(saldoTotalRecibo),'tc':str(tcRecibo),'importe':str(importeRecibo),'importeDS':str(importeReciboDolarizadoSolarizado)}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CtaAhorrosRetirar(request):#encargado de crear cta ahorros
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	tcRecibo=''
	importeRecibo=''
	importeReciboDolarizadoSolarizado=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		montoRetiro=request.GET.get('montoretiro','')
		observaciones=request.GET.get('observaciones','')
		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','')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		G= Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk) 

		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():
						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()
										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)
										est=1
										data='exito'
									else:
										if estadoConf==0 or estadoConf=='0':
											est=3
											data='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_ctacte=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()
												mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
												est=1
												data='exito'
											else:
												est=4
												data='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= CtaCteMovimientos(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()
										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)
										est=1
										data='exito'
									else:
										if estadoConf==0 or estadoConf=='0':
											est=3
											data='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()
												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)
												est=1
												data='exito'
											else:
												est=4
												data='Saldo insuficiente en la caja de soles'

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

								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()
										mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
										est=1
										data='exito'
										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':
											est=3
											data='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()
												mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
												est=1
												data='exito'
												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:
												est=4
												data='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()
										mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
										est=1
										data='exito'
										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':
											est=3
											data='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()
												mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
												est=1
												data='exito'
												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:
												est=4
												data='Saldo insuficiente en la caja de soles'

						else:
							est=4
							data='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'
										
				except IntegrityError:
					est=4
					data=str(sys.exc_info()[1])
				except:
					est=4
					data=str(sys.exc_info()[1])
				
			else:
				est=4
				data='Monto ingresado es incorrecto'

		else:
			est=4
			data='Monto ingresado es incorrecto'
		
	else:
		est=4
		data='fail'
	exito={'resultado':data,'estado':est,'concepto':conceptoRecibo,'nroRecibo':nroRecibo,'saldo':str(saldoTotalRecibo),'tc':str(tcRecibo),'importe':str(importeRecibo),'importeDS':str(importeReciboDolarizadoSolarizado)}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearCtaCte_view(request):
	IdCliente=request.POST.get('IdCliente')
	TipoPersona=request.POST.get('TipoPersona')
	res={}
	res['IdTransf']=IdCliente
	dato =[res]
	dato1=[]
	exito=''
	return render(request,"CrearCtaCte.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def CrearCtaAhorros_view(request):
	IdCliente=request.POST.get('IdCliente')
	TipoPersona=request.POST.get('TipoPersona')
	res={}
	res['IdTransf']=IdCliente
	dato =[res]
	dato1=[]
	exito=''
	return render(request,"CrearCtaAhorros.html",{"resultado":exito} )


@login_required
@transaction.atomic
def CrearCtaCte_operador(request):#encargado de crear cta cte
	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('DniCli','')
	NombreCliente= request.POST.get('NombreCli','')
	A_paternoCliente= request.POST.get('PaternoCli','')
	A_maternoCliente= request.POST.get('MaternoCli','')
	TelefonoCli= request.POST.get('TelefonoCli','')
	DireccionCli= request.POST.get('DirCli')
	EmailCli= request.POST.get('EmailCli','')
	MontoApertura= request.POST.get('montoapertura')
	Moneda= request.POST.get('Combomoneda','')
	Observacion = request.POST.get('observacion','')
	comision = request.POST.get('comision','')
	FechaNacimiento = request.POST.get('fechaNa')
	usr=request.user.username
	cargo =''
	nombreRecibo=NombreCliente+" "+A_paternoCliente+" "+A_maternoCliente

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

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

	montoRecibo=str(MontoApertura)
	nroR=0
	comisionRecibo=str(comision)
	montoTotalRecibo=str(ConvertirDecimal(MontoApertura)+ConvertirDecimal(comision))
	monedaRecibo=Moneda
	conceptoDetalleRecibo="Apertura de Cta. Cte. en "+ Moneda.upper()+ " "+Observacion
	dniRecibo=DniRucCliente[:4]+"****"
	oficinaRecibo=''
	fechaActual = time.strftime("%Y-%m-%d")
	horaActual = time.strftime("%H:%M:%S")
	exito='' #en caso de ser exitosa la 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 NombreCliente != None:
		if DniRucCliente ==''or DniRucCliente == None:
			DniRucCliente='00000000'

		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,fecha_nacimiento=FechaNacimiento,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
				nroR=numeroR
				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=ConvertirDecimal(saldo)+ConvertirDecimal(comision))
					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+comision,moneda=Moneda,observaciones=Observacion,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=FechaNacimiento)
					rctacte.save()
					mctacte= CtaCteMovimientos(id_ctacte=rctacte,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos=conceptoDetalleRecibo,tipoDocumento='R/I',nroRecibo=numeroR,comision=comision,aux1=ctacte.pk,tabla='TCajaDebe')
					mctacte.save()
					utc=ultimo_tc_dolar('debe')
					DebeDo= DebeDolar(idCajaDebe= ctacte,tipo_cambio=utc,monto=MontoApertura+comision)
					DebeDo.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)
					saldo= SaldoSoles+Ingres
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=ConvertirDecimal(saldo)+ConvertirDecimal(comision))
					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+comision,moneda=Moneda,observaciones=Observacion,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=FechaNacimiento)
					rctacte.save()
					mctacte= CtaCteMovimientos(id_ctacte=rctacte,id_usuario=C.id_usuario,montoDeposito=Ingres,saldo=Ingres,observacionesMovimientos=conceptoDetalleRecibo,tipoDocumento='R/I',nroRecibo=numeroR,comision=comision,aux1=ctacte.pk,tabla='TCajaDebe')
					mctacte.save()
					exito='exito'
				else:
					exito='fail'


		except IntegrityError:
			exito='fail'
		except:
			exito=str(sys.exc_info()[1])
	return render(request,"CrearCtaCte_operador.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":nombreRecibo,"oficinaRecibo":oficinaRecibo,"montoRecibo":montoRecibo,"comisionRecibo":comisionRecibo,"montoTotalRecibo":montoTotalRecibo,"monedaRecibo":monedaRecibo,"conceptoDetalleRecibo":conceptoDetalleRecibo,"nroRecibo":nroR,"dniRecibo":dniRecibo,"fechaRecibo":fechaActual,"horaRecibo":horaActual} )


@login_required
@transaction.atomic
def CrearCtaAhorros_operador(request):#encargado de crear cta cte
	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('DniCli','')
	NombreCliente= request.POST.get('NombreCli')
	A_paternoCliente= request.POST.get('PaternoCli')
	A_maternoCliente= request.POST.get('MaternoCli','')
	TelefonoCli= request.POST.get('TelefonoCli','')
	DireccionCli= request.POST.get('DirCli')
	EmailCli= request.POST.get('EmailCli','')
	MontoApertura= request.POST.get('montoapertura')
	Moneda= request.POST.get('Combomoneda')
	comision = request.POST.get('comision','')
	frecNroDias=request.POST.get('ComboFrecuenciaNroDias')
	NroDias=request.POST.get('nroDias','')
	frecInteres=request.POST.get('ComboFrecuenciaInteres')
	Interes= request.POST.get('interes')
	Observacion = request.POST.get('observacion','')
	FechaNacimiento = request.POST.get('fechaNa')
	transac_= request.POST.get('transac')
	usr=request.user.username
	cargo =''
	transac=''
	nombreRecibo=''
	conceptoDetalleRecibo=''

	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

	dniRecibo=DniRucCliente[:4]+"****"
	oficinaRecibo=''
	fechaActual = time.strftime("%Y-%m-%d")
	horaActual = time.strftime("%H:%M:%S")
	exito='' #en caso de ser exitosa la 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 NombreCliente != None:
		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():
				confi= conf_permisos_Cajas.objects.select_for_update().filter(id_caja=C.pk).values('pk','aux1')
				if str(confi[0]['aux1']) != str(transac_):
					conf_permisos_Cajas.objects.filter(id_caja=C.pk).update(aux1=transac_)
					transac= str(confi[0]['aux1'])
					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)
						oficinaRecibo=O1.nombre_oficina
						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)
						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)
						oficinaRecibo=O1.nombre_oficina
						exito='exito'
					else:
						exito='fail'
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito='Cuenta de Ahorros Repetida!'

		except IntegrityError:
			exito='fail'
		except:
			exito='fail1'+ str(sys.exc_info()[0])
	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,"CrearCtaAhorros_operador.html",{"resultado":exito,"cargo":cargo,"nombreRecibo":nombreRecibo,"oficinaRecibo":oficinaRecibo,"montoRecibo":montoRecibo,"comisionRecibo":comisionRecibo,"montoTotalRecibo":montoTotalRecibo,"monedaRecibo":monedaRecibo,"conceptoDetalleRecibo":conceptoDetalleRecibo,"nroRecibo":nroR,"dniRecibo":dniRecibo,"fechaRecibo":fechaActual,"horaRecibo":horaActual} )



@login_required
@transaction.atomic
def CrearCtaCte_operador_view(request):
	exito=''
	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'
	except:
		cargo =''
	return render(request,"CrearCtaCte_operador.html",{"cargo":cargo,"resultado":exito} )

@login_required
@transaction.atomic
def CrearCtaAhorros_operador_view(request):
	exito=''
	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'
	except:
		cargo =''
	return render(request,"CrearCtaAhorros_operador.html",{"cargo":cargo,"resultado":exito} )


@login_required
@transaction.atomic
def CtaCteDepositar_operador(request):#encargado de crear cta cte
	data=''
	data1=''
	dataNro=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		idCtaCteM=request.GET.get('idctactem','')
		montoDeposito=request.GET.get('montodeposito','')
		observaciones=request.GET.get('observaciones','')
		comision=request.GET.get('comision','')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")
		C= Cajas.objects.get(id_usuario__usuario=usr)

		if comision=='' or comision==None:
			comision=0

		if montoDeposito !='' and montoDeposito != None:
			montoDeposito = ConvertirDecimal(montoDeposito)
			try:
				with transaction.atomic():
					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= 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.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)
							ctacte= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' 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')
							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='Abono a Cta Cte Nro. '+str(IdCtaCte),tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=ctacte.pk,comision=comision)
							mctacte.save()
							mcomisionctacte=ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=comision,tipo='abono')
							mcomisionctacte.save()
							aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).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)
							data1='Abono a Cta Cte Nro. '+str(IdCtaCte)
							data='exito'
						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)
							ctacte= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' 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')
							ctacte.save()
							utc=ultimo_tc_dolar('debe')
							DebeDo= DebeDolar(idCajaDebe= ctacte,tipo_cambio=utc,monto=ConvertirDecimal(montoDeposito))
							DebeDo.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='Abono a Cta Cte Nro. '+str(IdCtaCte),tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=ctacte.pk,comision=comision)
							mctacte.save()
							mcomisionctacte=ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=comision,tipo='abono')
							mcomisionctacte.save()
							aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).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)
							data1='Abono a Cta Cte Nro. '+str(IdCtaCte)
							data='exito'
					else:
						#------- sobregiro --------
						
						ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte,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='CtaCteMovimientos',conceptoDetalle='Deposito en Cta Cte '+str(IdCtaCte)+' 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)))

						
						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=(ConvertirDecimal(saldoUMov)-ConvertirDecimal(interesMoraSobregiro)),observacionesMovimientos='Deposito en Cta Cte Nro. '+str(IdCtaCte)+' <Pago de Sobregiro>',auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR),tabla='TCajaDebe',aux1=cd.pk,comision=comision)
						mctacte.save()
						mcomisionctacte=ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=comision,tipo='abono')
						mcomisionctacte.save()
						aux= CtaCte.objects.filter(pk=IdCtaCte).update(saldo=saldoUMovAhora,fechaCierre=fechaActual)

						if moneda=='soles':
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoSoles)+float(montoDeposito)+float(comision),fecha=fechaActual)
						else:
							utc=ultimo_tc_dolar('debe')
							DebeDo= DebeDolar(idCajaDebe= cd,tipo_cambio=utc,monto=ConvertirDecimal(montoDeposito))
							DebeDo.save()
							SaldoDisponibleCajas.objects.select_for_update().filter(pk= ObjSaldoCaja.pk).update(saldo_soles=float(SaldoDolares)+float(montoDeposito)+float(comision),fecha=fechaActual)


						#montoSobregiroRestante=(montoSobregiroRestante+interesMoraSobregiro)-montoDeposito
						data1='Deposito en Cta Cte Nro. '+str(IdCtaCte)+' <Pago de Sobregiro>'
						data='exito'
			except IntegrityError:
				data1='fail'
				data=str(sys.exc_info()[1])
			except:
				data1='fail'
				data=str(sys.exc_info()[1])
		else:
			data='Monto ingresado es incorrecto'
	else:
		data="fail"

	exito={'resultado':data,'msg':data1,'nro':dataNro}
	resultado= json.dumps(exito)
	mimetype="application/json" 
	return HttpResponse(resultado,mimetype)


@login_required
@transaction.atomic
def CtaAhorrosDepositar_operador(request):#encargado de crear cta ahorros
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		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','')
		moneda=request.GET.get('moneda','')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")

		C= Cajas.objects.get(id_usuario__usuario=usr)

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

		try:
			with transaction.atomic():
				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= CtaAhorros.objects.get(pk=IdCtaAhorros)
				if ObjSaldo.saldo>=0:
					C1= Cajas.objects.get(pk=C.pk)#origen
					O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
					ctaahorros= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Deposito en Cta Ahorros '+IdCtaAhorros+' 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')
					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)),subMontoDeposito=montoDeposito,interesGanado=0,observacionesMovimientos=observaciones,auxIG=0,auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR))
					mctaahorros.save()
					aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=(float(ObjSaldo.saldo)+float(montoDeposito)),fechaCierre=fechaActual)
				else:
					#sobregiro? pagando intereses?
					ctaahorros = CtaAhorrosMovimientos.objects.filter(id_ctaahorros=IdCtaAhorros).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro','pk').reverse()[:1]
					saldoUMov=ObjSaldo.saldo
					montoSobregiroRestante=ObjSaldo.saldo
					ctaahorros_ = CtaAhorrosMovimientos.objects.filter(id_ctaahorros=IdCtaAhorros).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro','pk').reverse()[:1]
					sobregiroNro=ctaahorros_[0]['sobregiroNro']
					interesSobregiro=ctaahorros_[0]['interesSobregiro']
					nroDiasSobregiro=ctaahorros_[0]['nroDiasSobregiro']
					if interesSobregiro=='' or interesSobregiro==None:
						interesSobregiro=0
					if nroDiasSobregiro=='' or nroDiasSobregiro==None:
						nroDiasSobregiro=0

					fechaDelSobregiro=ctaahorros_[0]['fechaHora'].strftime("%d-%m-%Y")
					interesMoraSobregiro=0
					saldoConMoraSobregiro=0
					formato_fecha = "%d-%m-%Y"
					fecha_inicial = datetime.strptime(str(fechaDelSobregiro), formato_fecha)
					fecha_final = datetime.strptime(str(fechaActual_), formato_fecha)
					diferencia = fecha_final-fecha_inicial
					nroDiasExcedidosSobregiro=diferencia.days
					nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro-nroDiasSobregiro
					
					if montoSobregiroRestante>0:
						if nroDiasExcedidosSobregiro:
							if float(montoSobregiroRestante)-montoDeposito<=0:
								interesMoraSobregiro=float(montoSobregiroRestante)*(float(interesSobregiro)/100)
								interesMoraSobregiro=interesMoraSobregiro*nroDiasExcedidosSobregiro
							else:
								interesMoraSobregiro=float(montoDeposito)*(float(interesSobregiro)/100)
								interesMoraSobregiro=interesMoraSobregiro*nroDiasExcedidosSobregiro
						else:
							nroDiasExcedidosSobregiro=0

						montoSobregiroRestante=float(montoSobregiroRestante)-float(montoDeposito)
						if montoSobregiroRestante<=0:
							montoSobregiroRestante=0

						subMontoDeposito=float(ObjSaldo.saldo)+float(montoDeposito)
						if subMontoDeposito<0:
							subMontoDeposito=0

						C1= Cajas.objects.get(pk=C.pk)#origen
						O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
						ctaahorros= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Deposito en Cta Ahorros '+IdCtaAhorros+' 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')
						ctaahorros.save()
						saldoUMovAhora=float(ObjSaldo.saldo)+float(montoDeposito)
						octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
						mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=saldoUMovAhora,subMontoDeposito=subMontoDeposito,interesGanado=0,sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiroRestante,nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro,interesMoraSobregiro=interesMoraSobregiro,saldoConMoraSobregiro=float(saldoUMov)-float(interesMoraSobregiro), observacionesMovimientos='Pago de sobregiro '+observaciones,auxIG=0,auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR))
						mctaahorros.save()
						aux= CtaAhorros.objects-select_for_update().filter(pk=IdCtaAhorros).update(saldo=float(saldoUMovAhora),fechaCierre=fechaActual)
						data='exito'

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

						montoSobregiroRestante=0
						subMontoDeposito=float(ObjSaldo.saldo)+float(montoDeposito)
						
						if subMontoDeposito<0:
							subMontoDeposito=0
						
						C1= Cajas.objects.get(pk=C.pk)#origen
						O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
						ctaahorros= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='CtaAhorrosMovimientos',conceptoDetalle='Deposito en Cta Ahorros '+IdCtaAhorros+' 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')
						ctaahorros.save()
						saldoUMovAhora=float(ObjSaldo.saldo)+float(montoDeposito)
						octaahorros= CtaAhorros.objects.get(pk=IdCtaAhorros)
						mctaahorros= CtaAhorrosMovimientos(id_ctaahorros=octaahorros,id_usuario=C.id_usuario,montoDeposito=montoDeposito,saldo=saldoUMovAhora,fechaAux=fechaActual, subMontoDeposito=subMontoDeposito,interesGanado=0,sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiroRestante,nroDiasExcedidosSobregiro=nroDiasExcedidosSobregiro,interesMoraSobregiro=interesMoraSobregiro,saldoConMoraSobregiro=float(saldoUMov)-float(interesMoraSobregiro), observacionesMovimientos='Pago de intereses de sobregiro '+observaciones,auxIG=0,auxSD=ObjSaldo.saldo,tipoDocumento='R/I',nroRecibo=str(numeroR))
						mctaahorros.save()
						aux= CtaAhorros.objects.select_for_update().filter(pk=IdCtaAhorros).update(saldo=float(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= float(SaldoDolares)+float(montoDeposito)
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldo,fecha=fechaActual)
					data='exito'
				else:
					saldo=float(SaldoSoles)+float(montoDeposito)
					SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldo,fecha=fechaActual)
					data='exito'				

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


#**************************** reimprimir cierre *******************************
@login_required
def reimprimir_cierre_view(request):
	tex_sis=request.POST.get('SIS')
	tex_sid = request.POST.get('SID')
	tex_is= request.POST.get('IS')
	tex_id = request.POST.get('ID')
	tex_es = request.POST.get('ES')
	tex_ed = request.POST.get('ED')
	tex_ss = request.POST.get('SS')
	tex_sd= request.POST.get('SD')
	tex_f1 = request.POST.get('F1')
	tex_f2= request.POST.get('F2')
	tex_obs=request.POST.get('obs')
	return render(request,"reimprimir_cierre.html",{"SIS":tex_sis,"SID":tex_sid,"IS":tex_is,"ID":tex_id,"ES":tex_es,"ED":tex_ed,"SS":tex_ss,"SD":tex_sd,"F1":tex_f1,"F2":tex_f2,"obs":tex_obs} )

#************************** comprar dolar **************************************
def ultimo_tc_dolar(tipo):#tipo('debe','haber')
	tc=None
	if tipo!= None and tipo!='':
		if tipo =='debe':
			udb= DebeDolar.objects.latest("pk")
			tc=float(udb.tipo_cambio)
		elif tipo=='haber':
			uhb= HaberDolar.objects.latest("pk")
			tc=float(uhb.tipo_cambio)
	return tc

@login_required
@transaction.atomic
def Comprar_dolar_view(request):
	exito=''
	idCliente=request.POST.get('IdCliente','')
	TipoPersona= request.POST.get('TipoPersona','')
	dni_ruc= request.POST.get('DNIRUC','')
	nombre_razon=request.POST.get('Nombre','')
	paterno=request.POST.get('Paterno','')
	materno=request.POST.get('Materno','')
	tipo_cambio=request.POST.get('tipoCambio')
	monto_dolar=request.POST.get('montodolar')
	monto_soles=request.POST.get('montosoles')
	obs=request.POST.get('obs','')
	transac_= request.POST.get('transac')
	recibo_cliente=nombre_razon +' '+paterno+' '+materno
	fechaActual = datetime.datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.datetime.now().strftime("%H:%M %p")
	recibo_pagado_soles=monto_soles
	transac=''
	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 monto_soles != None and  monto_soles != '':
			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
					monto_pagado = float(tipo_cambio) * float(monto_dolar)
					recibo_pagado_soles=monto_pagado
					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_pagado:
					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='CompraDolar',conceptoDetalle='Compra de Dolar',tipoDocumento='R/I',cantidadDinero=monto_dolar,moneda='dolares',tipo_cambio=tipo_cambio,observaciones=obs,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
					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='CompraDolar',conceptoDetalle='Pago por Compra de Dolar',tipoDocumento='R/E',cantidadDinero=monto_pagado,moneda='soles',estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroRe))
					Haber.save()
					#cliente
					idcli=0
					if QuitarEspacios(nombre_razon) != '' and QuitarEspacios(nombre_razon) != None:
						if idCliente == '' or idCliente== None:
							sq= Cliente.objects.filter(nombre=nombre_razon,Apellido_paterno=paterno,Apellido_materno=materno).values('pk')
							if sq.count()==0:
								cln = Cliente(dni=dni_ruc,nombre=nombre_razon,Apellido_paterno=paterno,Apellido_materno=materno,tipo_persona=TipoPersona,idCaja=C.pk)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
						idcli=idCliente
					Compra = CompraDolarSt(idCajaDebe=Debe,idCajaHaber=Haber,id_cliente=idcli,tipo_persona_cliente=TipoPersona,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()
					SaldoDisponibleCajas.objects.select_for_update().filter(pk=cons_saldo.pk).update(saldo_dolares=(SaldoDolares + float(monto_dolar)),saldo_soles=(SaldoSoles - monto_pagado))
					exito='exito'
					#else:
					#	exito="saldo insuficiente"
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		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'
	except:
		cargo =''
		if transac_ =='0':
			transac='1'
		else:
			transac='0'
		exito= str(sys.exc_info()[1])
	return render(request,"CompraDolar.html",{"cargo":cargo,"resultado":exito,"r_cliente":recibo_cliente,"r_dniruc":dni_ruc,"monto_dolar":monto_dolar,"monto_soles":recibo_pagado_soles,"tipo_cambio":tipo_cambio,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

@login_required
@transaction.atomic
def Vender_dolar_view(request):
	exito=''
	le=0
	idCliente=request.POST.get('IdCliente','')
	TipoPersona= request.POST.get('TipoPersona','')
	dni_ruc= request.POST.get('DNIRUC','')
	nombre_razon=request.POST.get('Nombre','')
	paterno=request.POST.get('Paterno','')
	materno=request.POST.get('Materno','')
	tipo_cambio=request.POST.get('tipoCambio')
	monto_soles=request.POST.get('montosoles')
	monto_dolar=request.POST.get('montodolar')
	obs=request.POST.get('obs','')
	transac_= request.POST.get('transac')
	recibo_cliente=nombre_razon +' '+paterno+' '+materno
	fechaActual = datetime.datetime.now().strftime("%Y-%m-%d")
	horaActual = datetime.datetime.now().strftime("%H:%M %p")
	recibo_cobrado_soles=monto_soles
	transac=''
	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 monto_soles != None and  monto_soles != '':
			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

					monto_cobrado= float(tipo_cambio) * float(monto_dolar)
					recibo_cobrado_soles=monto_cobrado
					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_dolar):
					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='VentaDolar',conceptoDetalle='Venta de Dolar',tipoDocumento='R/I',cantidadDinero=monto_cobrado,moneda='soles',observaciones=obs,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
					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='VentaDolar',conceptoDetalle='Pago por Venta de Dolar',tipoDocumento='R/E',cantidadDinero=monto_dolar,tipo_cambio=tipo_cambio,moneda='dolares',estadoTransaccion='activo',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroRe))
					Haber.save()
					idcli=0
					if QuitarEspacios(nombre_razon) != '' and QuitarEspacios(nombre_razon) != None:
						if idCliente == '' or idCliente== None:
							sq= Cliente.objects.filter(nombre=nombre_razon,Apellido_paterno=paterno,Apellido_materno=materno).values('pk')
							if sq.count()==0:
								cln = Cliente(dni=dni_ruc,nombre=nombre_razon,Apellido_paterno=paterno,Apellido_materno=materno,tipo_persona=TipoPersona,idCaja=C.pk)
								cln.save()
								idCliente = str(cln.pk)
							else:
								lista5= list(sq)
								idCliente= str(lista5[0]['pk'])
						idcli=idCliente
					Venta = VentaDolarSt(idCajaDebe=Debe,idCajaHaber=Haber,id_cliente=idcli,tipo_persona_cliente=TipoPersona,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()
					SaldoDisponibleCajas.objects.select_for_update().filter(pk=cons_saldo.pk).update(saldo_dolares=(SaldoDolares - float(monto_dolar)),saldo_soles=(SaldoSoles + monto_cobrado))
					exito='exito'
					#else:
					#	exito="saldo insuficiente"
				else:
					if transac_ =='0':
						transac='1'
					else:
						transac='0'
					exito=' Transaccion repetida!'
		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'
	except:
		cargo =''
		if transac_ =='0':
			transac='1'
		else:
			transac='0'
		exito= str(sys.exc_info()[1])+str(le)
	return render(request,"VentaDolar.html",{"cargo":cargo,"resultado":exito,"r_cliente":recibo_cliente,"r_dniruc":dni_ruc,"monto_dolar":monto_dolar,"monto_soles":recibo_cobrado_soles,"tipo_cambio":tipo_cambio,"horaRecibo":horaActual,"fechaRecibo":fechaActual} )

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

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Mant_CrearPersonal_view(request):
	Nombres = request.POST.get('Nombre')
	DNIPer=request.POST.get('DNIPersonal')
	A_paterno = request.POST.get('APaterno')
	A_materno = request.POST.get('AMaterno')
	Emailp= request.POST.get('Email')
	Observacionp = request.POST.get('obs')
	Usuariop = request.POST.get('User')
	Passwordp =request.POST.get('Password')
	FechaContratacion = request.POST.get('fechaContratPers')
	Sueldop =request.POST.get('sueldoPersonal')
	Telefonop =request.POST.get('telefonoPersonal')
	Cargop =request.POST.get('comboCargo')
	Estadop =request.POST.get('comboEstado')
	exito=''
	Estadog=''

	if Estadop== 'activo':
		Estadop=True
		Estadog='activo'
	elif Estadop=='desactivo':
		Estadop=False
		Estadog='desactivo'
	else:
		Estadop=False
		Estadog='desactivo'

	if Cargop=='subgerente':
		if Usuariop != None:
			try:
				with transaction.atomic():
					salario = ConvertirDecimal(Sueldop)
					user = User.objects.create_user(username=Usuariop, email=Emailp, password=Passwordp)
					user.save()
					g = Group.objects.get(name='gerente') 
					g.user_set.add(user)
					P= Personal(dni=DNIPer,nombre= Nombres,Apellido_paterno=A_paterno,Apellido_materno=A_materno,telefono=Telefonop,email=Emailp,cargo="subgerente",sueldo=salario,fecha_contratacion=FechaContratacion,observacion=Observacionp,estado=Estadop,usuario=Usuariop,password=Passwordp)
					P.save()
					G1= Gerente(nombre=Nombres,Apellido_paterno=A_paterno,Apellido_materno=A_materno,email=Emailp,observacion=Observacionp,estado=Estadog,usuario=Usuariop,password=Passwordp,id_usuario=P)
					G1.save()
					GC = Gerente_conf(id_gerente=G1,subGerente="si",estado=Estadog,sueldo=salario,telefono=Telefonop)
					GC.save()
					exito='exito'
			except IntegrityError:
				exito='fail'
			except:
				exito='fail'+ str(sys.exc_info()[1])
	else:
		if DNIPer != None:
			try:
				with transaction.atomic():
					salario = ConvertirDecimal(Sueldop)
					user = User.objects.create_user(username=Usuariop, email=Emailp, password=Passwordp)
					user.save()
					g = Group.objects.get(name='operador')  
					g.user_set.add(user)
					P1= Personal(dni=DNIPer,nombre=Nombres,Apellido_paterno=A_paterno,Apellido_materno=A_materno,telefono=Telefonop,email=Emailp,cargo=Cargop,sueldo=salario,fecha_contratacion=FechaContratacion,observacion=Observacionp,estado=Estadop,usuario=Usuariop,password=Passwordp)
					P1.save();
					exito='exito'
			except IntegrityError:
				exito='fail'+ str(sys.exc_info()[1])
			else:
				exito='exito'
	return render(request,"Personales.html",{"resultado":exito} )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AsignarCajaSubgerente_ajax_view(request):
	pkSG = request.GET.get('pkSG')
	exito=''
	try:
		with transaction.atomic():
			if Gerente_conf.objects.filter(id_gerente=pkSG).exists():
				cg=Gerente_conf.objects.get(id_gerente=pkSG)
				if not Cajas.objects.filter(id_usuario=cg.id_gerente.id_usuario).exists():
					O= Oficina(nombre_oficina="Gerencia",descripcion="oficina subgerencia",id_usuario=cg.id_gerente.id_usuario)
					O.save()
					C= Cajas(nombre="caja Subgerencia",id_oficina=O,id_usuario=cg.id_gerente.id_usuario)
					C.save()
					Nr= NroReciboCaja(id_oficina= O,id_caja=C,nroRE=0,nroRI=0,nroREM= 0,nroRIM=0,nroST= 0,nroPT=0,nroSI=0,nroPI=0)
					Nr.save()
					NLote= NroLoteOficina(id_nroRecibo= Nr,nroLote=0,nroLoteVenta=0)
					NLote.save()
					S=SaldoDisponibleCajas(id_oficina=O,id_caja=C,saldo_soles=0,saldo_dolares=0)
					S.save()
					SM=SaldoDisponibleCajaMaterial(id_oficina=O,id_caja=C,saldo_Material=0)
					SM.save()
					exito='exito'
				else:
					exito='Este usuario, ya tiene Caja asignado'
			else:
				exito='seleccione a un subgerente adecuado'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required#----
@transaction.atomic
def CtaCteRetirarPorPeticion_administrador(request):#encargado de crear cta cte
	data=''
	resultado=''
	if request.is_ajax:
		idPeticion=request.GET.get('idpeticion','')
		if PeticionesCtaCtes.objects.filter(pk=idPeticion,estado='CONFIRMADO').exists(): 
			PCtaCte=PeticionesCtaCtes.objects.get(pk=idPeticion)
			OCtaCte=CtaCte.objects.filter(pk=PCtaCte.idctacte.pk)[:1].values('id_cliente')
			OCliente=Cliente.objects.get(pk=OCtaCte[0]['id_cliente'])
			IdCtaCte=PCtaCte.idctacte.pk
			montoRetiro=PCtaCte.monto
			observaciones=''
			nombre=OCliente.nombre
			ap=OCliente.Apellido_paterno
			am=OCliente.Apellido_materno
			moneda=PCtaCte.tipoMoneda
			usr=request.user.username
			fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
			C= Cajas.objects.get(id_usuario__usuario=usr)

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

			try:
				with transaction.atomic():
					Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					MontosAutorizado=ConfiguracionPeticiones.objects.get(id_oficina=C.id_oficina.pk)
					numeroR = int(Nrecibo.nroRE)+1
					ObjSaldo= CtaCte.objects.get(pk=IdCtaCte)
					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'])

					if	(float(ObjSaldo.saldo)-float(montoRetiro))>=0:
						if moneda=='soles':
							if (SaldoSoles >= montoRetiro):
								NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
								saldoEgreso=SaldoSoles-montoRetiro
								SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_soles=saldoEgreso,fecha=fechaActual)
								C1= Cajas.objects.get(pk=C.pk)#origen
								O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
								cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=numeroR)
								cajah.save()
								octacte= CtaCte.objects.get(pk=IdCtaCte)
								mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(ObjSaldo.saldo)-float(montoRetiro)), observacionesMovimientos=observaciones,auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=numeroR)
								mctacte.save()
								aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo) - float(montoRetiro)),fechaCierre=fechaActual)
								PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
								data='exito'
							else:
								data='saldo insuficiente en la cuenta'
						elif moneda=='dolares':
								if (SaldoDolares>=montoRetiro):
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
									saldoEgreso=SaldoDolares-montoRetiro
									SaldoDisponibleCajas.objects.select_for_update().filter(pk= idSaldo).update(saldo_dolares=saldoEgreso,fecha=fechaActual)
									C1= Cajas.objects.get(pk=C.pk)#origen
									O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
									cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am ,tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=numeroR)
									cajah.save()
									octacte= CtaCte.objects.get(pk=IdCtaCte)
									mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(ObjSaldo.saldo)-float(montoRetiro)), observacionesMovimientos=observaciones,auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=str(numeroR))
									mctacte.save()
									aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo) - float(montoRetiro)),fechaCierre=fechaActual)
									PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
									data='exito'
								else:
									data='saldo insuficiente en la cuenta'

					else:
						if moneda=='soles':
								if (SaldoSoles >= montoRetiro):
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
									saldoEgreso=SaldoSoles-montoRetiro
									if float(ObjSaldo.saldo)>=0 and (float(ObjSaldo.saldo)-float(montoRetiro))<0:
										SaldoDisponibleCajas.objects.select_for_update().filter(pk=idSaldo).update(saldo_soles=saldoEgreso,fecha=fechaActual)
									#sobregiro? pagando intereses?
										ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro').reverse()[:1]
										sobregiroNro=ctacte[0]['sobregiroNro']
										
										montoSobregiro=ctacte[0]['montoSobregiro']
										if montoSobregiro=='' or montoSobregiro==None:
											montoSobregiro=0

										if sobregiroNro=='' or sobregiroNro==None:
											sobregiroNro=1
										else:
											sobregiroNro=ctacte[0]['sobregiroNro']+1

										montoSobregiroRestante=abs(float(ObjSaldo.saldo)-float(montoRetiro))
										interesSobregiro=ctacte[0]['interesSobregiro']
										nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']
										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am+' ',tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=numeroR)
										cajah.save()
										octacte= CtaCte.objects.get(pk=IdCtaCte)
										mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(ObjSaldo.saldo)-float(montoRetiro)),sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiro,interesSobregiro=interesSobregiro,nroDiasSobregiro=nroDiasSobregiro, observacionesMovimientos='sobregiro. '+observaciones,auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=numeroR)
										mctacte.save()
										aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo) - float(montoRetiro)),fechaCierre=fechaActual)
										PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
										data='exito'
									else:
										SaldoDisponibleCajas.objects.select_for_update().filter(pk=idSaldo).update(saldo_soles=saldoEgreso,fecha=fechaActual)
										ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro')[:1]
										sobregiroNro=ctacte[0]['sobregiroNro']
										
										montoSobregiroRestante=ctacte[0]['montoSobregiro']
										if montoSobregiroRestante=='' or montoSobregiroRestante==None:
											montoSobregiroRestante=0

										if sobregiroNro=='' or sobregiroNro==None:
											sobregiroNro=1
										else:
											sobregiroNro=ctacte[0]['sobregiroNro']+1

										interesSobregiro=ctacte[0]['interesSobregiro']
										nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']


										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am+' '+'<Retiro y Sobregiro>',tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=numeroR)
										cajah.save()
										octacte= CtaCte.objects.get(pk=IdCtaCte)
										mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(ObjSaldo.saldo)-float(montoRetiro)),sobregiroNro=sobregiroNro,montoSobregiro=float(montoSobregiroRestante)+float(montoRetiro),nroDiasExcedidosSobregiro= 0,interesMoraSobregiro= 0,saldoConMoraSobregiro= 0, observacionesMovimientos='<otro sobregiro seguido>. '+observaciones,auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=numeroR)
										mctacte.save()
										aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo) - float(montoRetiro)),fechaCierre=fechaActual)
										PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
										data='exito'
									
									'''if float(ObjSaldo.saldo)>=0 and (float(ObjSaldo.saldo)-float(montoRetiro))<0:
										ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).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 = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).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']

										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am+' '+'<Otro Sobregiro>',tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=numeroR)
										cajah.save()
										octacte= CtaCte.objects.get(pk=IdCtaCte)
										mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(ObjSaldo.saldo)-float(montoRetiro)),sobregiroNro=sobregiroNro,montoSobregiro=float(montoSobregiroRestante)+float(montoRetiro),nroDiasExcedidosSobregiro= 0,interesMoraSobregiro= 0,saldoConMoraSobregiro= 0, observacionesMovimientos='<otro sobregiro seguido>. '+observaciones,auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=numeroR)
										mctacte.save()
										aux= CtaCte.objects.filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo) - float(montoRetiro)),fechaCierre=fechaActual)
										PeticionesCtaCtes.objects.filter(pk=idPeticion).update(estado="RETIRADO")
										 '''
								else:
									data='saldo insuficiente en la caja'


						elif moneda=='dolares':
								if (SaldoDolares>=montoRetiro):
									NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
									saldoEgreso=SaldoDolares-montoRetiro
									if float(ObjSaldo.saldo)>=0 and (float(ObjSaldo.saldo)-float(montoRetiro))<0:
										SaldoDisponibleCajas.objects.select_for_update().filter(pk=idSaldo).update(saldo_dolares=saldoEgreso,fecha=fechaActual)
									#sobregiro? pagando intereses?
										ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro').reverse()[:1]
										sobregiroNro=ctacte[0]['sobregiroNro']
										
										montoSobregiro=ctacte[0]['montoSobregiro']
										if montoSobregiro=='' or montoSobregiro==None:
											montoSobregiro=0

										if sobregiroNro=='' or sobregiroNro==None:
											sobregiroNro=1
										else:
											sobregiroNro=ctacte[0]['sobregiroNro']+1

										montoSobregiroRestante=abs(float(ObjSaldo.saldo)-float(montoRetiro))
										interesSobregiro=ctacte[0]['interesSobregiro']
										nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']
										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am+' ',tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=numeroR)
										cajah.save()
										octacte= CtaCte.objects.get(pk=IdCtaCte)
										mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(ObjSaldo.saldo)-float(montoRetiro)),sobregiroNro=sobregiroNro,montoSobregiro=montoSobregiro,interesSobregiro=interesSobregiro,nroDiasSobregiro=nroDiasSobregiro, observacionesMovimientos='sobregiro. '+observaciones,auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=numeroR)
										mctacte.save()
										aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo) - float(montoRetiro)),fechaCierre=fechaActual)
										PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
										data='exito'
									else:
										SaldoDisponibleCajas.objects.select_for_update().filter(pk=idSaldo).update(saldo_dolares=saldoEgreso,fecha=fechaActual)
										ctacte = CtaCteMovimientos.objects.filter(id_ctacte=IdCtaCte).values('pk','saldo','interesSobregiro','nroDiasSobregiro','fechaHora','sobregiroNro','montoSobregiro').order_by('sobregiroNro').reverse()[:1]
										sobregiroNro=ctacte[0]['sobregiroNro']
										
										montoSobregiroRestante=ctacte[0]['montoSobregiro']
										if montoSobregiroRestante=='' or montoSobregiroRestante==None:
											montoSobregiroRestante=0

										if sobregiroNro=='' or sobregiroNro==None:
											sobregiroNro=1
										else:
											sobregiroNro=ctacte[0]['sobregiroNro']+1

										interesSobregiro=ctacte[0]['interesSobregiro']
										nroDiasSobregiro=ctacte[0]['nroDiasSobregiro']


										C1= Cajas.objects.get(pk=C.pk)#origen
										O1= Oficina.objects.get(pk= C.id_oficina.pk)#origen
										cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='CtaCteMovimientos',conceptoDetalle='Retiro de Cta Cte '+str(IdCtaCte)+' del '+nombre+' '+ap+' '+am+' '+'<Retiro y Sobregiro>',tipoDocumento='R/E',cantidadDinero=montoRetiro,moneda=moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=numeroR)
										cajah.save()
										octacte= CtaCte.objects.get(pk=IdCtaCte)
										mctacte= CtaCteMovimientos(id_ctacte=octacte,id_usuario=C.id_usuario,montoRetiro=montoRetiro,saldo=(float(ObjSaldo.saldo)-float(montoRetiro)),sobregiroNro=sobregiroNro,montoSobregiro=float(montoSobregiroRestante)+float(montoRetiro),nroDiasExcedidosSobregiro= 0,interesMoraSobregiro= 0,saldoConMoraSobregiro= 0, observacionesMovimientos='<otro sobregiro seguido>. '+observaciones,auxSD=ObjSaldo.saldo, tipoDocumento='R/E',nroRecibo=numeroR)
										mctacte.save()
										aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=(float(ObjSaldo.saldo) - float(montoRetiro)),fechaCierre=fechaActual)
										PeticionesCtaCtes.objects.select_for_update().filter(pk=idPeticion).update(estado="RETIRADO")
										data='exito'

								else:
									data='saldo insuficiente en la caja'

			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])
	else:
		data="fail"+str(sys.exc_info()[1])
	exito={'resultado':data}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)




@login_required
@transaction.atomic
def configurar_recibo_diseno(request):
	return render(request,"configuracionDisenoRecibo.html" )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurar_oficinasTransGlobales_caja(request):
	conf=request.GET.get('pkConf')
	O=request.GET.get('pkO')
	exito=''
	if conf != None and conf != '':
		try:
			with transaction.atomic():
				Of= Oficina.objects.get(pk=O)
				ca= Cajas.objects.get(id_usuario=Of.id_usuario.pk)
				if conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=O).exists():
					if conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=O,aux2=None).exists():
						aux=conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=O,aux2=None).update(aux1="si",aux2=ca.pk)
					elif conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=O,aux2=str(ca.pk)).exists():
						aux=conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=O,aux2=str(ca.pk)).update(aux1="si")
					else:
						Cn= conf_permisos_Cajas.objects.get(pk=conf)
						C_ofTG= conf_oficinas_para_TransGlobal(id_conf=Cn,id_oficina=Of,aux1="si",aux2=ca.pk)
						C_ofTG.save()
				else:
					Cn= conf_permisos_Cajas.objects.get(pk=conf)
					C_ofTG= conf_oficinas_para_TransGlobal(id_conf=Cn,id_oficina=Of,aux1="si",aux2=ca.pk)
					C_ofTG.save()
				#aux= ConfiguracionPeticiones.objects.filter(pk=id).update(montoSolesCtaCte=MSCC,montoDolaresCtaCte=MDCC,montoSolesCtaAhorros=MSCA,montoDolaresCtaAhorros=MDCA)
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurarTransGlobales_caja(request):
	idc=request.POST.get('pkC')
	transG=request.POST.get('tg')
	transGC=request.POST.get('tgc')
	rta=request.POST.get('rta')
	cf=request.POST.get('cf')
	ce=request.POST.get('ce')
	mt=request.POST.get('mt')
	mt_st=request.POST.get('mt_st')
	vs=request.POST.get('verSaldo')
	ascta=request.POST.get('autSCtaCtes')
	prST=request.POST.get('PerAutRetTR')
	cm=request.POST.get('cm')
	ocm=request.POST.get('ocm')
	vso=request.POST.get('VerSaldoOfi','')
	ci=request.POST.get('CajaInd','')
	eg=request.POST.get('egreso','')
	saalt=request.POST.get('saldoalt','')
	ptsindni=request.POST.get('ptsindni','')
	comiCambioOD=request.POST.get('comiCambioD','')
	filtrodesdeReinicioR=request.POST.get('filtrodesdeReinicio','')
	ver_inter=request.POST.get('verinter','')
	exito=''

	if idc != None:
		try:
			with transaction.atomic():
				C= Cajas.objects.get(pk=idc)
				O=	Oficina.objects.get(pk=C.id_oficina.pk)
				if ConfiguracionExtra_caja.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).exists():
					ConfiguracionExtra_caja.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).update(cierreObligatorio=cf,monto_tope=mt,comision_minima=cm,otros_conceptos_minimo=ocm,extorno_total=ce,ver_saldo=vs,aux1=vso,aux3=eg,aux4=ascta,aux5=transGC,aux6=saalt,aux8=ptsindni,aux9=filtrodesdeReinicioR,cambioO=comiCambioOD,aux11=ver_inter,monto_tope_st=mt_st)
				else:
					OCE=ConfiguracionExtra_caja(id_oficina=O,id_caja=C,cierreObligatorio=cf,monto_tope=mt,comision_minima=cm,otros_conceptos_minimo=ocm,extorno_total=ce,ver_saldo=vs,aux1=vso,aux3=eg,aux4=ascta,aux5=transGC,aux6=saalt,aux8=ptsindni,aux9=filtrodesdeReinicioR,cambioO=comiCambioOD,aux11=ver_inter,monto_tope_st=mt_st)
					OCE.save()

				if conf_permisos_Cajas.objects.filter(id_caja=idc).exists():
					aux=conf_permisos_Cajas.objects.filter(id_caja=idc).update(Trans_global=transG,aux2=rta, aux3=prST)
				else:
					C= Cajas.objects.get(pk=idc)
					CTG= conf_permisos_Cajas(id_caja=C,Trans_global=transG,aux2=rta,aux3=prST)
					CTG.save()
				if caja_independiente.objects.filter(id_caja=idc).exists():
					caja_independiente.objects.filter(id_caja=idc).update(independiente=ci)
				else:
					CIN=caja_independiente(id_caja=C,independiente='no')	
					CIN.save()
				#aux= ConfiguracionPeticiones.objects.filter(pk=id).update(montoSolesCtaCte=MSCC,montoDolaresCtaCte=MDCC,montoSolesCtaAhorros=MSCA,montoDolaresCtaAhorros=MDCA)
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"configGeneralCajas.html",{"resultado":exito} )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurarTiposistema_caja_view(request):
	idc=request.POST.get('pkC')
	tipoSis=request.POST.get('ts')
	cajaDolar=request.POST.get('cd')
	tesoreria=request.POST.get('te')
	compra_tactil=request.POST.get('cota')#compra de material con monitores tactil
	exito=''
	if idc != None:
		try:
			with transaction.atomic():
				C= Cajas.objects.get(pk=idc)
				O=	Oficina.objects.get(pk=C.id_oficina.pk)
				#inicializar caja cambio de moneda
				if not NroReciboCajaCambio.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).exists():
					nrCambio = NroReciboCajaCambio(id_caja=C,id_oficina=C.id_oficina,nroRE=0,nroRI=0)
					nrCambio.save()
				if not SaldoDisponibleCajaCambio.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).exists():
					saldoCambio = SaldoDisponibleCajaCambio(id_caja=C,id_oficina=C.id_oficina,saldo_soles=0,saldo_dolares=0,saldo_euro=0)
					saldoCambio.save()
				if not SaldoInicialCajaCambio.objects.filter(id_caja=idc).exists():
					saldoICambio = SaldoInicialCajaCambio(id_caja=C,saldo_soles=0,saldo_dolares=0,saldo_euro=0)
					saldoICambio.save()
				#-------------------------
				#inicializar caja material
				if not NroReciboCajaMaterial.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).exists():
					nrMaterial = NroReciboCajaMaterial(id_caja=C,id_oficina=C.id_oficina,nroRE=0,nroRI=0,nroREM=0,nroRIM=0)
					nrMaterial.save()
				if not SaldoDisponibleCajaMaterial.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).exists():
					saldoMaterial = SaldoDisponibleCajaMaterial(id_caja=C,id_oficina=C.id_oficina,saldo_soles=0,saldo_dolares=0,saldo_material=0)
					saldoMaterial.save()
				if not SaldoInicialCajaMaterial.objects.filter(id_caja=idc).exists():
					saldoIMaterial = SaldoInicialCajaMaterial(id_caja=C,saldo_soles=0,saldo_dolares=0,saldo_material=0)
					saldoIMaterial.save()
				#***************************************
				if TConfiguracionSistema.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).exists():
					TConfiguracionSistema.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).update(tipoSistema=tipoSis,cajaDolar=cajaDolar,conf3=tesoreria,compra_tactil=compra_tactil)
				else:
					CS=TConfiguracionSistema(id_caja=C,id_oficina=O,tipoSistema=tipoSis,cajaDolar=cajaDolar,conf3=tesoreria,compra_tactil=compra_tactil)	
					CS.save()
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	return render(request,"configSistema.html",{"resultado":exito} )


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def quitar_oficinasTransGlobales_caja(request):
	conf=request.GET.get('pkConf')
	O=request.GET.get('pkO')
	exito=''
	if conf != None and conf != '':
		try:
			with transaction.atomic():
				if conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=O).exists():
					aux=conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=O).update(aux1="no")
				#aux= ConfiguracionPeticiones.objects.filter(pk=id).update(montoSolesCtaCte=MSCC,montoDolaresCtaCte=MDCC,montoSolesCtaAhorros=MSCA,montoDolaresCtaAhorros=MDCA)
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurar_cajaTransGlobales_caja_ajax_view(request):
	conf=request.GET.get('pkConf')
	pkc=request.GET.get('pkc')
	exito=''
	if conf != None and conf != '':
		try:
			with transaction.atomic():
				c=Cajas.objects.get(pk=pkc)
				if conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=c.id_oficina.pk,aux2=c.pk).exists():
					aux=conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=c.id_oficina.pk,aux2=c.pk).update(aux1="si")
				else:
					Cn= conf_permisos_Cajas.objects.get(pk=conf)
					C_ofTG= conf_oficinas_para_TransGlobal(id_conf=Cn,id_oficina=c.id_oficina,aux2=c.pk,aux1="si")
					C_ofTG.save()
				#aux= ConfiguracionPeticiones.objects.filter(pk=id).update(montoSolesCtaCte=MSCC,montoDolaresCtaCte=MDCC,montoSolesCtaAhorros=MSCA,montoDolaresCtaAhorros=MDCA)
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def quitar_cajasTransGlobales_caja_ajax_view(request):
	conf=request.GET.get('pkConf')
	pkc=request.GET.get('pkc')
	exito=''
	if conf != None and conf != '':
		try:
			with transaction.atomic():
				c=Cajas.objects.get(pk=pkc)
				if conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=c.id_oficina.pk,aux2=c.pk).exists():
					aux=conf_oficinas_para_TransGlobal.objects.filter(id_conf=conf,id_oficina=c.id_oficina.pk,aux2=c.pk).update(aux1="no")
				#aux= ConfiguracionPeticiones.objects.filter(pk=id).update(montoSolesCtaCte=MSCC,montoDolaresCtaCte=MDCC,montoSolesCtaAhorros=MSCA,montoDolaresCtaAhorros=MDCA)
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Autorizar_retiro_trans_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if Sol_Aut_Ret_Transferencias.objects.filter(pk=idA,estado='pendiente').exists():
						Sol_Aut_Ret_Transferencias.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',usuario_autorizador='Gerente',id_usuario_aut=g.pk,fecha_aut=datetime.datetime.now())
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#********************************************************************
@login_required
@transaction.atomic
def Autorizar_retiro_trans_personal_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					p= Personal.objects.get(usuario=usr)
					if Sol_Aut_Ret_Transferencias.objects.filter(pk=idA,estado='pendiente').exists():
						soli_autori= Sol_Aut_Ret_Transferencias.objects.get(pk=idA,estado='pendiente')
						if soli_autori.id_user_solicitante.pk != C.id_usuario.pk:
							Sol_Aut_Ret_Transferencias.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',fecha_aut=datetime.datetime.now(),usuario_autorizador='Personal',id_usuario_aut=p.pk)
							exito='exito'
						else:
							exito='Usted no puede Autorizar esta transferencia'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)
#*********************************************************************
def id_generator(size=6, chars=string.ascii_lowercase + string.digits):
	return ''.join(random.choice(chars) for _ in range(size))

@login_required
@transaction.atomic
def solicitud_Autorizacion_retiro_trans_ajax_view(request):
	exito=''
	if request.is_ajax:
		TR=request.GET.get('idTr')
		usr= request.user.username
		try:
			with transaction.atomic():
				if not Sol_Aut_Ret_Transferencias.objects.filter(id_st=TR).exists():
					Solic=SolicitudTransferencia.objects.get(pk=TR)
					Pe= Personal.objects.get(usuario=usr)
					srT=Sol_Aut_Ret_Transferencias(id_st=Solic,codigo_aut=id_generator(),estado='pendiente',id_user_solicitante=Pe)
					srT.save()
					exito='exito'
				else:
					exito='Ya Existe Una Solicitud de Autorizacion'
				
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)









#----------- agregado integral

@login_required
@transaction.atomic
def CrearClienteCompraOperadorModal_view(request):
	Dni = request.POST.get('DniCli')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','DniCli','TipoPersona','NombreCli','PaternoCli','MaternoCli','TelefonoCli','CelularCli','DircCli','fechaNaCli','CuidadNaCli','EmailCli','DremCli')
	Nombre= request.POST.get('NombreCli')
	Apellido_Paterno= request.POST.get('PaternoCli')
	Apellido_Materno= request.POST.get('MaternoCli')
	Telefono = request.POST.get('TelefonoCli')
	Direccion = request.POST.get('DircCli')
	Fecha_Nacimiento = request.POST.get('fechaNaCli')
	Email = request.POST.get('EmailCli')
	Drem = request.POST.get('DremCli')#cambiar a varchar
	exito=''
	if Nombre != None:
		try:
			with transaction.atomic():
				if not Cliente.objects.filter(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno).exists():
					C1 = Cliente(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno,telefono=Telefono,direccion=Direccion,fecha_nacimiento=Fecha_Nacimiento,email=Email,drem=Drem,tipo_persona= TipoPersona,tablaRelacional='TCCM')
					C1.save()
					
				exito='exito'
		except IntegrityError:
			exito= 'fail '+sys.exc_info()[0]
		except:
			exito='fail'+sys.exc_info()[0]
		else:
			exito='exito'
	return render(request,"CierreCompraMaterialOperador.html",{"resultado":exito} )


@login_required
@transaction.atomic
def CrearClienteVentaOperadorModal_view(request):
	Dni = request.POST.get('DniCli')
	TipoPersona=request.POST.get('TipoPersona')#atributos('IdCliente','DniCli','TipoPersona','NombreCli','PaternoCli','MaternoCli','TelefonoCli','CelularCli','DircCli','fechaNaCli','CuidadNaCli','EmailCli','DremCli')
	Nombre= request.POST.get('NombreCli')
	Apellido_Paterno= request.POST.get('PaternoCli')
	Apellido_Materno= request.POST.get('MaternoCli')
	Telefono = request.POST.get('TelefonoCli')
	Direccion = request.POST.get('DircCli')
	Fecha_Nacimiento = request.POST.get('fechaNaCli')
	Email = request.POST.get('EmailCli')
	Drem = request.POST.get('DremCli')#cambiar a varchar
	exito=''
	if Nombre != None:
		try:
			with transaction.atomic():
				if not Cliente.objects.filter(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno).exists():
					C1 = Cliente(dni=Dni,nombre=Nombre,Apellido_paterno=Apellido_Paterno,Apellido_materno=Apellido_Materno,telefono=Telefono,direccion=Direccion,fecha_nacimiento=Fecha_Nacimiento,email=Email,drem=Drem,tipo_persona= TipoPersona,tablaRelacional='TCCM')
					C1.save()

				exito='exito'
		except IntegrityError:
			exito= 'fail '+sys.exc_info()[0]
		except:
			exito='fail'+sys.exc_info()[0]
		else:
			exito='exito'
	return render(request,"CierreVentaMaterialOperador.html",{"resultado":exito} )



#consultas adicionales
@login_required
def Intercam_Creadas_view(request):
	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'
	except:
		cargo =''
	return render(request,'IntercambiosCreados.html',{"cargo":cargo} )

@login_required
def Intercam_Recibidas_view(request):
	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'
	except:
		cargo =''
	return render(request,'IntercambiosRecibidos.html',{"cargo":cargo} )


@login_required
def Intercam_Pagadas_view(request):
	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'
	except:
		cargo =''
	return render(request,'IntercambiosPagados.html',{"cargo":cargo} )

@login_required
def Intercam_Pagadas_adelanto_view(request):
	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'
	except:
		cargo =''
	return render(request,'IntercambiosPagadosAde.html',{"cargo":cargo} )


@login_required
def listaIntercTotal_ajax_view(request):#creados
	if request.is_ajax:
		pag=request.GET.get('pg','')
		filtro=request.GET.get('filtro','')
		F1=request.GET.get('F1','')
		F2=request.GET.get('F2','')
		if filtro=='h':
			F1= str(datetime.date.today())
			filtro= 'f'
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			horamin = None
			horamax = None
			if filtro =='f':
				if F1 !='':
					fecha= datetime.datetime.strptime(F1, '%Y-%m-%d')
					horamin= datetime.datetime.combine(fecha,datetime.time.min)
					horamax= datetime.datetime.combine(fecha,datetime.time.max)
					
			elif filtro=='ef':
				if F1 !='' and F2 !='':
					fecha1= datetime.datetime.strptime(F1, '%Y-%m-%d')
					fecha2= datetime.datetime.strptime(F2, '%Y-%m-%d')
					horamin= datetime.datetime.combine(fecha1,datetime.time.min)
					horamax= datetime.datetime.combine(fecha2,datetime.time.max)
			consulta1= list(TCajaDebe.objects.filter(id_oficina=C.id_oficina.pk,id_caja=C.pk,tablaRelacional='Intercambio',fecha__range=(horamin,horamax)).order_by('-pk').values('pk','fecha','nroRecibo','estadoTransaccion','conceptoDetalle','id_personal','cantidadDinero','moneda','aux1'))
			lista=[]
			for obj in consulta1:
				idCajaD= str(obj['pk'])
				consulta2= list(Intercambio.objects.filter(idCajaDebe=idCajaD).values('pk','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','codigo'))#cambiar por object.get
				idCli= str(consulta2[0]['id_cliente'])
				consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
				consulta4= list(Oficina.objects.filter(pk=str(consulta2[0]['id_oficina'])).values('nombre_oficina'))
				cantidaEnvio= ConvertirDecimal(str(obj['cantidadDinero']))-ConvertirDecimal(str(consulta2[0]['comision'])) -ConvertirDecimal(consulta2[0]['monto_conceptos'])
				sq= PagoIntercambio.objects.filter(id_intercambio=str(consulta2[0]['pk']),idCajaHaber__id_caja=C.pk)
				sq2=PagoIntercambio.objects.filter(id_intercambio=str(consulta2[0]['pk']))
				dato={}	
				usuGlo=''
				if obj['conceptoDetalle'][2] =='-':
					usuGlo= obj['conceptoDetalle'].split('-')[2]
				dato['usuGlo']= usuGlo
				dato['fecha']=str(obj['fecha'].strftime("%d-%m-%Y %H:%M"))
				dato['AutEx']=obj['aux1']

				dato['nroRecibo']=obj['nroRecibo']
				dato['estado']= obj['estadoTransaccion']
				dato['id_personal']=str(obj['id_personal'])
				dato['monto']=normalizar(cantidaEnvio)
				dato['moneda']= str(obj['moneda'])
				dato['id_trans']=str(consulta2[0]['pk'])
				dato['oficina_des']= consulta4[0]['nombre_oficina']
				dato['comicion']= str(consulta2[0]['comision'])
				dato['nombre_bnf']=consulta2[0]['nombre_beneficiado']
				dato['dni_bnf']=consulta2[0]['dni_beneficiado']
				dato['paterno_bnf']=consulta2[0]['Apellido_paterno_beneficiado']
				dato['materno_bnf']= consulta2[0]['Apellido_materno_beneficiado']
				dato['obs']=consulta2[0]['observaciones']
				dato['codigo']=consulta2[0]['codigo']
				dato['nombre_rmt']=consulta3[0]['nombre']
				dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
				dato['materno_rmt']=consulta3[0]['Apellido_materno']
				dato['dni_rmt']=consulta3[0]['dni']
				dato['monto_conceptos']= str(consulta2[0]['monto_conceptos'])
				dato['otros_conceptos']= consulta2[0]['otros_conceptos']
				dato['pago_forzado']=''
				dato['fp']=''
				if sq.count()>0:
					dato['pago_forzado']= 'si'
				if sq2.count()>0:
					sqpt=PagoIntercambio.objects.get(id_intercambio=str(consulta2[0]['pk']))
					dato['fp']=str(sqpt.idCajaHaber.fecha.strftime("%d-%m-%Y %H:%M"))
				lista.append(dato)
			data= json.dumps(lista)
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def listaIntercTotal_filtro_ajax_view(request):#creados
	if request.is_ajax:
		valor=request.GET.get('filtro')
		pag=request.GET.get('pg','')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		usr= request.user.username
		try:
			C = Cajas.objects.get(id_usuario__usuario=usr)
			consulta1= list(Intercambio.objects.filter(Q(idCajaDebe__id_oficina=C.id_oficina.pk,idCajaDebe__id_caja=C.pk,nombre_beneficiado__icontains=valor)| Q(idCajaDebe__id_oficina=C.id_oficina.pk,idCajaDebe__id_caja=C.pk,Apellido_paterno_beneficiado__icontains=valor)|Q(idCajaDebe__id_oficina=C.id_oficina.pk,idCajaDebe__id_caja=C.pk,Apellido_materno_beneficiado__icontains=valor) | Q(idCajaDebe__id_oficina=C.id_oficina.pk,idCajaDebe__id_caja=C.pk,id_cliente__nombre__icontains=valor) | Q(idCajaDebe__id_oficina=C.id_oficina.pk,idCajaDebe__id_caja=C.pk,id_cliente__Apellido_paterno__icontains=valor ) | Q(idCajaDebe__id_oficina=C.id_oficina.pk,idCajaDebe__id_caja=C.pk,id_cliente__Apellido_materno__icontains=valor) | Q(idCajaDebe__id_oficina=C.id_oficina.pk,idCajaDebe__id_caja=C.pk,id_cliente__dni__icontains=valor)).order_by('-pk')[desde:hasta].values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','codigo'))
			lista=[]
			for obj in consulta1:
				Debe= TCajaDebe.objects.get(pk=obj['idCajaDebe'])
				consulta3=Cliente.objects.get(pk=obj['id_cliente'])
				consulta4= Oficina.objects.get(pk=obj['id_oficina'])
				cantidaEnvio= ConvertirDecimal(Debe.cantidadDinero)-ConvertirDecimal(str(obj['comision'])) -ConvertirDecimal(obj['monto_conceptos'])
				sq= PagoIntercambio.objects.filter(id_intercambio=str(obj['pk']),idCajaHaber__id_caja=C.pk)
				sq2=PagoIntercambio.objects.filter(id_intercambio=str(obj['pk']))
				dato={}	
				usuGlo=''
				if Debe.conceptoDetalle[2] =='-':
					usuGlo= Debe.conceptoDetalle.split('-')[2]
				dato['usuGlo']= usuGlo
				dato['fecha']=str(Debe.fecha.strftime("%d-%m-%Y %H:%M"))
				dato['AutEx']=Debe.aux1
				dato['nroRecibo']=Debe.nroRecibo
				dato['estado']= Debe.estadoTransaccion
				dato['id_personal']=Debe.id_personal.nombre +' '+Debe.id_personal.Apellido_paterno +' '+Debe.id_personal.Apellido_materno
				dato['monto']=normalizar(cantidaEnvio)
				dato['moneda']= str(Debe.moneda)
				dato['id_trans']=str(obj['pk'])
				dato['oficina_des']= consulta4.nombre_oficina
				dato['comicion']= str(obj['comision'])
				dato['nombre_bnf']=obj['nombre_beneficiado']
				dato['dni_bnf']=obj['dni_beneficiado']
				dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
				dato['materno_bnf']= obj['Apellido_materno_beneficiado']
				dato['obs']=obj['observaciones']
				dato['codigo']=obj['codigo']
				dato['nombre_rmt']=consulta3.nombre
				dato['paterno_rmt']=consulta3.Apellido_paterno
				dato['materno_rmt']=consulta3.Apellido_materno
				dato['dni_rmt']=consulta3.dni
				dato['monto_conceptos']= str(obj['monto_conceptos'])
				dato['otros_conceptos']= obj['otros_conceptos']
				dato['pago_forzado']=''
				dato['fp']=''
				if sq.count()>0:
					dato['pago_forzado']= 'si'
				if sq2.count()>0:
					sqpt=PagoIntercambio.objects.get(id_intercambio=str(obj['pk']))
					dato['fp']=str(sqpt.idCajaHaber.fecha.strftime("%d-%m-%Y %H:%M"))
				lista.append(dato)
			data= json.dumps(lista)
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def listaIntercRecibidas_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		usr= request.user.username
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk).order_by('-pk')[desde:hasta].values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','codigo','pago_adelanto'))

			for obj in consulta1:
				dato={}
				idCajaD= str(obj['idCajaDebe'])
				CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
				idCli= str(obj['id_cliente'])
				idSt= str(obj['pk'])
				sq= PagoIntercambio.objects.filter(id_intercambio=idSt,idCajaHaber__id_caja=C.pk)
				consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
				cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
				dato['fecha']=str(CajaDebe.fecha.strftime("%d-%m-%Y %H:%M"))
				dato['nroRecibo']=CajaDebe.nroRecibo
				dato['estado']= CajaDebe.estadoTransaccion
				dato['inter_dir']=''
				if Intercambios_dirigido.objects.filter(id_intercambio=obj['pk']).exists():
					indi= Intercambios_dirigido.objects.get(id_intercambio=obj['pk'])
					if not indi.id_caja_destino.pk==C.pk:
						dato['inter_dir']='si'
				dato['monto']=normalizar(cantidaEnvio)
				dato['id_trans']=obj['pk']
				dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
				dato['op_emisor']= CajaDebe.id_personal.nombre +' '+CajaDebe.id_personal.Apellido_paterno +' '+CajaDebe.id_personal.Apellido_materno
				dato['comicion']= str(obj['comision'])
				dato['moneda']= CajaDebe.moneda
				dato['nombre_bnf']=obj['nombre_beneficiado']
				dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
				dato['materno_bnf']= obj['Apellido_materno_beneficiado']
				dato['dni_bnf']=obj['dni_beneficiado']
				dato['obs']=obj['observaciones']
				dato['codigo']=obj['codigo']
				dato['nombre_rmt']=consulta3[0]['nombre']
				dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
				dato['materno_rmt']=consulta3[0]['Apellido_materno']
				dato['dni_rmt']=consulta3[0]['dni']
				dato['monto_conceptos']= str(obj['monto_conceptos'])
				dato['pago_adelanto']= ''
				if obj['pago_adelanto']:
					dato['pago_adelanto']= 'si'
				dato['otros_conceptos']= obj['otros_conceptos']
				dato['pago_forzado']= ''
				if sq.count() ==0:
					dato['pago_forzado']= 'si'


				lista.append(dato)
			data= json.dumps(lista)
		except:
			data='fail'
	else:
		data='fail'+str(sys.exc_info()[1])
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def listaIntercRecibidas_alterna_ajax_view(request):
	if request.is_ajax:
		pag=request.GET.get('pg','')
		valor=request.GET.get('filtro')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		usr= request.user.username
		try:
			lista=[]
			if valor != None and valor != "":
				C = Cajas.objects.get(id_usuario__usuario=usr)
				consulta1= list(Intercambio.objects.filter(Q(id_oficina=C.id_oficina.pk,nombre_beneficiado__icontains=valor)| Q(id_oficina=C.id_oficina.pk,Apellido_paterno_beneficiado__icontains=valor)|Q(id_oficina=C.id_oficina.pk,Apellido_materno_beneficiado__icontains=valor) | Q(id_oficina=C.id_oficina.pk,id_cliente__nombre__icontains=valor) | Q(id_oficina=C.id_oficina.pk,id_cliente__Apellido_paterno__icontains=valor ) | Q(id_oficina=C.id_oficina.pk,id_cliente__Apellido_materno__icontains=valor) | Q(id_oficina=C.id_oficina.pk,id_cliente__dni__icontains=valor)| Q(id_oficina=C.id_oficina.pk,idCajaDebe__id_oficina__nombre_oficina__icontains=valor)| Q(id_oficina=C.id_oficina.pk,idCajaDebe__id_oficina__ciudad__icontains=valor)).order_by('-pk').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','codigo','pago_adelanto'))
				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
				for obj in consulta1:
					dato={}
					idCajaD= str(obj['idCajaDebe'])
					CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
					idCli= str(obj['id_cliente'])
					idSt= str(obj['pk'])
					sq= PagoTransferencia.objects.filter(id_solicitud_transferencia=idSt,idCajaHaber__id_caja=C.pk)
					consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
					cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
					delta= datetime.datetime.today() - CajaDebe.fecha
					dato['dias']= delta.days
					dato['transEx']= 'no'
					if delta.days >=5 and aut_ret:
						dato['transEx']= 'si'
					dato['fecha']=str(CajaDebe.fecha.strftime("%d-%m-%Y %H:%M"))
					dato['nroRecibo']=CajaDebe.nroRecibo
					dato['estado']= CajaDebe.estadoTransaccion
					dato['inter_dir']=''
					if Intercambios_dirigido.objects.filter(id_intercambio=obj['pk']).exists():
						indi= Intercambios_dirigido.objects.get(id_intercambio=obj['pk'])
						if not indi.id_caja_destino.pk==C.pk:
							dato['inter_dir']='si'
					dato['monto']=normalizar(cantidaEnvio)
					dato['id_trans']=obj['pk']
					dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
					dato['op_emisor']= CajaDebe.id_personal.nombre +' '+CajaDebe.id_personal.Apellido_paterno +' '+CajaDebe.id_personal.Apellido_materno
					dato['comicion']= str(obj['comision'])
					dato['moneda']= CajaDebe.moneda
					dato['nombre_bnf']=obj['nombre_beneficiado']
					dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
					dato['materno_bnf']= obj['Apellido_materno_beneficiado']
					dato['dni_bnf']=obj['dni_beneficiado']
					dato['obs']=obj['observaciones']
					dato['codigo']=obj['codigo']
					dato['nombre_rmt']=consulta3[0]['nombre']
					dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
					dato['materno_rmt']=consulta3[0]['Apellido_materno']
					dato['dni_rmt']=consulta3[0]['dni']
					dato['monto_conceptos']= str(obj['monto_conceptos'])
					dato['otros_conceptos']= obj['otros_conceptos']
					dato['pago_adelanto']= ''
					if obj['pago_adelanto']:
						dato['pago_adelanto']= 'si'
					dato['pago_forzado']= ''
					if sq.count() ==0:
						dato['pago_forzado']= 'si'
					lista.append(dato)
				data= json.dumps(lista)
			else:
				data= json.dumps(lista)
		except:
			data='fail'
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def listaIntercRecibidas_alterna_activas_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		valor=request.GET.get('filtro')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		usr= request.user.username
		try:
			lista=[]
			if valor != None and valor != "":
				C = Cajas.objects.get(id_usuario__usuario=usr)
				consulta1= list(Intercambio.objects.filter(Q(id_oficina=C.id_oficina.pk,nombre_beneficiado__icontains=valor,idCajaDebe__estadoTransaccion='activo')| Q(id_oficina=C.id_oficina.pk,Apellido_paterno_beneficiado__icontains=valor,idCajaDebe__estadoTransaccion='activo')|Q(id_oficina=C.id_oficina.pk,Apellido_materno_beneficiado__icontains=valor,idCajaDebe__estadoTransaccion='activo') | Q(id_oficina=C.id_oficina.pk,id_cliente__nombre__icontains=valor,idCajaDebe__estadoTransaccion='activo') | Q(id_oficina=C.id_oficina.pk,id_cliente__Apellido_paterno__icontains=valor ,idCajaDebe__estadoTransaccion='activo') | Q(id_oficina=C.id_oficina.pk,id_cliente__Apellido_materno__icontains=valor,idCajaDebe__estadoTransaccion='activo') | Q(id_oficina=C.id_oficina.pk,id_cliente__dni__icontains=valor,idCajaDebe__estadoTransaccion='activo')| Q(id_oficina=C.id_oficina.pk,idCajaDebe__id_oficina__nombre_oficina__icontains=valor,idCajaDebe__estadoTransaccion='activo')| Q(id_oficina=C.id_oficina.pk,idCajaDebe__id_oficina__ciudad__icontains=valor,idCajaDebe__estadoTransaccion='activo')).order_by('-pk').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','codigo','pago_adelanto'))

				for obj in consulta1:
					dato={}
					idCajaD= str(obj['idCajaDebe'])
					CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
					idCli= str(obj['id_cliente'])
					idSt= str(obj['pk'])
					sq= PagoIntercambio.objects.filter(id_intercambio=idSt,idCajaHaber__id_caja=C.pk)
					consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
					cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
					dato['fecha']=str(CajaDebe.fecha.strftime("%d-%m-%Y %H:%M"))
					dato['nroRecibo']=CajaDebe.nroRecibo
					dato['estado']= CajaDebe.estadoTransaccion
					dato['inter_dir']=''
					if Intercambios_dirigido.objects.filter(id_intercambio=obj['pk']).exists():
						indi= Intercambios_dirigido.objects.get(id_intercambio=obj['pk'])
						if not indi.id_caja_destino.pk==C.pk:
							dato['inter_dir']='si'
					dato['monto']=normalizar(cantidaEnvio)
					dato['id_trans']=obj['pk']
					dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
					dato['op_emisor']= CajaDebe.id_personal.nombre +' '+CajaDebe.id_personal.Apellido_paterno +' '+CajaDebe.id_personal.Apellido_materno
					dato['comicion']= obj['comision']
					dato['moneda']= CajaDebe.moneda
					dato['nombre_bnf']=obj['nombre_beneficiado']
					dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
					dato['materno_bnf']= obj['Apellido_materno_beneficiado']
					dato['dni_bnf']=obj['dni_beneficiado']
					dato['obs']=obj['observaciones']
					dato['codigo']=obj['codigo']
					dato['nombre_rmt']=consulta3[0]['nombre']
					dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
					dato['materno_rmt']=consulta3[0]['Apellido_materno']
					dato['dni_rmt']=consulta3[0]['dni']
					dato['monto_conceptos']= obj['monto_conceptos']
					dato['otros_conceptos']= obj['otros_conceptos']
					dato['pago_adelanto']= ''
					if obj['pago_adelanto']:
						dato['pago_adelanto']= 'si'
					dato['pago_forzado']= ''
					if sq.count() ==0:
						dato['pago_forzado']= 'si'
					lista.append(dato)
				data= json.dumps(lista)
			else:
				data= json.dumps(lista)
		except:
			data='fail'
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)



@login_required
def ListaIntercRecibidasActiva_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		usr= request.user.username
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='activo').order_by('-pk').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','codigo','pago_adelanto'))
			for obj in consulta1:
				dato={}
				idCajaD= str(obj['idCajaDebe'])
				CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
				idCli= str(obj['id_cliente'])
				idSt= str(obj['pk'])
				sq= PagoIntercambio.objects.filter(id_intercambio=idSt,idCajaHaber__id_caja=C.pk)
				consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
				cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
			
				dato['fecha']=str(CajaDebe.fecha.strftime("%d-%m-%Y %H:%M"))
				dato['nroRecibo']=CajaDebe.nroRecibo
				dato['estado']= CajaDebe.estadoTransaccion
				dato['inter_dir']=''
				if Intercambios_dirigido.objects.filter(id_intercambio=obj['pk']).exists():
					indi= Intercambios_dirigido.objects.get(id_intercambio=obj['pk'])
					if not indi.id_caja_destino.pk==C.pk:
						dato['inter_dir']='si'
				dato['monto']=normalizar(cantidaEnvio)
				dato['id_trans']=obj['pk']
				dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
				dato['op_emisor']= CajaDebe.id_personal.nombre +' '+CajaDebe.id_personal.Apellido_paterno +' '+CajaDebe.id_personal.Apellido_materno
				dato['comicion']= str(obj['comision'])
				dato['moneda']= CajaDebe.moneda
				dato['nombre_bnf']=obj['nombre_beneficiado']
				dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
				dato['materno_bnf']= obj['Apellido_materno_beneficiado']
				dato['dni_bnf']=obj['dni_beneficiado']
				dato['obs']=obj['observaciones']
				dato['codigo']=obj['codigo']
				dato['nombre_rmt']=consulta3[0]['nombre']
				dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
				dato['materno_rmt']=consulta3[0]['Apellido_materno']
				dato['dni_rmt']=consulta3[0]['dni']
				dato['monto_conceptos']= str(obj['monto_conceptos'])
				dato['otros_conceptos']= obj['otros_conceptos']
				dato['pago_adelanto']= ''
				if obj['pago_adelanto']:
					dato['pago_adelanto']= 'si'
				dato['pago_forzado']= ''
				if sq.count() ==0:
					dato['pago_forzado']= 'si'

				lista.append(dato)
			data= json.dumps(lista)
		except:
			data='fail'
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def listaIntercPagadas_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		filtro=request.GET.get('filtro','')
		F1=request.GET.get('F1','')
		F2=request.GET.get('F2','')
		if filtro=='h':
			F1= str(datetime.date.today())
			filtro= 'f'
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			horamin = None
			horamax = None
			if filtro =='f':
				if F1 !='':
					fecha= datetime.datetime.strptime(F1, '%Y-%m-%d')
					horamin= datetime.datetime.combine(fecha,datetime.time.min)
					horamax= datetime.datetime.combine(fecha,datetime.time.max)
					
			elif filtro=='ef':
				if F1 !='' and F2 !='':
					fecha1= datetime.datetime.strptime(F1, '%Y-%m-%d')
					fecha2= datetime.datetime.strptime(F2, '%Y-%m-%d')
					horamin= datetime.datetime.combine(fecha1,datetime.time.min)
					horamax= datetime.datetime.combine(fecha2,datetime.time.max)
			#consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='pagado',idCajaDebe__fecha__range=(horamin,horamax)).order_by('-pk').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
			consulta= list(PagoIntercambio.objects.filter(idCajaHaber__id_caja=C.pk,idCajaHaber__fecha__range=(horamin,horamax)).order_by('-pk').values('pk','idCajaHaber','id_intercambio','observaciones'))
			for obj in consulta:
				dato={}
				haber= TCajaHaber.objects.get(pk=obj['idCajaHaber'])
				trans = Intercambio.objects.get(pk=obj['id_intercambio'])
				CajaDebe= TCajaDebe.objects.get(pk=trans.idCajaDebe.pk)
				cli=Cliente.objects.get(pk=trans.id_cliente.pk)

				
				usuGlo=''
				if haber.conceptoDetalle[2] =='-':
					usuGlo= haber.conceptoDetalle.split('-')[2]

				if EgresoExtraIntercambio.objects.filter(idCajaHaber__id_caja=C.pk,id_pago_intercambio=obj['pk']).exists():
					EgresoExtra=EgresoExtraIntercambio.objects.get(idCajaHaber__id_caja=C.pk,id_pago_intercambio=obj['pk'])
					dato['egreso_extra']= str(EgresoExtra.monto)
				else:
					dato['egreso_extra']= str(0)

				dato['usuGlo']= usuGlo
				
				cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(trans.comision))-ConvertirDecimal(str(trans.monto_conceptos))
				dato['fecha']=str(haber.fecha.strftime("%d-%m-%Y %H:%M"))
				dato['nroRecibo']=haber.nroRecibo
				dato['estado']= haber.estadoTransaccion
				dato['pagador']=haber.id_personal.nombre+' '+haber.id_personal.Apellido_paterno+' '+haber.id_personal.Apellido_materno
				dato['monto']=normalizar(cantidaEnvio)
				dato['id_trans']=trans.pk
				dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
				dato['comicion']= str(trans.comision)
				dato['moneda']= haber.moneda
				dato['nombre_bnf']=trans.nombre_beneficiado
				dato['paterno_bnf']=trans.Apellido_paterno_beneficiado
				dato['materno_bnf']= trans.Apellido_materno_beneficiado
				dato['dni_bnf']=trans.dni_beneficiado
				dato['obs']=trans.observaciones
				dato['nombre_rmt']=cli.nombre
				dato['paterno_rmt']=cli.Apellido_paterno
				dato['materno_rmt']=cli.Apellido_materno
				dato['dni_rmt']=cli.dni
				dato['monto_conceptos']= str(trans.monto_conceptos)
				dato['otros_conceptos']= trans.otros_conceptos
				dato['pago_adelanto']= ''
				if trans.pago_adelanto:
					dato['pago_adelanto']= 'si'
				lista.append(dato)
			data= json.dumps(lista)	
		except:
			data='fail'
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def listaIntercPagadasTotal_filtro_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		valor=request.GET.get('filtro')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			consulta1= list(Intercambio.objects.filter(Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,nombre_beneficiado__icontains=valor)| Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,Apellido_paterno_beneficiado__icontains=valor)|Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,Apellido_materno_beneficiado__icontains=valor) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__nombre__icontains=valor) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__Apellido_paterno__icontains=valor ) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__Apellido_materno__icontains=valor) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__dni__icontains=valor)).order_by('-pk')[desde:hasta].values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','pago_adelanto'))
			for obj in consulta1:
				dato={}
				idSt= str(obj['pk'])
				idCajaD= str(obj['idCajaDebe'])
				CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
				sq= PagoIntercambio.objects.filter(id_intercambio=idSt,idCajaHaber__id_caja=C.pk)
				if sq.count()>0:
					PagoTr = PagoIntercambio.objects.get(id_intercambio=idSt)
					usuGlo=''
					if PagoTr.idCajaHaber.conceptoDetalle[2] =='-':
						usuGlo= PagoTr.idCajaHaber.conceptoDetalle.split('-')[2]
					dato['egreso_extra']= str(0)
					if EgresoExtraIntercambio.objects.filter(idCajaHaber__id_caja=C.pk,id_pago_intercambio=PagoTr.pk).exists():
						EgresoExtra=EgresoExtraIntercambio.objects.get(idCajaHaber__id_caja=C.pk,id_pago_intercambio=PagoTr.pk)
						dato['egreso_extra']= str(EgresoExtra.monto)
					dato['usuGlo']= usuGlo
					idCli= str(obj['id_cliente'])
					consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
					cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
					dato['fecha']=str(PagoTr.idCajaHaber.fecha.strftime("%d-%m-%Y %H:%M"))
					dato['nroRecibo']=PagoTr.idCajaHaber.nroRecibo
					dato['estado']= PagoTr.idCajaHaber.estadoTransaccion
					dato['pagador']=PagoTr.idCajaHaber.id_personal.nombre+' '+PagoTr.idCajaHaber.id_personal.Apellido_paterno+' '+PagoTr.idCajaHaber.id_personal.Apellido_materno
					dato['monto']=normalizar(cantidaEnvio)
					dato['id_trans']=obj['pk']
					dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
					dato['comicion']= str(obj['comision'])
					dato['moneda']= PagoTr.idCajaHaber.moneda
					dato['nombre_bnf']=obj['nombre_beneficiado']
					dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
					dato['materno_bnf']= obj['Apellido_materno_beneficiado']
					dato['dni_bnf']=obj['dni_beneficiado']
					dato['obs']=obj['observaciones']
					dato['nombre_rmt']=consulta3[0]['nombre']
					dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
					dato['materno_rmt']=consulta3[0]['Apellido_materno']
					dato['dni_rmt']=consulta3[0]['dni']
					dato['monto_conceptos']= str(obj['monto_conceptos'])
					dato['otros_conceptos']= obj['otros_conceptos']
					dato['pago_adelanto']= ''
					if obj['pago_adelanto']:
						dato['pago_adelanto']= 'si'
					lista.append(dato)
			data= json.dumps(lista)	
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def listaIntercPagadasadelanto_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		valor=request.GET.get('filtro')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,pago_adelanto=True).order_by('-pk').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos','pago_adelanto'))
			for obj in consulta1:
				dato={}
				idSt= str(obj['pk'])
				idCajaD= str(obj['idCajaDebe'])
				CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
				
				dato['egreso_extra']= ""
				
				dato['usuGlo']= ""
				idCli= str(obj['id_cliente'])
				consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
				cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
				dato['fecha']=""
				dato['nroRecibo']=""
				dato['estado']= ""
				dato['pagador']=""
				dato['monto']=normalizar(cantidaEnvio)
				dato['id_trans']=obj['pk']
				dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
				dato['comicion']= str(obj['comision'])
				dato['moneda']= CajaDebe.moneda
				dato['nombre_bnf']=obj['nombre_beneficiado']
				dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
				dato['materno_bnf']= obj['Apellido_materno_beneficiado']
				dato['dni_bnf']=obj['dni_beneficiado']
				dato['obs']=obj['observaciones']
				dato['nombre_rmt']=consulta3[0]['nombre']
				dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
				dato['materno_rmt']=consulta3[0]['Apellido_materno']
				dato['dni_rmt']=consulta3[0]['dni']
				dato['monto_conceptos']= str(obj['monto_conceptos'])
				dato['otros_conceptos']= obj['otros_conceptos']
				dato['pago_adelanto']= ''
				if obj['pago_adelanto']:
					dato['pago_adelanto']= 'si'
				lista.append(dato)
			data= json.dumps(lista)	
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)

#------------------ intercambio con adelanto -------------------
@login_required
def listaIntercPagadasAde_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			consulta= PagoAdelantoIntercambio.objects.filter(idCajaHaber__id_caja=C.pk).order_by('nroReciboPI').values('fecha','id_intercambio','nroReciboPI').distinct('nroReciboPI')
			#consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='pagado').order_by('-pk')[desde:hasta].values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
			for obj in consulta:
				dato={}
				itc= Intercambio.objects.get(pk=obj['id_intercambio'])
				#idSt= str(obj['pk'])
				idCajaD= str(itc.idCajaDebe.pk)
				CajaDebe= TCajaDebe.objects.get(pk= itc.idCajaDebe.pk)
				idCli= str(itc.id_cliente.pk)
				consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
				cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(itc.comision))-ConvertirDecimal(str(itc.monto_conceptos))
				dato['fecha']=str(obj['fecha'].strftime("%d-%m-%Y %H:%M"))
				dato['nroRecibo']=obj['nroReciboPI']
				dato['estado']= CajaDebe.estadoTransaccion
				#dato['pagador']=PagoTr.idCajaHaber.id_personal.nombre+' '+PagoTr.idCajaHaber.id_personal.Apellido_paterno+' '+PagoTr.idCajaHaber.id_personal.Apellido_materno
				dato['monto']=normalizar(cantidaEnvio)
				dato['id_trans']=itc.pk
				dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
				dato['comicion']= str(itc.comision)
				dato['moneda']= CajaDebe.moneda
				dato['nombre_bnf']=itc.nombre_beneficiado
				dato['paterno_bnf']=itc.Apellido_paterno_beneficiado
				dato['materno_bnf']= itc.Apellido_materno_beneficiado
				dato['dni_bnf']=itc.dni_beneficiado
				dato['obs']=itc.observaciones
				dato['nombre_rmt']=consulta3[0]['nombre']
				dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
				dato['materno_rmt']=consulta3[0]['Apellido_materno']
				dato['dni_rmt']=consulta3[0]['dni']
				dato['monto_conceptos']= str(itc.monto_conceptos)
				dato['otros_conceptos']= itc.otros_conceptos
				lista.append(dato)
			data= json.dumps(lista)
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)

@login_required
def listaIntercPagadafiltrofechasAde_ajax_view(request):
	if request.is_ajax:
		filtro=request.GET.get('filtro','')
		F1=request.GET.get('F1','')
		F2=request.GET.get('F2','')
		usr= request.user.username
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			if F1 != '':
				if filtro =='f':
					if F1 !='':
						fecha= datetime.datetime.strptime(F1, '%Y-%m-%d')
						horamin= datetime.datetime.combine(fecha,datetime.time.min)
						horamax= datetime.datetime.combine(fecha,datetime.time.max)
						consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='pagado',idCajaDebe__fecha__range=(horamin,horamax)).values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
					else:
						consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='pagado').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
				elif filtro=='ef':
					fecha1= datetime.datetime.strptime(F1, '%Y-%m-%d')
					fecha2= datetime.datetime.strptime(F2, '%Y-%m-%d')
					fhoramin= datetime.datetime.combine(fecha1,datetime.time.min)
					fhoramax= datetime.datetime.combine(fecha2,datetime.time.max)
					consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='pagado',idCajaDebe__fecha__range=(fhoramin,fhoramax)).values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
				else:
					consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='pagado').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
			else:
				consulta1= list(Intercambio.objects.filter(id_oficina=C.id_oficina.pk,idCajaDebe__estadoTransaccion='pagado').values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
			for obj in consulta1:
				dato={}
				idSt= str(obj['pk'])
				idCajaD= str(obj['idCajaDebe'])
				CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
				sq= PagoIntercambio.objects.filter(id_intercambio=idSt,idCajaHaber__id_caja=C.pk)
				if sq.count()>0:
					PagoTr = PagoIntercambio.objects.get(id_intercambio=idSt)
					usuGlo=''
					if PagoTr.idCajaHaber.conceptoDetalle[2] =='-':
						usuGlo= PagoTr.idCajaHaber.conceptoDetalle.split('-')[2]
					if EgresoExtraIntercambio.objects.filter(idCajaHaber__id_caja=C.pk,id_pago_intercambio=PagoTr.pk).exists():
						EgresoExtra=EgresoExtraIntercambio.objects.get(idCajaHaber__id_caja=C.pk,id_pago_intercambio=PagoTr.pk)
						dato['egreso_extra']= str(EgresoExtra.monto)
					else:
						dato['egreso_extra']= str(0)
					dato['usuGlo']= usuGlo
					idCli= str(obj['id_cliente'])
					consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
					cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
					dato['fecha']=str(PagoTr.idCajaHaber.fecha.strftime("%d-%m-%Y %H:%M"))
					dato['nroRecibo']=PagoTr.idCajaHaber.nroRecibo
					dato['estado']= PagoTr.idCajaHaber.estadoTransaccion
					dato['pagador']=PagoTr.idCajaHaber.id_personal.nombre+' '+PagoTr.idCajaHaber.id_personal.Apellido_paterno+' '+PagoTr.idCajaHaber.id_personal.Apellido_materno
					dato['monto']=normalizar(cantidaEnvio)
					dato['id_trans']=obj['pk']
					dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
					dato['comicion']= str(obj['comision'])
					dato['moneda']= PagoTr.idCajaHaber.moneda
					dato['nombre_bnf']=obj['nombre_beneficiado']
					dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
					dato['materno_bnf']= obj['Apellido_materno_beneficiado']
					dato['dni_bnf']=obj['dni_beneficiado']
					dato['obs']=obj['observaciones']
					dato['nombre_rmt']=consulta3[0]['nombre']
					dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
					dato['materno_rmt']=consulta3[0]['Apellido_materno']
					dato['dni_rmt']=consulta3[0]['dni']
					dato['monto_conceptos']= str(obj['monto_conceptos'])
					dato['otros_conceptos']= obj['otros_conceptos']
					lista.append(dato)
			data= json.dumps(lista)	
		except:
			data='fail'+str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)


@login_required
def listaIntercPagadasTotal_filtroAde_ajax_view(request):
	if request.is_ajax:
		usr= request.user.username
		pag=request.GET.get('pg','')
		valor=request.GET.get('filtro')
		pg= 1
		if pag !='':
			pg= int(pag)
		desde= (pg-1)*20
		hasta= pg*20
		try:
			lista=[]
			C = Cajas.objects.get(id_usuario__usuario=usr)
			consulta1= list(Intercambio.objects.filter(Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,nombre_beneficiado__icontains=valor)| Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,Apellido_paterno_beneficiado__icontains=valor)|Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,Apellido_materno_beneficiado__icontains=valor) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__nombre__icontains=valor) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__Apellido_paterno__icontains=valor ) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__Apellido_materno__icontains=valor) | Q(idCajaDebe__estadoTransaccion='pagado',id_oficina=C.id_oficina.pk,id_cliente__dni__icontains=valor)).order_by('-pk')[desde:hasta].values('pk','idCajaDebe','id_cliente','id_oficina','comision','nombre_beneficiado','Apellido_paterno_beneficiado','Apellido_materno_beneficiado','dni_beneficiado','observaciones','monto_conceptos','otros_conceptos'))
			for obj in consulta1:
				dato={}
				idSt= str(obj['pk'])
				idCajaD= str(obj['idCajaDebe'])
				CajaDebe= TCajaDebe.objects.get(pk=idCajaD)
				sq= PagoIntercambio.objects.filter(id_solicitud_transferencia=idSt,idCajaHaber__id_caja=C.pk)
				if sq.count()>0:
					PagoTr = PagoIntercambio.objects.get(id_solicitud_transferencia=idSt)
					usuGlo=''
					if PagoTr.idCajaHaber.conceptoDetalle[2] =='-':
						usuGlo= PagoTr.idCajaHaber.conceptoDetalle.split('-')[2]
					dato['egreso_extra']= str(0)
					if EgresoExtraIntercambio.objects.filter(idCajaHaber__id_caja=C.pk,id_pago_intercambio=PagoTr.pk).exists():
						EgresoExtra=EgresoExtraIntercambio.objects.get(idCajaHaber__id_caja=C.pk,id_pago_intercambio=PagoTr.pk)
						dato['egreso_extra']= str(EgresoExtra.monto)
					dato['usuGlo']= usuGlo
					idCli= str(obj['id_cliente'])
					consulta3=list(Cliente.objects.filter(pk=idCli).values('nombre','Apellido_paterno','Apellido_materno','dni'))
					cantidaEnvio= ConvertirDecimal(str(CajaDebe.cantidadDinero))-ConvertirDecimal(str(obj['comision']))-ConvertirDecimal(str(obj['monto_conceptos']))
					dato['fecha']=str(PagoTr.idCajaHaber.fecha.strftime("%d-%m-%Y %H:%M"))
					dato['nroRecibo']=PagoTr.idCajaHaber.nroRecibo
					dato['estado']= PagoTr.idCajaHaber.estadoTransaccion
					dato['pagador']=PagoTr.idCajaHaber.id_personal.nombre+' '+PagoTr.idCajaHaber.id_personal.Apellido_paterno+' '+PagoTr.idCajaHaber.id_personal.Apellido_materno
					dato['monto']=normalizar(cantidaEnvio)
					dato['id_trans']=obj['pk']
					dato['oficina_ori']= CajaDebe.id_oficina.nombre_oficina
					dato['comicion']= str(obj['comision'])
					dato['moneda']= PagoTr.idCajaHaber.moneda
					dato['nombre_bnf']=obj['nombre_beneficiado']
					dato['paterno_bnf']=obj['Apellido_paterno_beneficiado']
					dato['materno_bnf']= obj['Apellido_materno_beneficiado']
					dato['dni_bnf']=obj['dni_beneficiado']
					dato['obs']=obj['observaciones']
					dato['nombre_rmt']=consulta3[0]['nombre']
					dato['paterno_rmt']=consulta3[0]['Apellido_paterno']
					dato['materno_rmt']=consulta3[0]['Apellido_materno']
					dato['dni_rmt']=consulta3[0]['dni']
					dato['monto_conceptos']= str(obj['monto_conceptos'])
					dato['otros_conceptos']= obj['otros_conceptos']
					lista.append(dato)
			data= json.dumps(lista)	
		except:
			data='fail'+ str(sys.exc_info()[1])
	else:
		data='fail'
	mimetype="application/json"
	return HttpResponse(data,mimetype)
#---------------------------------------------------------------

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def PonerPropiaCajasAdmin_ajax_view(request):
	if request.is_ajax:
		data=''
		try:
			with transaction.atomic():
				consulta=list(Cajas.objects.all().exclude(id_oficina__nombre_oficina="Gerencia").values('pk','nombre','estado'))
				for obj in consulta:
					C= Cajas.objects.get(pk=obj['pk'])
					if not conf_arqueo_Cajas.objects.filter(id_caja=C.pk).exists():
						conf= conf_arqueo_Cajas(id_caja=C,tipo_caja='p')
						conf.save()
				data= 'exito'
		except:
			data='error en consulta'
	else:
		data='fail'
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurarPorcentajes_caja_view(request):
	idconf=request.GET.get('pkConf')
	idc=request.GET.get('pkC1')
	tipoc=request.GET.get('tipo_caja')
	po=request.GET.get('po')
	pc=request.GET.get('pc')
	pe=request.GET.get('pe')
	exito=''
	if idc != None:
		try:
			with transaction.atomic():
				if conf_prj_arqueo.objects.filter(pk=idconf,id_caja=idc).exists():
					if pc==None or pc==''or tipoc=='p':
						pc=0
					if po !=None and po !='' and po !=None and po !='':
						aux=conf_prj_arqueo.objects.filter(pk=idconf,id_caja=idc).update(tipo_caja=tipoc,prj_caja=po,prj_oficina_central=pc,prj_otra_oficina=pe)
						exito='exito'
					else:
						exito='faltan valores obligatorios'
				else:
					exito='error'
				#aux= ConfiguracionPeticiones.objects.filter(pk=id).update(montoSolesCtaCte=MSCC,montoDolaresCtaCte=MDCC,montoSolesCtaAhorros=MSCA,montoDolaresCtaAhorros=MDCA)
				
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	data=exito
	mimetype="text"
	return HttpResponse(data,mimetype)


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AactualizarComision_ajax_view(request):
	exito=''
	if request.is_ajax:
		idConf=request.GET.get('pk')
		idOficina=request.GET.get('idOficina')
		MontoMin=request.GET.get('montomin')
		MontoMax=request.GET.get('montomax')
		Comi=request.GET.get('comi')
		try:
			with transaction.atomic():
				if Configuracion_comision.objects.filter(pk=idConf,id_oficina=idOficina).exists():
					config=Configuracion_comision.objects.filter(pk=idConf,id_oficina=idOficina).update(montomin= MontoMin,montomax=MontoMax,comision=Comi)
					exito='exito'
				else:
					exito='Error en operación'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def EliminarComision_ajax_view(request):
	exito=''
	if request.is_ajax:
		idConf=request.GET.get('pk')
		idOficina=request.GET.get('idOficina')
		try:
			with transaction.atomic():
				if Configuracion_comision.objects.filter(pk=idConf,id_oficina=idOficina).exists():
					config=Configuracion_comision.objects.filter(pk=idConf,id_oficina=idOficina).delete()
					exito='exito'
				else:
					exito='Error en operación'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ConfigurarBaseExter_tem_view(request):
	return render(request,"Config_BaseExterna.html" )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def PonerOficinaExt_ajax_view(request):
	exito=''
	idConf=''
	nombre=''
	if request.is_ajax:
		idO=request.GET.get('idO')
		idC=request.GET.get('idC')
		try:
			with transaction.atomic():
				#o = Oficina.objects.get(pk=idO)
				#c= Cajas.objects.get(id_usuario= o.id_usuario.pk)
				if not TConfiguracionSistema.objects.filter(id_oficina=idO,id_caja=idC,conf2='externa').exists():
					TConfiguracionSistema.objects.filter(id_oficina=idO,id_caja=idC).update(conf2='externa')
					conf= TConfiguracionSistema.objects.get(id_oficina=idO,id_caja=idC)
					idConf= conf.pk
					nombre= conf.id_oficina.nombre_oficina
					exito='exito'
				else:
					exito='Esta oficna ya esta configurada como externa'
		except IntegrityError:
			exito='error '+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({'exito':exito,'idConf':idConf,'nombre':nombre})
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AgregarSubbaseExterna_ajax_view(request):
	exito=''
	if request.is_ajax:
		idConf=request.GET.get('idConf')
		nom=request.GET.get('nombre')
		ciu=request.GET.get('ciudad')
		dirc=request.GET.get('dir')
		des=request.GET.get('des')
		obs=request.GET.get('obs')
		try:
			with transaction.atomic():
				conf= TConfiguracionSistema.objects.get(pk=idConf)
				be=Base_Ext(id_confSis=conf,nombre_base=nom,ciudad=ciu,direccion=dirc,descripcion=des,observaciones=obs)
				be.save()
				exito='exito'
		except IntegrityError:
			exito='error '+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data= exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ModSubbaseExterna_ajax_view(request):
	exito=''
	if request.is_ajax:
		pkb=request.GET.get('pk')
		nom=request.GET.get('nombre')
		ciu=request.GET.get('ciudad')
		dirc=request.GET.get('dir')
		des=request.GET.get('des')
		obs=request.GET.get('obs')
		try:
			with transaction.atomic():
				be=Base_Ext.objects.filter(pk=pkb).update(nombre_base=nom,ciudad=ciu,direccion=dirc,descripcion=des,observaciones=obs)
				exito='exito'
		except IntegrityError:
			exito='error '+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data= exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ModSubbaseExterna_desactivar_ajax_view(request):
	exito=''
	if request.is_ajax:
		pkb=request.GET.get('pk')
		try:
			with transaction.atomic():
				be=Base_Ext.objects.filter(pk=pkb).update(estado_base=False)
				exito='exito'
		except IntegrityError:
			exito='error '+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data= exito
	return HttpResponse(data,mimetype)

#---------  comision
def id_cod_comi(size=5, chars=string.ascii_lowercase + string.digits):
	return ''.join(random.choice(chars) for _ in range(size))

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Autorizar_comi_trans_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if Solicitud_aut_comision.objects.filter(pk=idA,estado='pendiente').exists():
						Solicitud_aut_comision.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',usuario_autorizador='Gerente',id_usuario_aut=g.pk,fecha_aut=datetime.datetime.now())
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#********************************************************************
@login_required
@transaction.atomic
def Autorizar_comi_trans_personal_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					p= Personal.objects.get(usuario=usr)
					if Solicitud_aut_comision.objects.filter(pk=idA,estado='pendiente').exists():
						soli_autori= Solicitud_aut_comision.objects.get(pk=idA,estado='pendiente')
						if soli_autori.id_user_solicitante.pk != C.id_usuario.pk:
							Solicitud_aut_comision.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',fecha_aut=datetime.datetime.now(),usuario_autorizador='Personal',id_usuario_aut=p.pk)
							exito='exito'
						else:
							exito='Usted no puede Autorizar esta transferencia'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def SolAutoComisionPersonal_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		idO=request.GET.get('idO')
		try:
			with transaction.atomic():
				if idO != None and idO!= '':
					C= Cajas.objects.get(id_usuario__usuario=usr)
					if not Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,estado__in=['pendiente','autorizado'],id_oficina_des=idO).exists():
						solComi= Solicitud_aut_comision(codigo_aut='c'+id_cod_comi(),estado='pendiente',id_user_solicitante=C.id_usuario,id_caja_solicitante=C,id_oficina_des=idO)
						solComi.save()
						exito='exito'
					else:
						exito='ya existe un codigo de autorizacion, por favor comuniquese con el gerente'
				else:
					exito='Seleccione una oficina destino valida'
		except IntegrityError:
			exito="error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def Verifi_CodAutoComi_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		cod=request.GET.get('cod')
		idO=request.GET.get('idO')
		try:
			with transaction.atomic():
				if (cod!=None and cod!='')or(idO!=None and idO!=''):
					C= Cajas.objects.get(id_usuario__usuario=usr)
					if Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,estado='autorizado',codigo_aut=cod,id_oficina_des=idO).exists():
						autcomi= Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,estado='autorizado',codigo_aut=cod,id_oficina_des=idO).update(fecha_desbloqueo=datetime.datetime.now())
						exito='exito'
					else:
						exito='codigo no admitido'
				else:
					exito='error'
		except IntegrityError:
			exito="error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def SolAutoComisionPersonalGlo_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		idO=request.GET.get('idO')
		idOOri=request.GET.get('idOOri')
		idCori=request.GET.get('idCOri')
		try:
			with transaction.atomic():
				C=None
				if idCori == None or idOOri =='':
					Ofi= Oficina.objects.get(pk=idOOri)
					C= Cajas.objects.get(id_usuario=Ofi.id_usuario.pk)
				else:
					C=Cajas.objects.get(pk=idCori)
				if idO != None and idO!= '':
					p=Personal.objects.get(usuario=usr)
					if not Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,id_user_solicitante=p.pk,estado__in=['pendiente','autorizado'],id_oficina_des=idO).exists():
						solComi= Solicitud_aut_comision(codigo_aut='c'+id_cod_comi(),estado='pendiente',id_user_solicitante=p,id_caja_solicitante=C,id_oficina_des=idO,obs='desde transferencias globales')
						solComi.save()
						exito='exito'
					else:
						exito='ya existe un codigo de autorizacion, por favor comuniquese con el gerente'
				else:
					exito='Seleccione una oficina destino valida'
		except IntegrityError:
			exito="error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def Verifi_CodAutoComiGlo_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		cod=request.GET.get('cod')
		idO=request.GET.get('idO')
		idOOri=request.GET.get('idOOri')
		idCori=request.GET.get('idCOri')
		try:
			with transaction.atomic():
				C=None
				if idCori == None or idOOri =='':
					Ofi= Oficina.objects.get(pk=idOOri)
					C= Cajas.objects.get(id_usuario=Ofi.id_usuario.pk)
				else:
					C=Cajas.objects.get(pk=idCori)
				if (cod!=None and cod!='')or(idO!=None and idO!=''):
					#p=Personal.objects.get(usuario=usr)
					if Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,id_user_solicitante=C.id_usuario.pk,estado='autorizado',codigo_aut=cod,id_oficina_des=idO).exists():
						autcomi= Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,id_user_solicitante=C.id_usuario.pk,estado='autorizado',codigo_aut=cod,id_oficina_des=idO).update(fecha_desbloqueo=datetime.datetime.now())
						exito='exito'
					else:
						exito='codigo no admitido'
				else:
					exito='error'
		except IntegrityError:
			exito="error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def ReimprimirMovimientos_ajax(request):
	exito=''
	nroR=''
	clienteR=''
	montoR=''
	comisionR=''
	importeTR=''
	importeTRD=''
	conceptoR=''
	DNIR=''
	tabla=''
	moneda=''
	tipoCambioR=''
	if request.is_ajax:
		idM=request.GET.get('pk')
		try:
			with transaction.atomic():
				OCtaCteM=CtaCteMovimientos.objects.get(pk=idM)
				if OCtaCteM.tabla=='TCajaDebe':
					idCD=int(OCtaCteM.aux1)
					idCtaCte=OCtaCteM.id_ctacte.pk
					OCD=TCajaDebe.objects.get(pk=idCD)
					OCtaCte=CtaCte.objects.get(pk=idCtaCte)
					OCliente=Cliente.objects.get(pk=OCtaCte.id_cliente.pk)
					clienteR=OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno
					nroR=OCtaCteM.nroRecibo
					if OCD.moneda=='soles':
						moneda='S/. '
					else:
						moneda='US$. '

					montoR=moneda+str(OCtaCteM.montoDeposito) 
					comisionR=moneda+str(OCtaCteM.comision)
					importeTR=moneda+str(ConvertirDecimal(OCtaCteM.montoDeposito)+ConvertirDecimal(OCtaCteM.comision))
					conceptoR=OCtaCteM.observacionesMovimientos
					DNIR=str(OCliente.dni)[:4]+"****"
					tabla='TCajaDebe'
					exito='exito'
				else:
					idCH=int(OCtaCteM.aux1)
					idCtaCte=OCtaCteM.id_ctacte.pk
					OCH=TCajaHaber.objects.get(pk=idCH)
					OCtaCte=CtaCte.objects.get(pk=idCtaCte)
					OCliente=Cliente.objects.get(pk=OCtaCte.id_cliente.pk)
					clienteR=OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno
					nroR=OCtaCteM.nroRecibo

					if OCtaCteM.tipoCambio!='' and OCtaCteM.tipoCambio!=None:
						tipoCambioR=str(round(OCtaCteM.tipoCambio),2)
						if OCH.moneda=='soles':
							montoR='US$. '+str(round(ConvertirDecimal(OCtaCteM.montoRetiro)/ConvertirDecimal(OCtaCteM.tipoCambio),2))
							importeTRD='S/. '+str(ConvertirDecimal(OCtaCteM.montoRetiro))
						else:
							montoR='S/. '+str(round(ConvertirDecimal(OCtaCteM.montoRetiro)*ConvertirDecimal(OCtaCteM.tipoCambio),2))	
							importeTRD='US$. '+str(ConvertirDecimal(OCtaCteM.montoRetiro))
					else:
						if OCH.moneda=='soles':
							moneda='S/. '
						else:
							moneda='US$. '

						montoR=moneda+str(OCtaCteM.montoRetiro)
					
					importeTR=moneda+str(OCtaCte.saldo)
					conceptoR=OCtaCteM.observacionesMovimientos
					DNIR=str(OCliente.dni)[:4]+"****"
					tabla='TCajaHaber'
					exito='exito'

		except IntegrityError:
			exito='fail'#+str(sys.exc_info()[1])
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito='fail'#+ str(sys.exc_info()[1])
	data={'resultado':exito,'tabla':tabla,'cliente':clienteR,'nro':nroR,'monto':montoR,'comision':comisionR,'importe':importeTR,'importeD':importeTRD,'tc':tipoCambioR,'concepto':conceptoR,'dni':DNIR}
	resultado= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)


@login_required#----
@transaction.atomic
def CtaCteRetirar_administrador(request):#
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	tcRecibo=''
	importeRecibo=''
	importeReciboDolarizadoSolarizado=''
	if request.is_ajax:
		IdCtaCte=request.GET.get('idctacte','')
		montoRetiro=request.GET.get('montoretiro','')
		observaciones=request.GET.get('observaciones','')
		interes=request.GET.get('interes','')
		nroDias=request.GET.get('nrodias','')
		estadoConf=request.GET.get('estado','')
		tipoC=request.GET.get('tc','')
		comision=request.GET.get('comision','')
		CodigoA = request.GET.get('CodigoAut')
		Clave= request.GET.get('clave')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)

		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 (CtaCte.objects.filter(id=IdCtaCte,claveAcceso=Clave).exists()):
			if montoRetiro !='' and montoRetiro != None:
				montoRetiro = ConvertirDecimal(montoRetiro)
				if montoRetiro>0:
					try:
						with transaction.atomic():
							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)-float(comision))>=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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='S/. '+str(saldoEgreso)
											importeRecibo='S/. '+str(montoRetiro)
											est=1
											data='exito'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),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='US$. '+str(montoDolarizado)
													tcRecibo=str(tipoC)
													est=1
													data='exito'
												else:
													est=4
													data='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()
											ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
											ctacteM.save()
											aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
											conceptoRecibo='Retiro de dinero de la Cta Cte Nro. '+str(IdCtaCte)
											nroRecibo=str(numeroR)
											saldoTotalRecibo='US$. '+str(saldoEgreso)
											importeRecibo='US$. '+str(montoRetiro)
											est=1
											data='exito'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
													ctacteM.save()
													aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(ObjSaldo.saldo)-ConvertirDecimal(montoRetiro)-ConvertirDecimal(comision),fechaCierre=fechaActual)
													conceptoRecibo='Retiro de dinero solarizado de la Cta Cte Nro. '+str(IdCtaCte)
													nroRecibo=str(numeroR)
													saldoTotalRecibo='US$. '+str(saldoEgreso)
													#importeRecibo='S/. '+str(montoSolarizado)
													importeRecibo='US$. '+str(montoRetiro)
													importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
													tcRecibo=str(tipoC)
													est=1
													data='exito'
												else:
													est=4
													data='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,estado='autorizado',id_cta=IdCtaCte).exists():
											cod_aut=True

									if cod_aut:
										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()
												ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
												ctacteM.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
												conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
												nroRecibo=str(numeroR)
												saldoTotalRecibo='S/. '+str(saldoEgreso)
												importeRecibo='S/. '+str(montoRetiro)
												est=1
												data='exito'
												Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
											else:
												if estadoConf==0 or estadoConf=='0':
													est=3
													data='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()
														ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
														ctacteM.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),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='US$. '+str(montoDolarizado)
														tcRecibo=str(tipoC)
														est=1
														data='exito'
														Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
													else:
														est=4
														data='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()
												ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
												ctacteM.save()
												aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
												conceptoRecibo='Retiro con Sobregiro de Cta Cte Nro. '+str(IdCtaCte)
												nroRecibo=str(numeroR)
												saldoTotalRecibo='US$. '+str(saldoEgreso)
												importeRecibo='US$. '+str(montoRetiro)
												est=1
												data='exito'
												Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
											else:
												if estadoConf==0 or estadoConf=='0':
													est=3
													data='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()
														ctacteM= ComisionOperacionCtaCte(idMovCtaCte=mctacte,monto=ConvertirDecimal(comision),tipo='retiro')
														ctacteM.save()
														aux= CtaCte.objects.select_for_update().filter(pk=IdCtaCte).update(saldo=ConvertirDecimal(saldoEgreso)-ConvertirDecimal(comision),fechaCierre=fechaActual)
														conceptoRecibo='Retiro con Sobregiro Solarizado de Cta Cte Nro. '+str(IdCtaCte)
														nroRecibo=str(numeroR)
														saldoTotalRecibo='US$. '+str(saldoEgreso)
														importeRecibo='US$. '+str(montoRetiro)
														importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
														#importeRecibo='S/. '+str(montoSolarizado)
														tcRecibo=str(tipoC)
														est=1
														data='exito'
														Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
													else:
														est=4
														data='Saldo insuficiente en la caja de soles'
									else:
										est=5
										data=''

							else:
								est=4
								data='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'
											
					except IntegrityError:
						est=4
						data=str(sys.exc_info()[1])
					except:
						est=4
						data=str(sys.exc_info()[1])
					
				else:
					est=4
					data='Monto ingresado es incorrecto'

			else:
				est=4
				data='Monto ingresado es incorrecto'
		else:
			est=4
			data='La clave de acceso es incorrecta'
	else:
		est=4
		data='fail'
	exito={'resultado':data,'estado':est,'concepto':conceptoRecibo,'nroRecibo':nroRecibo,'saldo':str(saldoTotalRecibo),'tc':str(tcRecibo),'importe':str(importeRecibo),'importeDS':str(importeReciboDolarizadoSolarizado)}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)

#*************************** intercambios*************************************+
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Autorizar_retiro_inter_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if soli_ret_intercambios_dir.objects.filter(pk=idA,estado='pendiente').exists():
						soli_ret_intercambios_dir.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',usuario_autorizador='Gerente',id_usuario_aut=g.pk,fecha_aut=datetime.datetime.now())
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def Autorizar_retiro_inter_personal_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					p= Personal.objects.get(usuario=usr)
					if soli_ret_intercambios_dir.objects.filter(pk=idA,estado='pendiente').exists():
						soli_autori= soli_ret_intercambios_dir.objects.get(pk=idA,estado='pendiente')
						if soli_autori.id_user_solicit.pk != C.id_usuario.pk:
							soli_ret_intercambios_dir.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',fecha_aut=datetime.datetime.now(),usuario_autorizador='Personal',id_usuario_aut=p.pk)
							exito='exito'
						else:
							exito='Usted no puede Autorizar esta intercambio'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def solicitud_Autorizacion_retiro_inter_ajax_view(request):
	exito=''
	if request.is_ajax:
		TR=request.GET.get('idTr')
		usr= request.user.username
		try:
			with transaction.atomic():
				if not soli_ret_intercambios_dir.objects.filter(id_intercambio_dir__id_intercambio=TR).exists():
					inte=Intercambios_dirigido.objects.get(id_intercambio=TR)
					Ca= Cajas.objects.get(id_usuario__usuario=usr)
					srT=soli_ret_intercambios_dir(id_intercambio_dir=inte,codigo_aut=id_generator(),estado='pendiente',id_user_solicit=Ca.id_usuario,id_caja_solicit=Ca)
					srT.save()
					exito='exito'
				else:
					exito='Ya Existe Una Solicitud de Autorizacion'
				
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)
#*************************************************************************+*****
#asociado
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ConfigurarAsociado_tem_view(request):
	nombre = request.POST.get('nombre')
	pkC = request.POST.get('caja')
	pkO =request.POST.get('oficina')
	obs =request.POST.get('obs','')
	exito=''
	try:
		with transaction.atomic():
			if pkC != None:
				c= Cajas.objects.get(pk=pkC,id_oficina=pkO)
				if not asociado.objects.filter(id_oficina=pkO,id_caja=pkC).exists():
					asoc= asociado(nombre=nombre,id_oficina=c.id_oficina,id_caja=c,observaciones=obs)
					asoc.save()
					exito='exito'
				else:
					exito='ya existe una confiuracion para esta caja'
	except:
		exito=str(sys.exc_info()[1])
	return render(request,"config_asociado.html",{"resultado":exito} )

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def agregar_caja_asociado_ajax_view(request):
	pkAsoc=request.GET.get('pkAsoc')
	pkC=request.GET.get('pkC')
	exito=''
	if pkAsoc != None and pkAsoc != '':
		try:
			with transaction.atomic():
				if not oficinas_por_asociado.objects.filter(id_caja=pkC,estado="activo").exists() and not asociado.objects.filter(id_caja=pkC).exists():
					if oficinas_por_asociado.objects.filter(id_asociado=pkAsoc,id_caja=pkC).exists():
						oficinas_por_asociado.objects.filter(id_asociado=pkAsoc,id_caja=pkC).update(estado='activo')
					else:
						ca= Cajas.objects.get(pk=pkC)
						a= asociado.objects.get(pk=pkAsoc)
						ofi_asoc= oficinas_por_asociado(id_asociado=a,id_caja=ca,estado="activo")
						ofi_asoc.save()
					exito='exito'
				else:
					exito='esta caja ya esta seleccionada como base asociado'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def quitar_caja_asociado_ajax_view(request):
	pkAsoc=request.GET.get('pkAsoc')
	pkC=request.GET.get('pkC')
	exito=''
	if pkAsoc != None and pkAsoc != '':
		try:
			with transaction.atomic():
				if oficinas_por_asociado.objects.filter(id_asociado=pkAsoc,id_caja=pkC).exists():
					oficinas_por_asociado.objects.filter(id_asociado=pkAsoc,id_caja=pkC).update(estado='desactivo')
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)







@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AgregarComisionBaseOficina_ajax(request):
	exito=''
	if request.is_ajax:
		idBase=request.GET.get('idBase')
		idOficina=request.GET.get('idOf')
		MontoMin=request.GET.get('montomin')
		MontoMax=request.GET.get('montomax')
		ComiSTR=request.GET.get('comi')
		Comi=0
		try:

			if str(ComiSTR).find("%")!=-1:
				Comi=round(ConvertirDecimal(ComiSTR.replace("%",""))/100,2)
			else:
				Comi=ConvertirDecimal(ComiSTR)

			with transaction.atomic():
				if ConvertirDecimal(MontoMin)>0:
					if ConvertirDecimal(MontoMax)>0:
						if ConvertirDecimal(MontoMin)<ConvertirDecimal(MontoMax):
							if not Configuracion_comision.objects.filter(id_oficina=idOficina,base_ori=idBase,montomin__lte=MontoMin,montomax__gte=MontoMin).exists():
								if not Configuracion_comision.objects.filter(id_oficina=idOficina,base_ori=idBase,montomin__lte=MontoMax,montomax__gte=MontoMax).exists():
									OOficina= Oficina.objects.get(pk=idOficina)
									OBE=Base_Ext.objects.get(pk=int(idBase))
									OCS=TConfiguracionSistema.objects.get(pk=OBE.id_confSis.pk)
									conf= ConfiguracionExtra_caja.objects.get(id_caja=OCS.id_caja.pk)
									conf_comi= Configuracion_comision(id_config=conf,id_oficina=OOficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=idBase)
									conf_comi.save()
									exito='exito'
								else:
									exito='Error. El monto maximo esta dentro de otro rango de comisiones'
							else:
								exito='Error. El monto minimo esta dentro de otro rango de comisiones'
						else:
							exito='Error. El monto minimo es mayor al monto maximo'
					else:
						exito='Error. El monto maximo debe ser positivo'
				else:
					exito='Error. El monto minimo debe ser positivo'

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


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AgregarComisionBaseBase_ajax(request):
	exito=''
	if request.is_ajax:
		idBaseO=request.GET.get('idBase1')
		idBaseD=request.GET.get('idBase2')
		MontoMin=request.GET.get('montomin')
		MontoMax=request.GET.get('montomax')
		ComiSTR=request.GET.get('comi')
		Comi=0
		try:

			if str(ComiSTR).find("%")!=-1:
				Comi=round(ConvertirDecimal(ComiSTR.replace("%",""))/100,2)
			else:
				Comi=ConvertirDecimal(ComiSTR)

			with transaction.atomic():
				if ConvertirDecimal(MontoMin)>0:
					if ConvertirDecimal(MontoMax)>0:
						if ConvertirDecimal(MontoMin)<ConvertirDecimal(MontoMax):
							if not Configuracion_comision.objects.filter(tipo='subbase',base_ori=idBaseO,base_des=idBaseD,montomin__lte=MontoMin,montomax__gte=MontoMin).exists():
								if not Configuracion_comision.objects.filter(tipo='subbase',base_ori=idBaseO,base_des=idBaseD,montomin__lte=MontoMax,montomax__gte=MontoMax).exists():
									OBE1=Base_Ext.objects.get(pk=int(idBaseO))
									OBE2=Base_Ext.objects.get(pk=int(idBaseD))
									OCS1=TConfiguracionSistema.objects.get(pk=OBE1.id_confSis.pk)
									conf= ConfiguracionExtra_caja.objects.get(id_caja=OCS1.id_caja.pk)

									OCS2=TConfiguracionSistema.objects.get(pk=OBE2.id_confSis.pk)
									OOf=Oficina.objects.get(pk=OCS2.id_oficina.pk)

									conf_comi= Configuracion_comision(id_config=conf,id_oficina=OOf,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=idBaseO,base_des=idBaseD)
									conf_comi.save()
									exito='exito'
								else:
									exito='Error. El monto maximo esta dentro de otro rango de comisiones'
							else:
								exito='Error. El monto minimo esta dentro de otro rango de comisiones'
						else:
							exito='Error. El monto minimo es mayor al monto maximo'
					else:
						exito='Error. El monto maximo debe ser positivo'
				else:
					exito='Error. El monto minimo debe ser positivo'

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


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AgregarComisionCajaBase_ajax(request):
	exito=''
	if request.is_ajax:
		idCaja=request.GET.get('idCa')
		idBase=request.GET.get('idBase')
		MontoMin=request.GET.get('montomin')
		MontoMax=request.GET.get('montomax')
		ComiSTR=request.GET.get('comi')
		Comi=0
		try:

			if str(ComiSTR).find("%")!=-1:
				Comi=round(ConvertirDecimal(ComiSTR.replace("%",""))/100,2)
			else:
				Comi=ConvertirDecimal(ComiSTR)

			with transaction.atomic():
				if ConvertirDecimal(MontoMin)>0:
					if ConvertirDecimal(MontoMax)>0:
						if ConvertirDecimal(MontoMin)<ConvertirDecimal(MontoMax):
							if not Configuracion_comision.objects.filter(id_config__id_caja=idCaja,tipo='subbase',base_des=idBase,montomin__lte=MontoMin,montomax__gte=MontoMin).exists():
								if not Configuracion_comision.objects.filter(id_config__id_caja=idCaja,tipo='subbase',base_des=idBase,montomin__lte=MontoMax,montomax__gte=MontoMax).exists():
									OBE=Base_Ext.objects.get(pk=int(idBase))
									OCS=TConfiguracionSistema.objects.get(pk=OBE.id_confSis.pk)
									OOf=Oficina.objects.get(pk=OCS.id_oficina.pk)
									conf= ConfiguracionExtra_caja.objects.get(id_caja=idCaja)
									conf_comi= Configuracion_comision(id_config=conf,id_oficina=OOf,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=idBase)
									conf_comi.save()
									exito='exito'
								else:
									exito='Error. El monto maximo esta dentro de otro rango de comisiones'
							else:
								exito='Error. El monto minimo esta dentro de otro rango de comisiones'
						else:
							exito='Error. El monto minimo es mayor al monto maximo'
					else:
						exito='Error. El monto maximo debe ser positivo'
				else:
					exito='Error. El monto minimo debe ser positivo'

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

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AgragarComision_ajax_view(request):
	exito=''
	if request.is_ajax:
		idCaja=request.GET.get('idCa')
		idOficina=request.GET.get('idOf')
		MontoMin=request.GET.get('montomin')
		MontoMax=request.GET.get('montomax')
		ComiSTR=request.GET.get('comi')
		Comi=0
		try:
			if str(ComiSTR).find("%")!=-1:
				Comi=round(ConvertirDecimal(ComiSTR.replace("%",""))/100,2)
			else:
				Comi=ConvertirDecimal(ComiSTR)

			with transaction.atomic():
				if ConvertirDecimal(MontoMin)>0:
					if ConvertirDecimal(MontoMax)>0:
						if ConvertirDecimal(MontoMin)<ConvertirDecimal(MontoMax):
							if not Configuracion_comision.objects.filter(id_config__id_caja=idCaja,id_oficina=idOficina,montomin__lte=MontoMin,montomax__gte=MontoMin).exclude(tipo='subbase').exists():
								if not Configuracion_comision.objects.filter(id_config__id_caja=idCaja,id_oficina=idOficina,montomin__lte=MontoMax,montomax__gte=MontoMax).exclude(tipo='subbase').exists():
									OOficina= Oficina.objects.get(pk=idOficina)
									conf= ConfiguracionExtra_caja.objects.get(id_caja=idCaja)
									conf_comi= Configuracion_comision(id_config=conf,id_oficina=OOficina,montomin= MontoMin,montomax=MontoMax,comision=Comi)
									conf_comi.save()
									exito='exito'
								else:
									exito='Error. El monto maximo esta dentro de otro rango de comisiones'
							else:
								exito='Error. El monto minimo esta dentro de otro rango de comisiones'
						else:
							exito='Error. El monto minimo es mayor al monto maximo'
					else:
						exito='Error. El monto maximo debe ser positivo'
				else:
					exito='Error. El monto minimo debe ser positivo'

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


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def ActualizarComisionBase_ajax(request):
	exito=''
	if request.is_ajax:
		idConf=request.GET.get('pk')
		MontoMin=request.GET.get('montomin')
		MontoMax=request.GET.get('montomax')
		Comi=request.GET.get('comi')
		try:
			with transaction.atomic():
				if Configuracion_comision.objects.filter(pk=idConf,tipo='subbase').exists():
					config=Configuracion_comision.objects.filter(pk=idConf,tipo='subbase').update(montomin= MontoMin,montomax=MontoMax,comision=Comi)
					exito='exito'
				else:
					exito='Error en operación'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)



@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def EliminarComisionBases_ajax(request):
	exito=''
	if request.is_ajax:
		idConf=request.GET.get('pk')
		try:
			with transaction.atomic():
				if Configuracion_comision.objects.filter(pk=idConf,tipo='subbase').exists():
					config=Configuracion_comision.objects.filter(pk=idConf,tipo='subbase').delete()
					exito='exito'
				else:
					exito='Error en operación'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)


@transaction.atomic
def guardarBalanceDia_ajax(request):
	exito='chingate'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def EliminarNotificaciones_ajax_view(request):
	exito=''
	if request.is_ajax:
		idN=request.GET.get('idN')
		try:
			with transaction.atomic():
				config=Notificacion.objects.filter(pk=idN).delete()
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def Autorizar_sobregiros_ctas_personal_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					p= Personal.objects.get(usuario=usr)
					if Solicitud_aut_sobregiros.objects.filter(pk=idA,estado='pendiente').exists():
						soli_autori= Solicitud_aut_sobregiros.objects.get(pk=idA,estado='pendiente')
						if soli_autori.id_user_solicitante.pk != C.id_usuario.pk:
							Solicitud_aut_sobregiros.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',fecha_aut=datetime.datetime.now(),usuario_autorizador='Personal',id_usuario_aut=p.pk)
							exito='exito'
						else:
							exito='Usted no puede Autorizar este sobregiro'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Autorizar_sobregiros_ctas_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if Solicitud_aut_sobregiros.objects.filter(pk=idA,estado='pendiente').exists(): 
						Solicitud_aut_sobregiros.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',fecha_aut=datetime.datetime.now(),usuario_autorizador='Gerente',id_usuario_aut=g.pk)
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)


@login_required
@transaction.atomic
def SolAutoSobregiroPersonal_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		montoSobregiro=request.GET.get('montoS')
		IdCtaCte=request.GET.get('idCtaCte')
		moneda=request.GET.get('moneda')
		try:
			with transaction.atomic():
				if montoSobregiro != None and montoSobregiro!= '':
					C= Cajas.objects.get(id_usuario__usuario=usr)
					if not Solicitud_aut_sobregiros.objects.filter(id_cta=IdCtaCte,id_caja_solicitante=C.pk,estado__in=['pendiente','autorizado'],aux1=montoSobregiro,aux2=moneda).exists():
						solS= Solicitud_aut_sobregiros(id_cta=IdCtaCte,codigo_aut='s'+id_cod_comi(),estado='pendiente',id_user_solicitante=C.id_usuario,id_caja_solicitante=C,aux1=montoSobregiro,aux2=moneda)
						solS.save()
						exito='exito'
					else:
						exito='Ya existe un codigo de autorizacion, por favor comuniquese con el gerente'
				else:
					exito='Seleccione un monto retiro válido'
		except IntegrityError:
			exito="error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def Verifi_CodAutoSobregiro_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		cod=request.GET.get('cod')
		montoSobregiro=request.GET.get('montoS')
		IdCtaCte=request.GET.get('idCtaCte')
		moneda=request.GET.get('moneda')
		try:
			with transaction.atomic():
				if (cod!=None and cod!='')or(idO!=None and idO!=''):
					C= Cajas.objects.get(id_usuario__usuario=usr)
					if Solicitud_aut_sobregiros.objects.filter(id_cta=IdCtaCte,id_caja_solicitante=C.pk,estado='autorizado',codigo_aut=cod,aux1=montoSobregiro,aux2=moneda).exists():
						autcomi= Solicitud_aut_sobregiros.objects.filter(id_cta=IdCtaCte,id_caja_solicitante=C.pk,estado='autorizado',codigo_aut=cod,aux1=montoSobregiro,aux2=moneda).update(fecha_desbloqueo=datetime.datetime.now())
						exito='exito'
					else:
						exito='Código no admitido'
				else:
					exito='error'
		except IntegrityError:
			exito="error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)


@login_required
@transaction.atomic
def Verifi_CodAuto_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		IdCtaCte=request.GET.get('idCtaCte')
		Cod=request.GET.get('cod')
		try:
			with transaction.atomic():
				if (Cod!=None and Cod!=''):
					if (CtaCte.objects.filter(id=IdCtaCte,claveAcceso=Cod).exists()):
						exito='exito'
					else:
						exito='Error. Ingrese una clave valida'	
				else:
					exito='Error. Ingrese una clave valida'
		except IntegrityError:
			exito="Error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)



@login_required
@transaction.atomic
def eliminar_cierre_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		idCaja=request.GET.get('idCaja')
		F1=request.GET.get('fechai')
		F2=request.GET.get('fechaf')
		try:
			with transaction.atomic():
				if F1 != '' and F2!='':
					fecha1= datetime.datetime.strptime(F1, '%Y-%m-%d')
					fecha2= datetime.datetime.strptime(F2, '%Y-%m-%d')
					fhoramin= datetime.datetime.combine(fecha1,datetime.time.min)
					fhoramax= datetime.datetime.combine(fecha2,datetime.time.max)
					CajaCierre.objects.filter(id_caja=idCaja,fechaDesde__range=(fhoramin,fhoramax)).delete()
					exito='exito'
				else:
					exito='Error. Seleccione fechas correctas'

		except IntegrityError:
			exito='Error de integridad'
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito='fail consult'
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def eliminar_cierre_material_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		idCaja=request.GET.get('idCaja')
		F1=request.GET.get('fechai')
		F2=request.GET.get('fechaf')
		try:
			with transaction.atomic():
				if F1 != '' and F2!='':
					fecha1= datetime.datetime.strptime(F1, '%Y-%m-%d')
					fecha2= datetime.datetime.strptime(F2, '%Y-%m-%d')
					fhoramin= datetime.datetime.combine(fecha1,datetime.time.min)
					fhoramax= datetime.datetime.combine(fecha2,datetime.time.max)
					CajaCierreMaterial.objects.filter(id_caja=idCaja,fechaDesde__range=(fhoramin,fhoramax)).delete()
					exito='exito'
				else:
					exito='Error. Seleccione fechas correctas'

		except IntegrityError:
			exito='Error de integridad'
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito='fail consult'
	mimetype="text"
	return HttpResponse(exito,mimetype)

#************
def comparar(a,b):
	return ((a-b <1) and (a-b >-1)),round(a-b,2)
#validacion de estado de caja
def validar_estado_caja(pkc):
	exito=''#(pk,-1)
	error=''
	try:
		debe_ini=None
		haber_ini=None
		ini=None
		fin=None
		SI_soles=0
		SI_dolares=0
		if not EstadoValido_Caja.objects.filter(id_caja=pkc).exists():
			pi= TCajaDebe.objects.filter(id_caja=pkc)[:1].values('pk','fecha')
			pe= TCajaHaber.objects.filter(id_caja=pkc)[:1].values('pk','fecha')
			ayer= datetime.datetime.today() - timedelta(days=1)
			pi_fecha=ayer
			pe_fecha=ayer
			if len(pi) >0:
				pi_fecha=pi[0]['fecha']
			if len(pe) >0:
				pe_fecha=pe[0]['fecha']
			debe_ini=datetime.datetime.combine(pi_fecha,datetime.time.min)
			haber_ini=datetime.datetime.combine(pe_fecha,datetime.time.min)
			ini=debe_ini
			if debe_ini >haber_ini:
				ini=haber_ini
			
			fin= datetime.datetime.combine(ayer,datetime.time.max)
		else:
			ue= EstadoValido_Caja.objects.filter(id_caja=pkc).latest("pk")
			SI_soles=float(ue.saldo_soles)
			SI_dolares=float(ue.saldo_dolares)
			ini= ue.fechaHasta + timedelta(days=1)
			ini= datetime.datetime.combine(ini,datetime.time.min)
			debe_ini=datetime.datetime.combine(ini,datetime.time.min)
			haber_ini=datetime.datetime.combine(ini,datetime.time.min)
			ayer= datetime.datetime.today() - timedelta(days=1)
			fin= datetime.datetime.combine(ayer,datetime.time.max)
		#metodo
		debe= TCajaDebe.objects.filter(id_caja=pkc,fecha__range=(debe_ini,fin)).values('pk','moneda','cantidadDinero')
		haber= TCajaHaber.objects.filter(id_caja=pkc,fecha__range=(haber_ini,fin)).values('pk','moneda','cantidadDinero')

		saldo=SaldoDisponibleCajas.objects.get(id_caja=pkc)
		saldo_soles= saldo.saldo_soles
		saldo_dolares= saldo.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'])
		es_cos,vals=comparar(ingresoS - egresoS +SI_soles,float(saldo_soles))
		es_cod,vald=comparar(ingresoD - egresoD + SI_dolares,float(saldo_dolares))
		if not es_cos or not es_cod:
			exito='-1'
			error='Saldo disponible no valido: s-'+str(vals)+',d-'+str(vald)
		else:
			SCierre_soles=0
			SCierre_dolares=0
			c= Cajas.objects.get(pk=pkc)
			esv= EstadoValido_Caja(id_caja=c,debe_soles=ingresoS,debe_dolares=ingresoD,haber_soles=egresoS,haber_dolares=egresoD,saldoI_soles=SI_soles,saldoI_dolares=SI_dolares,saldo_soles=saldo_soles,saldo_dolares=saldo_dolares,saldoCierre_soles=SCierre_soles,saldoCierre_dolares=SCierre_dolares,estado='valido',fechaDesde=ini.date(),fechaHasta=fin.date())
			esv.save()
			exito=esv.pk
			if CajaCierre.objects.filter(id_caja=pkc,estado="cerrado").exists():
				Uc= CajaCierre.objects.filter(id_caja=pkc,estado="cerrado").latest("fechaHasta")
				SCierre_soles=Uc.saldo_soles
				SCierre_dolares=Uc.saldo_dolares
				c_cos,vacs=comparar(float(saldo_soles),float(SCierre_soles))
				c_cod,vacd=comparar(float(saldo_dolares),float(SCierre_dolares))
				if not c_cos or not c_cod:
					exito='0'
					error='Saldo en cierre no valido: s-'+str(vacs)+',d-'+str(vacd)
			else:
				exito='0'
				error='no existen ningun cierre'
	except:
		exito='-1'
		error='fail' + str(sys.exc_info()[1])
	return exito, error

def vali_cierre(pkc):
	val=False
	f = date.today() - timedelta(days=1)
	if CajaCierre.objects.filter(id_caja=pkc,estado="cerrado").exists():
		Uc= CajaCierre.objects.filter(id_caja=pkc,estado="cerrado").latest("fechaHasta")
		if Uc.fechaHasta == f:
			val=True
	return val

@transaction.atomic
def admin_validar_cajas_general_view(request):
	exito='exito'
	try:
		with transaction.atomic():
			liCa= Cajas.objects.filter(estado=True).exclude(id_oficina__nombre_oficina="Gerencia").values('pk')
			for obj in liCa:
				c=Cajas.objects.get(pk=obj['pk'])
				#if vali_cierre(obj['pk']):
				ex,er=validar_estado_caja(obj['pk'])
				if str(ex) =='-1':
					le= Log_EstadoCaja(id_caja=c,descripcion=er,estado='incorrecto')
					le.save()
				elif str(ex) =='0':
					le= Log_EstadoCaja(id_caja=c,descripcion=er,estado='cierrenoverificado')
					le.save()
				else:
					le= Log_EstadoCaja(id_caja=c,descripcion='Felicitaciones esta Caja esta correcta',id_estadoCaja=ex,estado='correcto')
					le.save()
				#else:
				#	le= Log_EstadoCaja(id_caja=c,descripcion='cierres incompletos',estado='incorrecto')
				#	le.save()
	except:
		exito=str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def ActObservacionesLiquidCaja_admin_view(request):
	exito=''
	pkL = request.GET.get('pkL')
	obs = request.GET.get('obs')
	try:
		with transaction.atomic():
			if pkL !=  None and pkL.isdigit():
				L=liquidacionCaja.objects.get(pk=pkL)
				C= L.id_caja
				if liquidacionCaja.objects.filter(pk=pkL,id_caja=C.pk,estado="liquidado").exists():
					liquidacionCaja.objects.filter(pk=pkL,id_caja=C.pk,estado="liquidado").update(observaciones=obs)
					exito='exito'
				else:
					exito='seleccione una liquidacion valida'
			else:
				exito='seleccione la liquidacion'
	except IntegrityError:
		exito='fail'
	except:
		exito='fail1'+ str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(exito,mimetype)



@login_required
@transaction.atomic
def Verifi_CodAutoSobregiroCtaAhorros_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		cod=request.GET.get('cod')
		montoSobregiro=request.GET.get('montoS')
		IdCtaAhorros=request.GET.get('idCtaAhorros')
		moneda=request.GET.get('moneda')
		try:
			with transaction.atomic():
				if (cod!=None and cod!='')or(idO!=None and idO!=''):
					C= Cajas.objects.get(id_usuario__usuario=usr)
					if Solicitud_aut_sobregiros.objects.filter(id_cta=IdCtaAhorros,id_caja_solicitante=C.pk,tipoCuenta='Ahorros',estado='autorizado',codigo_aut=cod,aux1=montoSobregiro,aux2=moneda).exists():
						autcomi= Solicitud_aut_sobregiros.objects.filter(id_cta=IdCtaAhorros,tipoCuenta='Ahorros',id_caja_solicitante=C.pk,estado='autorizado',codigo_aut=cod,aux1=montoSobregiro,aux2=moneda).update(fecha_desbloqueo=datetime.datetime.now())
						exito='exito'
					else:
						exito='Código no admitido'
				else:
					exito='error'
		except IntegrityError:
			exito="error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)


@login_required
@transaction.atomic
def pagarInteresCtaAhorros_ajax(request):
	exito=''
	if request.is_ajax:
		idI=request.GET.get('pk')
		usr=request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if InteresesCtaAhorros.objects.filter(id=idI,estado='pendiente').exists():
					OI=InteresesCtaAhorros.objects.get(id=idI)
					OCAM=CtaAhorrosMovimientos.objects.get(pk=OI.id_ctaahorrosmov.pk)
					OCA=CtaAhorros.objects.get(pk=OCAM.id_ctaahorros.pk)
					saldo=OCA.saldo
					if saldo>0:
						OCD=TCajaDebe.objects.get(pk=OCAM.aux1)
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRE)+1
						cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoInteresCtaAhorros',conceptoDetalle='Pago de Interes de Cta Ahorros Nro '+str(OCAM.id_ctaahorros.pk),tipoDocumento='R/E',cantidadDinero=OI.monto,moneda=OCD.moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
						cajah.save()
						InteresesCtaAhorros.objects.filter(pk=idI).update(idCajaHaber=cajah.pk,estado='retirado')
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
						exito='exito'
					else:
						exito='fail'
				else:
					exito='fail'

		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'+str(sys.exc_info()[1])
	data={'resultado':exito}
	resultado= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)

@login_required
@transaction.atomic
def Verifi_CodAutoCtaAhorros_ajax_view(request):
	exito=''
	if request.is_ajax:
		usr= request.user.username
		IdCtaAhorros=request.GET.get('idCtaAhorros')
		Cod=request.GET.get('cod')
		try:
			with transaction.atomic():
				if (Cod!=None and Cod!=''):
					if (CtaAhorros.objects.filter(id=IdCtaAhorros,claveAcceso=Cod).exists()):
						exito='exito'
					else:
						exito='Error. Ingrese una clave válida'	
				else:
					exito='Error. Ingrese una clave válida'
		except IntegrityError:
			exito="Error de integridad"
		except:
			exito=str(sys.exc_info()[1])
	else:
		exito="fail consult"
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@transaction.atomic
def ReimprimirCtaAhorrosMovimientos_ajax(request):
	exito=''
	nroR=''
	clienteR=''
	montoR=''
	comisionR=''
	importeTR=''
	importeTRD=''
	conceptoR=''
	DNIR=''
	tabla=''
	moneda=''
	tipoCambioR=''
	if request.is_ajax:
		idM=request.GET.get('pk')
		try:
			with transaction.atomic():
				OCtaAhorrosM=CtaAhorrosMovimientos.objects.get(pk=idM)
				if OCtaAhorrosM.tabla=='TCajaDebe':
					idCD=int(OCtaAhorrosM.aux1)
					idCtaAhorros=OCtaAhorrosM.id_ctaahorros.pk
					OCD=TCajaDebe.objects.get(pk=idCD)
					OCtaAhorros=CtaAhorros.objects.get(pk=idCtaAhorros)
					OCliente=Cliente.objects.get(pk=OCtaAhorros.id_cliente.pk)
					clienteR=OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno
					nroR=OCtaAhorrosM.nroRecibo
					if OCD.moneda=='soles':
						moneda='S/. '
					else:
						moneda='US$. '

					montoR=moneda+str(OCtaAhorrosM.montoDeposito) 
					comisionR=moneda+str(OCtaAhorrosM.comision)
					importeTR=moneda+str(ConvertirDecimal(OCtaAhorrosM.montoDeposito)+ConvertirDecimal(OCtaAhorrosM.comision))
					conceptoR=OCtaAhorrosM.observacionesMovimientos
					DNIR=str(OCliente.dni)[:4]+"****"
					tabla='TCajaDebe'
					exito='exito'
				else:
					idCH=int(OCtaAhorrosM.aux1)
					idCtaAhorros=OCtaAhorrosM.id_ctaahorros.pk
					OCH=TCajaHaber.objects.get(pk=idCH)
					OCtaAhorros=CtaAhorros.objects.get(pk=idCtaAhorros)
					OCliente=Cliente.objects.get(pk=OCtaAhorros.id_cliente.pk)
					clienteR=OCliente.nombre+' '+OCliente.Apellido_paterno+' '+OCliente.Apellido_materno
					nroR=OCtaAhorrosM.nroRecibo

					if OCtaAhorrosM.tipoCambio!='' and OCtaAhorrosM.tipoCambio!=None:
						tipoCambioR=str(round(OCtaAhorrosM.tipoCambio),2)
						if OCH.moneda=='soles':
							montoR='US$. '+str(round(ConvertirDecimal(OCtaAhorrosM.montoRetiro)/ConvertirDecimal(OCtaAhorrosM.tipoCambio),2))
							importeTRD='S/. '+str(ConvertirDecimal(OCtaAhorrosM.montoRetiro))
						else:
							montoR='S/. '+str(round(ConvertirDecimal(OCtaAhorrosM.montoRetiro)*ConvertirDecimal(OCtaAhorrosM.tipoCambio),2))	
							importeTRD='US$. '+str(ConvertirDecimal(OCtaAhorrosM.montoRetiro))
					else:
						if OCH.moneda=='soles':
							moneda='S/. '
						else:
							moneda='US$. '

						montoR=moneda+str(OCtaAhorrosM.montoRetiro)
					
					importeTR=moneda+str(OCtaAhorros.saldo)
					conceptoR=OCtaAhorrosM.observacionesMovimientos
					DNIR=str(OCliente.dni)[:4]+"****"
					tabla='TCajaHaber'
					exito='exito'

		except IntegrityError:
			exito='fail'#+str(sys.exc_info()[1])
	else:
		exito='fail'#+ str(sys.exc_info()[1])
	data={'resultado':exito,'tabla':tabla,'cliente':clienteR,'nro':nroR,'monto':montoR,'comision':comisionR,'importe':importeTR,'importeD':importeTRD,'tc':tipoCambioR,'concepto':conceptoR,'dni':DNIR}
	resultado= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)


@login_required#----
@transaction.atomic
def CtaAhorrosRetirar_administrador(request):#
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	tcRecibo=''
	importeRecibo=''
	importeReciboDolarizadoSolarizado=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		montoRetiro=request.GET.get('montoretiro','')
		observaciones=request.GET.get('observaciones','')
		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')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)

		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 (CtaAhorros.objects.filter(id=IdCtaAhorros,claveAcceso=Clave).exists()):
			if montoRetiro !='' and montoRetiro != None:
				montoRetiro = ConvertirDecimal(montoRetiro)
				if montoRetiro>0:
					try:
						with transaction.atomic():
							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()
											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)
											est=1
											data='exito'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
													est=1
													data='exito'
												else:
													est=4
													data='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= CtaCteMovimientos(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()
											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)
											est=1
											data='exito'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='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()
													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)
													est=1
													data='exito'
												else:
													est=4
													data='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

									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()
												mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
												est=1
												data='exito'
												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':
													est=3
													data='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()
														mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
														est=1
														data='exito'
														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:
														est=4
														data='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()
												mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
												est=1
												data='exito'
												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':
													est=3
													data='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()
														mcomisionctaahorros=ComisionOperacionCtaAhorros(idMovCtaAhorros=mctaahorros.pk,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)
														est=1
														data='exito'
														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:
														est=4
														data='Saldo insuficiente en la caja de soles'
									else:
										est=5
										data=''

							else:
								est=4
								data='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'
											
					except IntegrityError:
						est=4
						data=str(sys.exc_info()[1])
					except:
						est=4
						data=str(sys.exc_info()[1])
					
				else:
					est=4
					data='Monto ingresado es incorrecto'

			else:
				est=4
				data='Monto ingresado es incorrecto'
		else:
			est=4
			data='La clave de acceso es incorrecta'
	else:
		est=4
		data='fail'
	exito={'resultado':data,'estado':est,'concepto':conceptoRecibo,'nroRecibo':nroRecibo,'saldo':str(saldoTotalRecibo),'tc':str(tcRecibo),'importe':str(importeRecibo),'importeDS':str(importeReciboDolarizadoSolarizado)}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)


@login_required#----
@transaction.atomic
def CtaAhorrosRetirar_operador(request):#
	data=''
	est=''
	saldoTotalRecibo=''
	conceptoRecibo=''
	nroRecibo=''
	importeRecibo=''
	tcRecibo=''
	importeReciboDolarizadoSolarizado=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		montoRetiro=request.GET.get('montoretiro','')
		observaciones=request.GET.get('observaciones','')
		interes=request.GET.get('interes','')
		nroDias=request.GET.get('nrodias','')
		estadoConf=request.GET.get('estado','')
		tipoC=request.GET.get('tc','')
		CodigoA = request.GET.get('CodigoAut')
		Clave= request.GET.get('clave')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		C= Cajas.objects.get(id_usuario__usuario=usr)

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

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

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

		if (CtaAhorros.objects.filter(id=IdCtaAhorros,claveAcceso=Clave).exists()):
			if montoRetiro !='' and montoRetiro != None:
				montoRetiro = ConvertirDecimal(montoRetiro)
				if montoRetiro>0:
					try:
						with transaction.atomic():
							Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
							MontosAutorizado=ConfiguracionPeticiones.objects.get(id_oficina=C.id_oficina.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))>=0: 
									if moneda=='soles':
										if (SaldoSoles >= montoRetiro):
											if (montoRetiro<=MontosAutorizado.montoSolesCtaAhorros):
												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='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()
												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)
												est=1
												data='exito'
											else:
												est=2
												data='Monto excede al autorizado.'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='Saldo insuficiente en la caja de soles. ¿Desea retirar de la caja de dolares?'
											else:
												montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
												if (montoDolarizado<=MontosAutorizado.montoDolaresCtaAhorros):
													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='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()
														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)
														est=1
														data='exito'
													else:
														est=4
														data='Saldo insuficiente en la caja de dolares'
												else:
													est=2
													data='Monto excede al autorizado.'

									elif moneda=='dolares':
										if (SaldoDolares>=montoRetiro):
											if (montoRetiro<=MontosAutorizado.montoDolaresCtaAhorros):
												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='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()
												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)
												est=1
												data='exito'
											else:
												est=2
												data='Monto excede al autorizado.'
										else:
											if estadoConf==0 or estadoConf=='0':
												est=3
												data='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
											else:
												montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
												if (montoSolarizado<=MontosAutorizado.montoSolesCtaAhorros):
													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='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()
														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 Ahorros Nro. '+str(IdCtaAhorros)
														nroRecibo=str(numeroR)
														saldoTotalRecibo='$/. '+str(saldoEgreso)
														#importeRecibo='S/. '+str(montoSolarizado)
														importeRecibo='$/. '+str(montoRetiro)
														importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
														tcRecibo=str(tipoC)
														est=1
														data='exito'
													else:
														est=4
														data='Saldo insuficiente en la caja de soles'
												else:
													est=2
													data='Monto excede al autorizado.'

								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,estado='autorizado',tipoCuenta='Ahorros',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).exists():
											cod_aut=True

									if cod_aut:
										if moneda=='soles':
											if (SaldoSoles >= montoRetiro):
												if (montoRetiro<=MontosAutorizado.montoSolesCtaAhorros):
													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)
													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()
													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)
													est=1
													data='exito'
													Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',tipoCuenta='Ahorros',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
												else:
													est=2
													data= 'Monto excede al autorizado.'
											else:
												if estadoConf==0 or estadoConf=='0':
													est=3
													data='Saldo insuficiente en la caja de soles. ¿Desea hacer el sobregiro en dolares?'
												else:
													montoDolarizado=round(ConvertirDecimal(montoRetiro)/ConvertirDecimal(tipoC),2)
													if (montoDolarizado<=MontosAutorizado.montoDolaresCtaAhorros):
														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='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()
															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)
															est=1
															data='exito'
															Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',tipoCuenta='Ahorros',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
														else:
															est=4
															data='Saldo insuficiente en la caja de dolares'
													else:
														est=2
														data= 'Monto excede al autorizado.'


										elif moneda=='dolares':
											if (SaldoDolares>=montoRetiro):
												if (montoRetiro<=MontosAutorizado.montoDolaresCtaAhorros):
													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)
													CtaAhorrosM=CtaAhorrosMovimientos.objects.filter(id_ctacte=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()
													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='S/. '+str(montoRetiro)
													est=1
													data='exito'
													Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',tipoCuenta='Ahorros',id_cta=IdCtaAhorros,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
												else:
													est=2
													data='Monto excede al autorizado.'
											else:
												if estadoConf==0 or estadoConf=='0':
													est=3
													data='Saldo insuficiente en la caja de dolares. ¿Desea retirar de la caja de soles?'
												else:
													montoSolarizado=round(ConvertirDecimal(montoRetiro)*ConvertirDecimal(tipoC),2)
													if (montoRetiro<=MontosAutorizado.montoDolaresCtaAhorros):
														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)
															CtaAhorrosM=CtaAhorrosMovimientos.objects.filter(id_ctacte=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()
															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='S/. '+str(montoSolarizado)
															importeRecibo='$/. '+str(montoRetiro)
															importeReciboDolarizadoSolarizado='S/. '+str(montoSolarizado)
															tcRecibo=str(tipoC)
															est=1
															data='exito'
															Solicitud_aut_sobregiros.objects.filter(id_caja_solicitante=C.pk,codigo_aut=CodigoA,estado='autorizado',tipoCuenta='Ahorros',id_cta=IdCtaCte,aux1=saldoSobregiro,aux2=moneda).update(estado='utilizado',fecha_creacion_cta=datetime.datetime.now())
														else:
															est=4
															data='Saldo insuficiente en la caja de soles'
													else:
														est=2
														data='Monto excede al autorizado.'
									else:
										est=5
										data=''
							else:
								est=4
								data='La cuenta esta bloqueda. Comuniquese con el administrador de sistemas o con el gerente para habilitarlo'

					except IntegrityError:
						est=4
						data=str(sys.exc_info()[1])
					except:
						est=4
						data=str(sys.exc_info()[1])
					
				else:
					est=4
					data='Monto ingresado es incorrecto'

			else:
				est=4
				data='Monto ingresado es incorrecto'
		else:
			est=4
			data='La clave de acceso es incorrecta'
	else:
		est=4
		data='fail'
	exito={'resultado':data,'estado':est,'concepto':conceptoRecibo,'nroRecibo':nroRecibo,'saldo':str(saldoTotalRecibo),'tc':str(tcRecibo),'importe':str(importeRecibo),'importeDS':str(importeReciboDolarizadoSolarizado)}
	resultado= json.dumps(exito)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)


@login_required
@transaction.atomic
def CtaAhorrosDepositar_operador(request):#encargado de crear cta ahorros
	data=''
	if request.is_ajax:
		IdCtaAhorros=request.GET.get('idctaahorros','')
		montoDeposito=request.GET.get('montodeposito','')
		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')
		Interes= request.POST.get('interes')
		usr=request.user.username
		fechaActual = time.strftime("%Y-%m-%d %H:%M:%S")
		fechaActual_ = time.strftime("%d-%m-%Y")

		C= Cajas.objects.get(id_usuario__usuario=usr)

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

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

		if comision=='' or comision==None:
			comision=0

		if montoDeposito !='' and montoDeposito != None:
			montoDeposito = ConvertirDecimal(montoDeposito)
			try:
				with transaction.atomic():
					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()
							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)
							data1='Abono a Cta Ahorros Nro. '+str(IdCtaAhorros)
							data='exito'
						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()
							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)
							data1='Abono a Cta Ahorros Nro. '+str(IdCtaAhorros)
							data='exito'
					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()
						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)


						#montoSobregiroRestante=(montoSobregiroRestante+interesMoraSobregiro)-montoDeposito
						data1='Deposito en Cta Ahorros Nro. '+str(IdCtaAhorros)+' <Pago de Sobregiro>'
						data='exito'
			except IntegrityError:
				data1='fail'
				data=str(sys.exc_info()[1])
			except:
				data1='fail'
				data=str(sys.exc_info()[1])
		else:
			data='Monto ingresado es incorrecto'

	else:
		data="fail"
	
	exito={'resultado':data,'msg':data1,'nro':dataNro}
	resultado= json.dumps(exito)
	mimetype="application/json" 
	return HttpResponse(resultado,mimetype)


@login_required
@transaction.atomic
def pagarInteresCtaAhorrosAdmin_ajax(request):
	exito=''
	if request.is_ajax:
		idI=request.GET.get('pk')
		usr=request.user.username
		G= Gerente.objects.get(usuario=usr)
		C= Cajas.objects.get(id_usuario=G.id_usuario.pk)
		try:
			with transaction.atomic():
				if InteresesCtaAhorros.objects.filter(id=idI,estado='pendiente').exists():
					OI=InteresesCtaAhorros.objects.get(id=idI)
					OCAM=CtaAhorrosMovimientos.objects.get(pk=OI.id_ctaahorrosmov.pk)
					OCA=CtaAhorros.objects.get(pk=OCAM.id_ctaahorros.pk)
					saldo=OCA.saldo
					if saldo>0:
						OCD=TCajaDebe.objects.get(pk=OCAM.aux1)
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRE)+1
						cajah= TCajaHaber(id_personal=C.id_usuario,tablaRelacional='PagoInteresCtaAhorros',conceptoDetalle='Pago de Interes de Cta Ahorros Nro '+str(OCAM.id_ctaahorros.pk),tipoDocumento='R/E',cantidadDinero=OI.monto,moneda=OCD.moneda,observaciones='',estadoTransaccion='realizado',id_oficina=C.id_oficina,id_caja=C,nroRecibo=str(numeroR))
						cajah.save()
						InteresesCtaAhorros.objects.filter(pk=idI).update(idCajaHaber=cajah.pk,estado='retirado')
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRE=numeroR)
						exito='exito'
					else:
						exito='fail'
				else:
					exito='fail'

		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
	else:
		exito='fail'+str(sys.exc_info()[1])
	data={'resultado':exito}
	resultado= json.dumps(data)
	mimetype="application/json"
	return HttpResponse(resultado,mimetype)

#------------------ DESKTOP -----------------------
@transaction.atomic
def CierreCajaDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		mac=request.GET.get('mac','')
		fechaCierre=request.GET.get('fecha')
		idCierreD=request.GET.get('idCierreLocal')
		debeS= request.GET.get('debeSoles')
		debeD= request.GET.get('debeDolares')
		haberS= request.GET.get('haberSoles')
		haberD= request.GET.get('haberDolares')
		saldoIS= request.GET.get('saldoIS')
		saldoID= request.GET.get('saldoID')
		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 CierreCaja_Desktop.objects.filter(id_caja=idCaja,idCierre_Desktop=idCierreD).exists():
						cierreD= CierreCaja_Desktop(id_caja=C,mac=mac,idCierre_Desktop=idCierreD,fechaCierre=fechaCierre,debe_soles=debeS,debe_dolares=debeD,haber_soles=haberS,haber_dolares=haberD,saldoI_soles=saldoIS,saldoI_dolares=saldoID)
						cierreD.save()
						dato={'idCierreLocal':idCierreD}
						exito='1'
					else:
						dato={'idCierreLocal':idCierreD}
						exito='1'
				else:
					exito='-1'
					error='error de autentificacion'
		except IntegrityError:
			exito='-1'
			error=str(sys.exc_info()[1])
		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 SolAutoComisionDesktop_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		idO=request.GET.get('idDestino')
		mac=request.GET.get('mac','')
		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 Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,estado__in=['pendiente','autorizado'],id_oficina_des=idO).exists():
						solComi= Solicitud_aut_comision(codigo_aut='c'+id_cod_comi(),estado='pendiente',id_user_solicitante=C.id_usuario,id_caja_solicitante=C,id_oficina_des=idO)
						solComi.save()
						exito='exito'
					exito='1'
				else:
					exito='-1'
					error='error de 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 comisionesDesktop_ajax_view(request):
	data=''
	if request.is_ajax:
		idCaja=request.GET.get('idCaja')
		mac=request.GET.get('mac','')
		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:
					com= Configuracion_comision.objects.filter(id_config__id_caja=C.pk).values('id_config','montomin','montomax','comision','id_oficina','tipo','base_ori','base_des')
					lista=[]
					for obj in com:
						d={}
						d['montoMin']= str(obj['montomin'])
						d['montoMax']= str(obj['montomax'])
						d['comision']= str(obj['comision'])
						d['tipo']= obj['tipo']
						d['base_ori']= obj['base_ori']
						d['base_des']= obj['base_des']
						#d['id_caja']= str(obj['id_caja'])
						d['id_oficina']= str(obj['id_oficina'])
						lista.append(d)
					dato=lista
					exito='1'
				else:
					exito='-1'
					error='error de 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)
#------------------ END DESKTOP -----------------





@login_required
@transaction.atomic
def actualizar_hora_ingreso_ajax(request):#este formulario mocifica los datos del cliente... tiene los mismos atributos del formulario anterior
	data=''
	if request.is_ajax:
		hora=request.GET.get('hora','')
		idO=request.GET.get('idOficina','')
		idC=request.GET.get('idCaja','')
		try:
			with transaction.atomic():
				aux= Cajas.objects.filter(pk=idC,id_oficina=idO).update(horaIngreso=hora)
				#C1=Cliente(id=idC,dni=dniC,nombre=NombreC,Apellido_paterno=PaternoC,Apellido_materno=MaternoC,telefono=TelefonoC,direccion=DireccionC,fecha_nacimiento=Fecha_NacimientoC,email=EmailC,drem=DremC,tipo_persona=TipoPers)
				#C1.save()
				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 Desbloquear_view(request):
	if not request.user.is_authenticated():
		return HttpResponseRedirect('/sistem/login/')
	else:
		if request.is_ajax:
			usr = request.user.username
			C= Cajas.objects.get(id_usuario__usuario=usr)
			data=''
			codigo=request.POST.get('codigo','')
			if Codigo_desbloqueo_sistema.objects.filter(codigo_aut=codigo,estado='autorizado',id_user_solicitante=C.id_usuario.pk,id_caja_solicitante=C.pk).exists():
				Codigo_desbloqueo_sistema.objects.filter(codigo_aut=codigo,estado='autorizado',id_user_solicitante=C.id_usuario.pk,id_caja_solicitante=C.pk).update(estado='utilizado')
				HoraIngresoPersonal.objects.filter(id_usuario=C.id_usuario.pk).update(bloqueado="no")
								
				return HttpResponseRedirect('/sistem/inicio_tem/')
			else:
				return HttpResponseRedirect('/sistem/bloqueado/')
		else:
			return HttpResponseRedirect('/sistem/bloqueado/')


@login_required
@transaction.atomic
def Autorizar_desbloqueo_tardanza_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		observacion=request.GET.get('obs')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if Codigo_desbloqueo_sistema.objects.filter(pk=idA,estado='pendiente').exists():
						Codigo_desbloqueo_sistema.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',usuario_autorizador='Gerente',id_usuario_aut=g.pk,fecha_aut=datetime.datetime.now(),obs=observacion)
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def Autorizar_desbloqueo_tardanza_personal_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		observacion=request.GET.get('obs')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					u= Personal.objects.get(usuario=usr)
					if Codigo_desbloqueo_sistema.objects.filter(pk=idA,estado='pendiente').exists():
						Codigo_desbloqueo_sistema.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',usuario_autorizador='Personal',id_usuario_aut=u.pk,fecha_aut=datetime.datetime.now(),obs=observacion)
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------------------------------------------------
@login_required
@transaction.atomic
def solicitud_Autorizacion_anulacion_ajax_view(request):
	exito=''
	if request.is_ajax:
		pkT=request.GET.get('pk')
		tabla=request.GET.get('tabla')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				if pkT != None and pkT.isdigit():
					if tabla=="venta":
						if VentaDolar.objects.filter(pk=pkT,idCajaHaber__estadoTransaccion="activo").exists():
							if not SolicitudAnulacionDolar.objects.filter(tablaRelacional="VentaDolar",id_CompraVenta_dolar=pkT).exists():
								srT=SolicitudAnulacionDolar(id_CompraVenta_dolar=pkT,tablaRelacional="VentaDolar",codigo_aut=id_generator(),estado='pendiente',id_user_solicitante=C.id_usuario,id_caja_solicitante=C)
								srT.save()
								exito='exito'
							else:
								exito='Ya Existe Una Solicitud de Autorizacion'
						else:
							exito="esta venta ya esta anulada"
					elif tabla=="compra":
						if CompraDolar.objects.filter(pk=pkT,idCajaDebe__estadoTransaccion="activo").exists():
							if not SolicitudAnulacionDolar.objects.filter(tablaRelacional="CompraDolar",id_CompraVenta_dolar=pkT).exists():
								srT=SolicitudAnulacionDolar(id_CompraVenta_dolar=pkT,tablaRelacional="CompraDolar",codigo_aut=id_generator(),estado='pendiente',id_user_solicitante=C.id_usuario,id_caja_solicitante=C)
								srT.save()
								exito='exito'
							else:
								exito='Ya Existe Una Solicitud de Autorizacion'
						else:
							exito="esta compra ya esta anulada"
					else:
						exito="error en operacion"
				else:
					exito="error en operacion"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Autorizar_anu_dolar_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente',aux1__startswith='autorizado').exists():
						if SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente').exists():
							SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',usuario_autorizador='Gerente',id_usuario_aut=g.pk,fecha_aut=datetime.datetime.now())
							exito='exito'
						else:
							exito='Error'
					else:
						exito='Solicite desbloqueo de autorizacion al gerente o subgerente'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#********************************************************************
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Desbloquear_anu_dolar_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		obs=request.GET.get('obs','')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente').exists():
						SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente').update(observaciones=obs,aux1="autorizado-"+str(g.pk))
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)
#********************************************************************
@login_required
@transaction.atomic
def Autorizar_anu_dolar_personal_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					p= Personal.objects.get(usuario=usr)
					if SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente',aux1__startswith='autorizado').exists():
						if SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente').exists():
							soli_autori= SolicitudAnulacionDolar.objects.get(pk=idA,estado='pendiente')
							if soli_autori.id_user_solicitante.pk != C.id_usuario.pk:
								SolicitudAnulacionDolar.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',fecha_aut=datetime.datetime.now(),usuario_autorizador='Personal',id_usuario_aut=p.pk)
								exito='exito'
							else:
								exito='Usted no puede Autorizar esta anulacion'
						else:
							exito='Error'
					else:
						exito='Solicite desbloqueo de autorizacion al Gerente o Subgerente'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#------------------ extorno de transferencias ----------------------------
#---------------------------------------------------
@login_required
@transaction.atomic
def solicitud_Aut_Extorno_ST_ajax_view(request):
	exito=''
	if request.is_ajax:
		pkT=request.GET.get('pk')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				if pkT != None and pkT.isdigit():
					if SolicitudTransferencia.objects.filter(pk=pkT,idCajaDebe__estadoTransaccion="activo",idCajaDebe__id_caja=C.pk).exists():
						if not SolicitudAutExtornoST.objects.filter(id_st=pkT,id_caja_solicitante=C.pk).exclude(estado='utilizado').exists():
							st= SolicitudTransferencia.objects.get(pk=pkT)
							srT=SolicitudAutExtornoST(id_st=st,codigo_aut='E'+id_generator(),estado='pendiente',id_user_solicitante=C.id_usuario,id_caja_solicitante=C)
							srT.save()
							exito='exito'
						else:
							exito='Ya Existe Una Solicitud de Autorizacion'
					else:
						exito="la ST no esta ACTIVO"
				else:
					exito="error en operacion"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Autorizar_ext_st_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					g= Gerente.objects.get(usuario=usr)
					if SolicitudAutExtornoST.objects.filter(pk=idA,estado='pendiente').exists():
						SolicitudAutExtornoST.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',usuario_autorizador='Gerente',id_usuario_aut=g.pk,fecha_aut=datetime.datetime.now())
						exito='exito'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#********************************************************************
@login_required
@transaction.atomic
def Autorizar_ext_st_personal_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		usr= request.user.username
		C= Cajas.objects.get(id_usuario__usuario=usr)
		try:
			with transaction.atomic():
				if idA != '' and idA != None:
					p= Personal.objects.get(usuario=usr)
					if SolicitudAutExtornoST.objects.filter(pk=idA,estado='pendiente').exists():
						soli_autori= SolicitudAutExtornoST.objects.get(pk=idA,estado='pendiente')
						if soli_autori.id_user_solicitante.pk != C.id_usuario.pk:
							SolicitudAutExtornoST.objects.filter(pk=idA,estado='pendiente').update(estado='autorizado',fecha_aut=datetime.datetime.now(),usuario_autorizador='Personal',id_usuario_aut=p.pk)
							exito='exito'
						else:
							exito='Usted no puede Autorizar el extorno de esta transferencia'
					else:
						exito='Error'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#--------- guardar comiciones deybis---------------------
def guardar_comisiones_unitarias(ori,des,MontoMin,MontoMax,comi,bn,bn_d,cn,cn_d,bcp,bcp_d,otr,eliminar):
	#bn,cn,bcp,otr
	Comi=0;
	Bn=0;
	Bnd=0;
	Cn=0;
	Cnd=0;
	Bcp=0;
	Bcpd=0;
	Otr=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)

		if str(bn).find("%")!=-1:
			Bn=round(ConvertirDecimal(bn.replace("%",""))/100,6)
		else:
			Bn=ConvertirDecimal(bn)
		if str(bn_d).find("%")!=-1:
			Bnd=round(ConvertirDecimal(bn_d.replace("%",""))/100,6)
		else:
			Bnd=ConvertirDecimal(bn_d)
		if str(cn).find("%")!=-1:
			Cn=round(ConvertirDecimal(cn.replace("%",""))/100,6)
		else:
			Cn=ConvertirDecimal(cn)
		if str(cn_d).find("%")!=-1:
			Cnd=round(ConvertirDecimal(cn_d.replace("%",""))/100,6)
		else:
			Cnd=ConvertirDecimal(cn_d)
		if str(bcp).find("%")!=-1:
			Bcp=round(ConvertirDecimal(bcp.replace("%",""))/100,6)
		else:
			Bcp=ConvertirDecimal(bcp)
		if str(bcp_d).find("%")!=-1:
			Bcpd=round(ConvertirDecimal(bcp_d.replace("%",""))/100,6)
		else:
			Bcpd=ConvertirDecimal(bcp_d)
		if str(otr).find("%")!=-1:
			Otr=round(ConvertirDecimal(otr.replace("%",""))/100,6)
		else:
			Otr=ConvertirDecimal(otr)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
				else:
					if not Configuracion_comision.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
				else:
					if not Configuracion_comision.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
				else:
					if not Configuracion_comision.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
				else:
					if not Configuracion_comision.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
				else:
					if not Configuracion_comision.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
				else:
					if not Configuracion_comision.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0,banco_nacion=Bn,banco_nacion_de=Bnd,otros_bancos=Otr,continental=Cn,bcp=Bcp,continental_de=Cnd,bcp_de=Bcpd)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_general_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]!="" and comi[3]!="" and comi[4]!="" and comi[5]!="" and comi[6]!="" and comi[7]!="":
								guardar_comisiones_unitarias(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],comi[3],comi[4],comi[5],comi[6],comi[7],comi[8],comi[9],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)


#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#---------- guardar comisiones  intercambio -----------
def guardar_comisiones_unitarias_intercambio(ori,des,MontoMin,MontoMax,comi,eliminar):
	Comi=0;
	Aux_ori=ori
	if Aux_ori.find("b")==-1:
		Aux_ori= Aux_ori.split(":")[0]
	if Aux_ori != des:
		if str(comi).find("%")!=-1:
			Comi=round(ConvertirDecimal(comi.replace("%",""))/100,6)
		else:
			Comi=ConvertirDecimal(comi)
		if str(ori).find("b")!=-1:
			#subbase
			if str(des).find("b")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)| Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).delete()

				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)| Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=caja.pk)
						conf_comi.save()
			else:
				base_ori=Base_Ext.objects.get(pk=ori[1:])
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_caja=base_ori.id_confSis.id_caja.pk)
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,tipo='subbase',base_ori=base_ori.pk,id_caja=0).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_ori=base_ori.pk,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_ori=base_ori.pk,id_caja=0)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_ori=base_ori.pk,id_caja=0)
						conf_comi.save()
		else:
			if str(des).find("b")!=-1:
				aux= ori.split(":")
				base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,tipo='subbase',base_des=base_des.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,tipo='subbase',base_des=base_des.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,tipo='subbase',base_des=base_des.pk)|Q(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,tipo='subbase',base_des=base_des.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=base_des.id_confSis.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,tipo='subbase',base_des=base_des.pk)
						conf_comi.save()
			elif str(des).find("c")!=-1:
				aux= ori.split(":")
				caja= Cajas.objects.get(pk=des[1:])
				#base_des=Base_Ext.objects.get(pk=des[1:])#id_confSis.id_oficina,id_confSis.id_caja
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,id_caja=caja.pk).delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,id_caja=caja.pk).update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=caja.pk)|Q(id_config=conf,id_oficina=caja.id_oficina,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=caja.pk)).exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=caja.id_oficina,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=caja.pk)
						conf_comi.save()
			else:
				aux= ori.split(":")
				ofi= Oficina.objects.get(pk=des)
				conf= ConfiguracionExtra_caja.objects.get(id_oficina=aux[0],id_caja=aux[1])
				if eliminar=="si":
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,id_caja=0).exclude(tipo='subbase').delete()
				if Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').exists():
					Configuracion_comision_intercambio.objects.filter(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,id_caja=0).exclude(tipo='subbase').update(comision=Comi)
				else:
					if not Configuracion_comision_intercambio.objects.filter(Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMin,montomax__gte=MontoMin,id_caja=0)|Q(id_config=conf,id_oficina=ofi,montomin__lte= MontoMax,montomax__gte=MontoMax,id_caja=0)).exclude(tipo='subbase').exists():
						#Agregar
						conf_comi= Configuracion_comision_intercambio(id_config=conf,id_oficina=ofi,montomin= MontoMin,montomax=MontoMax,comision=Comi,id_caja=0)
						conf_comi.save()
	return True

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_intercambio_ajax_view(request):
	exito=''
	if request.is_ajax:
		Origenes=request.GET.get('ori')
		Destinos=request.GET.get('des')
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxO=eval(Origenes)
			AuxD=eval(Destinos)
			AuxC=eval(configuracion)
			with transaction.atomic():
				for ori in AuxO:
					for des in AuxD:
						aux_eli="no"
						if eliminar_conf=="si":
							aux_eli="si"
						for comi in AuxC:
							if comi[0]!="" and comi[1]!="" and comi[2]:
								guardar_comisiones_unitarias_intercambio(ori,des,ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],aux_eli)
								aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)


@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Guardar_Comisiones_Bancos_general_ajax_view(request):
	exito=''
	if request.is_ajax:
		configuracion=request.GET.get('data')
		eliminar_conf=request.GET.get('eliminar','')
		Comi=0
		try:
			AuxC=eval(configuracion)
			with transaction.atomic():
				aux_eli="no"
				if eliminar_conf=="si":
					aux_eli="si"
				for comi in AuxC:
					if comi[0]!="" and comi[1]!="" and comi[2]!="" and comi[3]!="" and comi[4]!="" and comi[5]!="":
						guardar_comisiones_bancos_unitarias(ConvertirDecimal(comi[0]),ConvertirDecimal(comi[1]),comi[2],comi[3],comi[4],comi[5],aux_eli)
						aux_eli="no"
				exito="exito"
		except:
			exito='fail' +str(sys.exc_info()[1])
	else:
		exito='fail'
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#--------- guardar comiciones deybis---------------------
def guardar_comisiones_bancos_unitarias(MontoMin,MontoMax,bn,cn,bcp,otr,eliminar):
	#bn,cn,bcp,otr
	Bn=0;
	Cn=0;
	Bcp=0;
	Otr=0;
	if str(bn).find("%")!=-1:
		Bn=round(ConvertirDecimal(bn.replace("%",""))/100,6)
	else:
		Bn=ConvertirDecimal(bn)

	if str(cn).find("%")!=-1:
		Cn=round(ConvertirDecimal(cn.replace("%",""))/100,6)
	else:
		Cn=ConvertirDecimal(cn)

	if str(bcp).find("%")!=-1:
		Bcp=round(ConvertirDecimal(bcp.replace("%",""))/100,6)
	else:
		Bcp=ConvertirDecimal(bcp)

	if str(otr).find("%")!=-1:
		Otr=round(ConvertirDecimal(otr.replace("%",""))/100,6)
	else:
		Otr=ConvertirDecimal(otr)
	if eliminar=="si":
		Configuracion_monto_bancos.objects.all().delete()
	if Configuracion_monto_bancos.objects.filter(montomin= MontoMin,montomax=MontoMax).exists():
		Configuracion_monto_bancos.objects.filter(montomin= MontoMin,montomax=MontoMax).update(banco_nacion=Bn,otros_bancos=Otr,continental=Cn,bcp=Bcp)
	else:
		if not Configuracion_monto_bancos.objects.filter(Q(montomin__lte= MontoMin,montomax__gte=MontoMin)| Q(montomin__lte= MontoMax,montomax__gte=MontoMax)).exists():
			#Agregar
			conf_comi= Configuracion_monto_bancos(montomin= MontoMin,montomax=MontoMax,banco_nacion=Bn,otros_bancos=Otr,continental=Cn,bcp=Bcp)
			conf_comi.save()
	return True


@transaction.atomic
def admin_guardar_saldos_view(request):
	exito='exito'
	try:
		with transaction.atomic():
			liCa= Cajas.objects.filter(estado=True).exclude(id_oficina__nombre_oficina="Gerencia").values('pk')
			for obj in liCa:
				c=Cajas.objects.get(pk=obj['pk'])
				sa=SaldoDisponibleCajas.objects.get(id_caja=obj['pk'])
				sm=SaldoDisponibleCajaMaterial.objects.get(id_caja=obj['pk'])
				saldo=saldo_sistema(id_caja=c,saldo_soles=sa.saldo_soles,saldo_dolares=sa.saldo_dolares,saldo_material=sm.saldo_Material,fechaActual=datetime.date.today())
				saldo.save()
	except:
		exito=str(sys.exc_info()[1])
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def configurarEgresos_Admin_caja_ajax_view(request):
	idc=request.GET.get('pkC')
	eg=request.GET.get('egreso','')
	eg_pt=request.GET.get('egreso_pt','')
	eg_hb=request.GET.get('egreso_hb','')
	exito=''
	if idc != None:
		try:
			with transaction.atomic():
				C= Cajas.objects.get(pk=idc)
				O=	Oficina.objects.get(pk=C.id_oficina.pk)
				if ConfiguracionExtra_caja.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).exists():
					ConfiguracionExtra_caja.objects.filter(id_caja=idc,id_oficina=C.id_oficina.pk).update(aux7=eg,aux10=eg_pt,egreso_hab=eg_hb)
					exito="exito"
				else:
					#CE=ConfiguracionExtra_caja(id_oficina=O,id_caja=C,aux3=eg)	
					#OCE.save()
					exito='configuracion no inicializada'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	else:
		exito="error"
	mimetype="text"
	return HttpResponse(exito,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def reiniciar_recibos_gere_caja_ajax_view(request):
	pkC=request.GET.get('pkC')
	exito=''
	if pkC != None:
		try:
			with transaction.atomic():
				ONR=NroReciboCaja.objects.get(id_caja=pkC)
				reiniciarR=ReinicioNroReciboCaja(id_oficina=ONR.id_caja.id_oficina,id_caja=ONR.id_caja,u_nroRE=ONR.nroRE,u_nroRI=ONR.nroRI,u_nroREM=ONR.nroREM,u_nroRIM=ONR.nroRIM,u_nroST=ONR.nroST,u_nroPT=ONR.nroPT,u_nroSI=ONR.nroSI,u_nroPI=ONR.nroPI)
				reiniciarR.save()
				NroReciboCaja.objects.filter(pk=ONR.pk,id_caja=pkC).update(nroRE=0,nroRI=0,nroREM=0,nroRIM=0,nroST=0,nroPT=0,nroSI=0,nroPI=0)
				exito='exito'
		except IntegrityError:
			exito='fail'+str(sys.exc_info()[1])
		except:
			exito='fail'+ str(sys.exc_info()[1])
	else:
		exito="error"
	mimetype="text"
	return HttpResponse(exito,mimetype)

#************ conceptos ****************
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AgregarConcepto_ajax_view(request):
	data=''
	if request.is_ajax:
		con=request.GET.get('con')
		try:
			with transaction.atomic():
				if con != None and con !="":
					if not ConceptoEgreso.objects.filter(concepto=con).exists():
						est = ConceptoEgreso(concepto=con)
						est.save()
						data="exito"
					else:
						data="ya existe un concepto con el mismo detalle"
				else:
					data='complete todos los campos'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Actualizar_concepto_ajax_view(request):
	data=''
	if request.is_ajax:
		pk=request.GET.get('pk')
		con=request.GET.get('con')
		try:
			with transaction.atomic():
				if pk != None and pk !="":
					ConceptoEgreso.objects.filter(pk=pk).update(concepto=con)
					data="exito"
				else:
					data='complete todos los campos'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
def Mantenimiento_concepto_e_tem_view(request):
	return render(request,'mantenimiento_egreso.html',{"resultado":''} )

#conceptos para caja material
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def AgregarConcepto_m_ajax_view(request):
	data=''
	if request.is_ajax:
		con=request.GET.get('con')
		try:
			with transaction.atomic():
				if con != None and con !="":
					if not ConceptoEgresoM.objects.filter(concepto=con).exists():
						est = ConceptoEgresoM(concepto=con)
						est.save()
						data="exito"
					else:
						data="ya existe un concepto con el mismo detalle"
				else:
					data='complete todos los campos'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def Actualizar_concepto_m_ajax_view(request):
	data=''
	if request.is_ajax:
		pk=request.GET.get('pk')
		con=request.GET.get('con')
		try:
			with transaction.atomic():
				if pk != None and pk !="":
					ConceptoEgresoM.objects.filter(pk=pk).update(concepto=con)
					data="exito"
				else:
					data='complete todos los campos'
		except IntegrityError:
			data='fail'
		except:
			data='fail'+ str(sys.exc_info()[0])
	else:
		data="fail"
	mimetype="text"
	return HttpResponse(data,mimetype)

@login_required
def Mantenimiento_concepto_e_m_tem_view(request):
	return render(request,'mantenimiento_egreso_m.html',{"resultado":''} )
#REIMPRESION CIERRE CAJA DOLARES
@login_required
def reimprimir_cierre_dolares_view(request):
	tex_sis=request.POST.get('SIS')
	tex_sid = request.POST.get('SID')
	tex_is= request.POST.get('IS')
	tex_id = request.POST.get('ID')
	tex_es = request.POST.get('ES')
	tex_ed = request.POST.get('ED')
	tex_ss = request.POST.get('SS')
	tex_sd= request.POST.get('SD')
	tex_siss = request.POST.get('SisS','')
	tex_sisd= request.POST.get('SisD','')
	tex_f1 = request.POST.get('F1','')
	tex_f2= request.POST.get('F2')
	tex_obs=request.POST.get('obs')
	return render(request,"reimprimir_cierre_dolares.html",{"SIS":tex_sis,"SID":tex_sid,"IS":tex_is,"ID":tex_id,"ES":tex_es,"ED":tex_ed,"SS":tex_ss,"SD":tex_sd,"SisS":tex_siss,"SisD":tex_sisd,"F1":tex_f1,"F2":tex_f2,"obs":tex_obs} )

#REIMPRESION CIERRE CAJA DOLARES
@login_required
def reimprimir_cierre_material_view(request):
	tex_sis=request.POST.get('SIS')
	tex_sid = request.POST.get('SID')
	tex_sim = request.POST.get('SIM')
	tex_is= request.POST.get('IS')
	tex_id = request.POST.get('ID')
	tex_im = request.POST.get('IM')
	tex_es = request.POST.get('ES')
	tex_ed = request.POST.get('ED')
	tex_em = request.POST.get('EM')
	tex_ss = request.POST.get('SS')
	tex_sd= request.POST.get('SD')
	tex_sm= request.POST.get('SM')
	tex_siss = request.POST.get('SisS','')
	tex_sisd= request.POST.get('SisD','')
	tex_sism= request.POST.get('SisM','')
	tex_f1 = request.POST.get('F1')
	tex_f2= request.POST.get('F2')
	tex_obs=request.POST.get('obs')
	return render(request,"reimprimir_cierre_material.html",{"SIS":tex_sis,"SID":tex_sid,"SIM":tex_sim,"IS":tex_is,"ID":tex_id,"IM":tex_im,"ES":tex_es,"ED":tex_ed,"EM":tex_em,"SS":tex_ss,"SD":tex_sd,"SM":tex_sm,"SisS":tex_siss,"SisD":tex_sisd,"SisM":tex_sism,"F1":tex_f1,"F2":tex_f2,"obs":tex_obs} )

#************** regularizar cajas subgerente ************************
@login_required
@permission_required('Main.add_oficina')
@transaction.atomic
def regularizar_caja_subgerente_ajax_view(request):
	data=''
	if request.is_ajax:
		try:
			with transaction.atomic():
				consulta= Gerente.objects.filter(id_usuario__cargo='subgerente').values('pk','id_usuario')
				O = Oficina.objects.get(nombre_oficina='Gerencia')
				for obj in consulta:
					P = Personal.objects.get(pk=obj['id_usuario'])
					C= Cajas(nombre="caja Subgerencia",id_oficina=O,id_usuario=P)
					C.save()
					Nr= NroReciboCaja(id_oficina= O,id_caja=C,nroRE=0,nroRI=0,nroST= 0,nroPT=0,nroSI=0,nroPI=0)
					Nr.save()
					S=SaldoDisponibleCajas(id_oficina=O,id_caja=C,saldo_soles=0,saldo_dolares=0)
					S.save()
				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 solicitud_sobregiro_cuenta_main_ajax_view(request):
	exito=''
	if request.is_ajax:
		pk_cuenta=request.GET.get('pk_cta')
		obs=request.GET.get('obs')
		saldo=request.GET.get('saldo')
		retiro=request.GET.get('retiro')
		sobregiro=request.GET.get('sobregiro')
		indefinido=request.GET.get('indefinido')
		dias=request.GET.get('nro_dias')
		fecha_pago=request.GET.get('fecha_pago','')
		interes_dia=request.GET.get('interes_dia','')
		interes_total=request.GET.get('interes_total','')
		usr= request.user.username
		try:
			with transaction.atomic():
				C= Cajas.objects.get(id_usuario__usuario=usr)
				if not dias.isdigit():
					dias=0
				if fecha_pago=='':
					fecha_pago=None
				if interes_dia=='':
					interes_dia=0
				if interes_total =='':
					interes_total=0
				if pk_cuenta != None and pk_cuenta.isdigit():
					if not Solicitud_sobregiros_ctacte_main.objects.filter(id_ctacte=pk_cuenta,id_caja_solicitante=C.pk).exclude(estado='utilizado').exists():
						cta= CtaCte_main.objects.get(pk=pk_cuenta)
						so=Solicitud_sobregiros_ctacte_main(id_ctacte=cta,estado='pendiente',id_user_solicitante=C.id_usuario,id_caja_solicitante=C,obs=obs,monto_saldo=saldo,monto_retiro=retiro,monto_sobregiro=sobregiro,indefinido=indefinido,nro_dias=dias,fecha_pago=fecha_pago,interes_dia=interes_dia,interes_total=interes_total)
						so.save()
						exito='exito'
					else:
						so =Solicitud_sobregiros_ctacte_main.objects.get(id_ctacte=pk_cuenta,id_caja_solicitante=C.pk)
						exito='Ya existe una solicitud de sobregiro en estado: '+ so.estado
				else:
					exito="error en operacion"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

@login_required
@transaction.atomic
def Autorizar_sobregiro_cuenta_admin_ajax_view(request):
	exito=''
	if request.is_ajax:
		idA=request.GET.get('pk')
		id_cuenta=request.GET.get('cta')
		obs=request.GET.get('obs')
		usr= request.user.username
		try:
			C= Cajas.objects.get(id_usuario__usuario=usr)
			with transaction.atomic():
				if idA != '' and idA != None:
					#g= Gerente.objects.get(usuario=usr)
					if C.id_oficina.categoria_oficina=="central":
						if Solicitud_sobregiros_ctacte_main.objects.filter(pk=idA,id_ctacte=id_cuenta,estado='pendiente').exists():
							Solicitud_sobregiros_ctacte_main.objects.filter(pk=idA,id_ctacte=id_cuenta,estado='pendiente').update(estado='autorizado',usuario_autorizador=usr,id_usuario_aut=C.id_usuario.pk,fecha_aut=datetime.datetime.now(),obs_autorizado=obs)
							exito='exito'
						else:
							exito='Error'
					else:
						exito='usted no esta autorizado para esta operacion'
				else:
					exito="error"
		except IntegrityError:
			exito='fail'
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="text"
	data=exito
	return HttpResponse(data,mimetype)

#cambio de oficina destino
@login_required
@transaction.atomic
def cambio_destino_ajax_view(request):
	exito=''
	if request.is_ajax:
		idST=request.GET.get('idST')
		destino=request.GET.get('ofiDes')
		comi=request.GET.get('comi')
		cod=request.GET.get('codigo')
		obs=request.GET.get('obs')
		r_monto=''
		r_concepto='Cambio de destino de Transferencia'
		r_fecha=''
		r_nrore=''
		exito=''
		usr= request.user.username
		try:
			with transaction.atomic():
				if idST != '' and idST != None:
					C= Cajas.objects.get(id_usuario__usuario=usr)
					trans = SolicitudTransferencia.objects.get(pk=idST)
					Monto = float(trans.idCajaDebe.cantidadDinero)-float(trans.comision)-float(trans.monto_conceptos)
					TM= ConfiguracionExtra_caja.objects.get(id_caja=C.pk)
					saldo =SaldoDisponibleCajas.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
					OficinaDestino=destino
					is_cod=False
					autorizado = True
					#------verificacion de comision------
					ver_st=True
					if OficinaDestino.isdigit():
						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(comi):
									ver_st=True
								else:
									ver_st=False
							else:
								if float(confco[0]['comision'])<=float(comi):
									ver_st=True
								else:
									ver_st=False
					else:
						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(comi):
										ver_st=True
									else:
										ver_st=False
								else:
									if float(confco[0]['comision'])<=float(comi):
										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(comi):
										ver_st=True
									else:
										ver_st=False
								else:
									if float(confco[0]['comision'])<=float(comi):
										ver_st=True
									else:
										ver_st=False
					#---------
					#if not ver_st:
					#	if not Solicitud_aut_comision.objects.filter(codigo_aut=cod,id_caja_solicitante=C.pk,estado='autorizado').exists():
					#		autorizado =False
					#	else:
					#		is_cod = True
					Ingres =float(TM.cambioO)
					if float(comi)> float(trans.comision):
						Ingres= Ingres+ float(comi) -float(trans.comision)
					r_monto =normalizar(Ingres)
					if autorizado:
						if ST_BaseExterna.objects.filter(id_transferencia=idST).exists():
							stbe =ST_BaseExterna.objects.get(id_transferencia=idST)
							if destino.isdigit():
								if stbe.id_base_des!= None and stbe.id_base_des!='':
									ST_BaseExterna.objects.filter(id_transferencia=idST).update(id_base_des=None)
							else:
								if str(destino)[0]=='b':
									bDes=destino[1:]
									bx=Base_Ext.objects.get(pk=destino[1:])
									destino= bx.id_confSis.id_oficina.pk
									ST_BaseExterna.objects.filter(id_transferencia=idST).update(id_base_des=bDes)
								elif str(destino)[0]=='c':
									ci= Cajas.objects.get(pk=destino[1:])
									destino= ci.id_oficina.pk 

						else:
							if not destino.isdigit():
								if str(destino)[0]=='b':
									bDes=destino[1:]
									bx=Base_Ext.objects.get(pk=destino[1:])
									destino= bx.id_confSis.id_oficina.pk
									stbe = ST_BaseExterna(id_transferencia=trans,id_base_des=bDes)
									stbe.save()
								elif str(destino)[0]=='c':
									ci= Cajas.objects.get(pk=destino[1:])
									destino= ci.id_oficina.pk 
						#ingreso
						Nrecibo= NroReciboCaja.objects.get(id_oficina=C.id_oficina.pk,id_caja=C.pk)
						numeroR = int(Nrecibo.nroRI)+1
						r_nrore=numeroR
						debe= TCajaDebe(id_personal=C.id_usuario,tablaRelacional='cambio_destino',conceptoDetalle='Cambio de destino de ST',tipoDocumento='R/I',cantidadDinero=Ingres,moneda='soles',observaciones='',estadoTransaccion='activo',nroRecibo=str(numeroR),id_oficina=C.id_oficina,id_caja=C)
						debe.save()
						cambio = cambio_destino(id_st=trans,id_debe=debe,ofi_destino_ini=trans.id_oficina,ofi_destino_fin=destino,comision=comi,derecho_cambio=TM.cambioO,id_personal_operacion=C.id_usuario,id_caja_operacion=C,observaciones=obs)
						cambio.save()
						NroReciboCaja.objects.select_for_update().filter(id_oficina=C.id_oficina.pk,id_caja=C.pk).update(nroRI=numeroR)
						SaldoDisponibleCajas.objects.select_for_update().filter(pk= saldo.pk).update(saldo_soles=float(saldo.saldo_soles)+Ingres)
						#/ingreso
						ofi = Oficina.objects.get(pk=destino)
						if is_cod:
							Solicitud_aut_comision.objects.filter(id_caja_solicitante=C.pk,codigo_aut=cod,estado='autorizado').update(id_st=trans.pk,estado='utilizado',fecha_creacion_st=datetime.datetime.now())
						TCajaDebe.objects.filter(pk=trans.idCajaDebe.pk).update(aux1=comi)
						SolicitudTransferencia.objects.filter(pk=idST).update(id_oficina=ofi)
						r_fecha= str(datetime.datetime.now().strftime("%d-%m-%Y %H:%M"))
						exito='exito'
					else:
						exito="Se requiere codigo de autorizacion de comision"
				else:
					exito="error"
		except IntegrityError:
			exito='fail'+ str(sys.exc_info()[1])
	else:
		exito='fail'+ str(sys.exc_info()[1])
	mimetype="application/json"
	data= json.dumps({'exito':exito,'r_monto':r_monto,'r_con':r_concepto,'r_fecha':r_fecha,'r_nrore':r_nrore})
	return HttpResponse(data,mimetype)
#--- DNI
def Service_DNI_check_view(request):
	return render(request,"servicio_dni_check.html",{} )
