Advertisement
Guest User

Untitled

a guest
Mar 15th, 2016
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.33 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import base64
  3. import six
  4. from decimal import Decimal
  5.  
  6. from django.conf import settings
  7. from django.contrib.auth.models import User
  8. from django.db import models
  9. from Simoba.bancos.models import Moneda
  10. from SistemaV2.institucion.models import Campus
  11.  
  12.  
  13. #========================================= MANAGERS
  14. class CuentaPaypalManager(models.Manager):
  15. def obtener_cuenta_paypal(self, **kwargs):
  16. return self.model.objects.select_related('cat_tipoentorno', 'cat_apipaypal').get(
  17. cat_tipoentorno=settings.ENTORNO_PAYPAL_ID,
  18. habilitado=True,
  19. **kwargs
  20. )
  21.  
  22. class CuentaPayPalHabilitadosManager(models.Manager): # habilitados
  23. def get_query_set(self):
  24. return super(CuentaPayPalHabilitadosManager, self).get_query_set().filter(habilitado=True)
  25.  
  26. class CuentaPayPalEntornoManager(CuentaPayPalHabilitadosManager): # de_entorno
  27. def get_query_set(self):
  28. return super(CuentaPayPalEntornoManager, self).get_query_set().filter(cat_tipoentorno=settings.ENTORNO_PAYPAL_ID)
  29.  
  30. class CatTipoSuscripcionPayPalHabilitadosManager(models.Manager): # habilitados
  31. def get_query_set(self):
  32. return super(CatTipoSuscripcionPayPalHabilitadosManager, self).get_query_set().filter(habilitado=True)
  33.  
  34. class SubscriptionPayPalHabilitadosManager(models.Manager): # habilitados
  35. def get_query_set(self):
  36. return super(SubscriptionPayPalHabilitadosManager, self).get_query_set().filter(habilitado=True)
  37.  
  38.  
  39. class CatTipoEntorno(models.Model):
  40. nombre = models.CharField(max_length=100)
  41.  
  42. class CatOperacionesAPIPaypal(models.Model):
  43. metodo = models.CharField(max_length=80, unique=True)
  44.  
  45. class CatAPIPaypal(models.Model):
  46. url = models.URLField()
  47. url_paypal = models.URLField()
  48. #url_redirect = models.URLField()
  49. version = models.FloatField()
  50. cat_tipoentorno = models.ForeignKey(CatTipoEntorno)
  51. operaciones = models.ManyToManyField(CatOperacionesAPIPaypal, through='OpcionesAPIPaypalOperaciones')
  52.  
  53. class OpcionesAPIPaypalOperaciones(models.Model):
  54. catapipaypal = models.ForeignKey(CatAPIPaypal)
  55. catoperacionesapipaypal = models.ForeignKey(CatOperacionesAPIPaypal)
  56. request_field = models.CharField(max_length=80)
  57. value = models.CharField(max_length=2048)
  58. habilitado = models.BooleanField(default=False)
  59.  
  60. class Meta:
  61. unique_together = ('catapipaypal', 'catoperacionesapipaypal', 'request_field')
  62.  
  63. class CuentaPaypal(models.Model):
  64. nombre = models.CharField(max_length=100)
  65. apiusername = models.EmailField()
  66. _apipassword = models.TextField(db_column='apipassword')
  67. _apisignature = models.TextField(db_column='apisignature')
  68. cat_apipaypal = models.ForeignKey(CatAPIPaypal)
  69.  
  70. habilitado = models.BooleanField(default=False)
  71. cat_tipoentorno = models.ForeignKey(CatTipoEntorno)
  72. receiver_email = models.EmailField(unique=True)
  73. merchant_id = models.CharField(max_length=18, unique=True)
  74. objects = CuentaPaypalManager()
  75. habilitados = CuentaPayPalHabilitadosManager()
  76. de_entorno = CuentaPayPalEntornoManager()
  77. cuenta_banco = models.ForeignKey('bancos.CuentaBanco')
  78.  
  79. # class Meta:
  80. # unique_together = ('cat_apipaypal', 'cuenta_banco')
  81.  
  82. def get_apipassword(self):
  83. return base64.decodestring(self._apipassword)
  84. def set_apipassword(self, apipassword):
  85. self._apipassword = base64.encodestring(apipassword)
  86. apipassword = property(get_apipassword, set_apipassword)
  87.  
  88. def get_apisignature(self):
  89. return base64.decodestring(self._apisignature)
  90. def set_apisignature(self, apisignature):
  91. self._apisignature = base64.encodestring(apisignature)
  92. apisignature = property(get_apisignature, set_apisignature)
  93.  
  94. class EstadosPayPal(models.Model):
  95. estado = models.CharField(max_length=40)
  96.  
  97. class TransaccionPayPal(models.Model):
  98. TRANS_PENDIENTE = 1
  99. TRANS_PROCESADA = 2
  100. TRANS_FALLIDA = 6
  101. # PayPal IPN
  102. TRANS_IPN_RECIBIDO = 3
  103. TRANS_IPN_VERIFICADA = 4
  104. TRANS_IPN_INVALIDO = 5
  105. # Tipos de transaccion PayPal
  106. TRANS_SUBSCR_PAYMENT = 'subscr_payment'
  107. TRANS_SUBSCR_PAYMENT2 = 'subscrpayment'
  108. TRANS_REFERENCE_TRANSACTION = 'merchtpmt'
  109. TRANS_REFERENCE_TRANSACTION2 = 'merch_pmt'
  110. TRANS_SUBSCR_SIGNUP = 'subscr_signup'
  111. TRANS_NO_EXPRESS_CHECKOUT = ('send_money', TRANS_SUBSCR_PAYMENT, TRANS_SUBSCR_PAYMENT2, TRANS_REFERENCE_TRANSACTION)
  112.  
  113. transactionid = models.CharField(max_length=19, primary_key=True)
  114. matricula = models.CharField(max_length=50)
  115. amt = models.DecimalField(max_digits=14, decimal_places=2)
  116. fee = models.DecimalField(max_digits=14, decimal_places=2)
  117. tax = models.DecimalField(max_digits=14, decimal_places=2)
  118. amount_received_nett = models.DecimalField(max_digits=14, decimal_places=2)
  119. cat_estado = models.ForeignKey(EstadosPayPal)
  120. cuentapaypal = models.ForeignKey(CuentaPaypal)
  121. fecha = models.DateTimeField(auto_now_add=True)
  122. producto = models.CharField(max_length=100, null=True)
  123. campus = models.CharField(max_length=100, null=True)
  124. nivel = models.CharField(max_length=100, null=True)
  125. licenciatura = models.CharField(max_length=100, null=True)
  126. matricula = models.CharField(max_length=100, null=True)
  127. referencia_pago = models.CharField(max_length=100, null=True)
  128. producto_servicio = models.CharField(max_length=100, null=True)
  129. fee = models.DecimalField(max_digits=10, decimal_places=2)
  130. procesado = models.BooleanField(default=False)
  131. extra_info = models.TextField(null=True)
  132. periodo = models.CharField(max_length=100, null=True)
  133.  
  134. def es_procesada(self):
  135. return self.cat_estado_id == self.TRANS_PROCESADA
  136.  
  137. def save(self, *args, **kwargs):
  138. from decimal import Decimal
  139. self.amount_received_nett = Decimal(self.amt) - Decimal(self.fee) - Decimal(self.tax)
  140. super(TransaccionPayPal, self).save(*args, **kwargs)
  141.  
  142. def __str__(self):
  143. return self.transactionid
  144.  
  145. class CatTipoSuscripcionPayPal(models.Model):
  146. nombre = models.CharField(max_length=80)
  147. clave = models.CharField(max_length=30, unique=True)
  148. habilitado = models.BooleanField(default=True)
  149. objects = models.Manager()
  150. habilitados = CatTipoSuscripcionPayPalHabilitadosManager()
  151.  
  152. class SubscriptionPayPal(models.Model):
  153. subscriptionid = models.CharField(max_length=19, primary_key=True)
  154. matricula = models.CharField(max_length=125)
  155. fecha_suscripcion = models.DateTimeField()
  156. cuentapaypal = models.ForeignKey(CuentaPaypal)
  157. campus = models.CharField(max_length=100, null=True)
  158. nivel = models.CharField(max_length=100, null=True)
  159. licenciatura = models.CharField(max_length=100, null=True)
  160. tipo_suscripcion = models.ForeignKey(CatTipoSuscripcionPayPal)
  161. num_pagos = models.IntegerField(default=0)
  162. fecha_pp = models.DateField(null=True) # fecha primer pago
  163. habilitado = models.BooleanField(default=True)
  164. dia_cobro = models.IntegerField(null=True)
  165. monto = models.DecimalField(max_digits=14, decimal_places=2, default=0)
  166. moneda = models.ForeignKey(Moneda)
  167. objects = models.Manager()
  168. habilitados = SubscriptionPayPalHabilitadosManager()
  169. referencia = models.CharField(max_length=100, null=True)
  170.  
  171. fecha_creacion = property(lambda self: self.fecha_suscripcion)
  172.  
  173. # class Meta:
  174. # unique_together = ('subscriptionid', 'usuario', 'licenciatura')
  175.  
  176. class SubscriptionTransaccionPayPal(models.Model):
  177. transactionid = models.ForeignKey(TransaccionPayPal)
  178. subscriptionid = models.ForeignKey(SubscriptionPayPal)
  179. creado = models.DateTimeField(auto_now_add=True)
  180.  
  181. class Meta:
  182. unique_together = ('transactionid', 'subscriptionid')
  183.  
  184.  
  185. # class ModalidadCuentaPaypal(models.Model):
  186. # cuentapaypal = models.ForeignKey(CuentaPaypal)
  187. # programa = models.CharField(max_length=100)
  188. # moneda = models.ForeignKey('General.Moneda')
  189. # campus = models.CharField(max_length=100)
  190. # nivel = models.CharField(max_length=100)
  191. # #test = models.BooleanField(default=True)
  192.  
  193.  
  194.  
  195. class DescuentosDomiciliacion(models.Model):
  196. codigo_banner_descuento = models.CharField(max_length=5)
  197. codigo_banner_aplicativo = models.CharField(max_length=5)
  198. campus = models.ForeignKey(Campus)
  199. habilitado = models.BooleanField(default=True)
  200. clacon_banco = models.ForeignKey('bancos.ClaconBanco')
  201.  
  202.  
  203.  
  204.  
  205. class DatosEnviadosPayPal(models.Model):
  206. fecha_envio = models.DateTimeField(auto_now_add=True)
  207. status = models.CharField(null=True, max_length=50)
  208. ba = models.CharField(max_length=100)
  209. error = models.TextField(null=True)
  210.  
  211.  
  212.  
  213. class Dom(object):
  214. token = None
  215. creado = None
  216. habilitado = None
  217. institucion = None
  218. dia_pago = 0
  219. se_puede_eliminar = False
  220.  
  221.  
  222. def obtener_domiciliaciones_alumno(usuario):
  223. from Simoba.payu.models import TokenPayu
  224. domiciliaciones =[]
  225. dom_payu = TokenPayu.objects.filter(alumno=usuario)
  226. dom_paypal = SubscriptionPayPal.objects.filter(matricula=usuario.username)
  227.  
  228. for d in dom_payu:
  229. dom = Dom()
  230. dom.token = d.token
  231. dom.creado = d.created
  232. dom.habilitado = d.habilitado
  233. dom.institucion = "Payu"
  234. dom.se_puede_eliminar = d.habilitado
  235. dom.dia_pago = d.payment_day
  236. domiciliaciones.append(dom)
  237.  
  238. for d in dom_paypal:
  239. dom = Dom()
  240. dom.token = d.pk
  241. dom.creado = d.fecha_suscripcion
  242. dom.habilitado = d.habilitado
  243. dom.institucion = "PayPal"
  244. dom.se_puede_eliminar = d.habilitado
  245. dom.dia_pago = d.dia_cobro
  246. domiciliaciones.append(dom)
  247.  
  248. return domiciliaciones
  249.  
  250. def alumno_es_domiciliado(usuario):
  251. doms = usuario.obtener_domiciliaciones_alumno()
  252. for d in doms:
  253. if d.habilitado:
  254. return True
  255. return False
  256.  
  257. def obtener_rango_domiciliacion_alumno_dias(usuario):
  258. from Simoba.bancos.models import ConfiguracionDomiciliacion
  259. insc = usuario.datosusuario.inscripciondelestudiante_set.filter().order_by('periodo').last()
  260. a_o_b_15_o_30 = insc.plan_descuentos.rate[-2]
  261. conf = ConfiguracionDomiciliacion.objects.first()
  262. dia = conf.corte_uno if a_o_b_15_o_30 == "A" else conf.corte_dos #Regla establecida por Omar Aguilar
  263. return dia
  264.  
  265. def metodos_puede_domiciliar(usuario):
  266. inscripcion_estudiante = usuario.obtener_inscripciones_alumno()
  267. puede_pagar_en_linea = inscripcion_estudiante.puede_pagar_en_linea()
  268. return puede_pagar_en_linea
  269.  
  270. def alumno_puede_domiciliar(usuario):
  271. if usuario.alumno_es_domiciliado():
  272. return False
  273. return not Decimal(usuario.datosusuario.get_overdue_balance())
  274.  
  275. User.add_to_class('obtener_domiciliaciones_alumno', obtener_domiciliaciones_alumno)
  276. User.add_to_class('alumno_es_domiciliado', alumno_es_domiciliado)
  277. User.add_to_class('obtener_rango_domiciliacion_alumno_dias', obtener_rango_domiciliacion_alumno_dias)
  278. User.add_to_class('metodos_puede_domiciliar', metodos_puede_domiciliar)
  279. User.add_to_class('alumno_puede_domiciliar', alumno_puede_domiciliar)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement