def invoices(id=None): if request.method == 'GET': if id is not None: invoice = Invoice.query.get( id) # None por defecto si no consigue el registro if invoice: return jsonify(invoice.serialize()), 200 return jsonify({"msg": "Invoice not found"}), 404 else: invoice = Invoice.query.all() invoice = list(map(lambda invoice: invoice.serialize(), invoice)) return jsonify(invoice), 200 if request.method == 'POST': urlPDF = request.json.get("urlPDF", None) date = request.json.get("data", None) amount = request.json.get("amount", None) rut = request.json.get("rut", None) if not urlPDF: return jsonify({"msg": "URL is required"}), 400 if not date: return jsonify({"msg": "Date is required"}), 400 if not amount: return jsonify({"msg": "Amount is required"}), 400 if not rut: return jsonify({"msg": "RUT is required"}), 400 invoice = Invoice.query.filter_by(id=id).first() if invoice: return jsonify({"msg": "Invoice already exists"}), 400 invoice = Invoice() invoice.urlPDF = urlPDF invoice.date = date invoice.amount = amount invoice.rut = rut invoice.save() return jsonify({"success": "Invoice Register Successfully"}), 200
def post(self, **kwargs): self.request.charset = 'utf-8' plan = get_or_404(self.request.POST['plan']) form_validated = self.form.validate() if not form_validated: kwargs['form'] = self.form if self.form.errors: kwargs['flash'] = self.build_error( 'Verifique los datos ingresados:<br/> ' + '<br/> '.join( reduce(lambda x, y: '' + str(x) + ' ' + str(y), t) for t in self.form.errors.values())) kwargs['plan'] = plan return self.render_response('backend/signup.html', **kwargs) # Generamos la inmo en estado TRIAL y le ponemos el Plan realEstate = RealEstate.new() #realEstate.telephone_number = self.form.telephone_number.data realEstate.name = self.form.email.data.split('@')[0] realEstate.email = self.form.email.data realEstate.plan = plan realEstate.status = RealEstate._ENABLED if plan.is_free else RealEstate._REGISTERED realEstate.email_image = None realEstate.email_image_url = '' realEstate.put() # Generamos la primer factura con fecha hoy+dias_gratis # Utilizamos el indicador I para indicar 'id' en vez de 'name' first_date = (datetime.utcnow() + timedelta(days=plan.free_days)).date() if first_date.day > 28: first_date = date(first_date.year, first_date.month, 28) invoice = Invoice() invoice.realestate = realEstate invoice.trx_id = '%sI%d' % (first_date.strftime('%Y%m'), realEstate.key().id()) invoice.amount = plan.amount invoice.state = Invoice._NOT_PAID if not plan.is_free else Invoice._INBANK invoice.date = first_date invoice.put() # Volvemos a guardar el realEstate con los datos nuevos realEstate.last_invoice = invoice.date realEstate.save() # Generamos el usuario y le asignamos la realestate user = User.new() user.email = self.form.email.data user.password = self.form.password.data user.rol = 'owner' user.realestate = realEstate user.put() # Mando Correo de bienvenida y validación de eMail. # Armo el contexto dado que lo utilizo para mail plano y mail HTML. context = { 'server_url': 'http://' + self.request.headers.get('host', 'no host'), 'realestate_name': realEstate.name, 'validate_user_link': self.url_for('backend/validate/user', key=str(user.key()), _full=True), 'support_url': 'http://' + self.request.headers.get('host', 'no host') } # Armo el body en plain text. body = self.render_template( 'email/' + self.config['directodueno']['mail']['signup']['template'] + '.txt', **context) # Armo el body en HTML. html = self.render_template( 'email/' + self.config['directodueno']['mail']['signup']['template'] + '.html', **context) # Envío el correo. mail.send_mail(sender="www.directodueno.com <%s>" % self.config['directodueno']['mail']['signup']['sender'], to=user.email, subject=u'Bienvenido a DirectoDueño!', body=body, html=html) self.set_ok( u'Un correo ha sido enviado a su casilla de email. Ingrese a DirectoDueño a través del enlace recibido.' ) return self.redirect_to('backend/auth/login')
def map(self, re): plan = re.plan if re.status == RealEstate._TRIAL: #logging.error('-----------------entro en trial') # Uso el 80% del free_days del Plan? delta = datetime.utcnow() - re.created_at if delta.days >= int(re.plan.free_days * 0.80): re.status = RealEstate._TRIAL_END send_mail('trial_will_expire', re) return ([re], []) # update/delete elif re.status == RealEstate._TRIAL_END: #logging.error('---------------entro en trial end') # Llegamos a los free_days del Plan y todavia no pago? delta = datetime.utcnow() - re.created_at if delta.days >= re.plan.free_days: re.status = RealEstate._NO_PAYMENT send_mail('trial_ended', re) return ([re], []) # update/delete elif re.status == RealEstate._ENABLED and not re.plan.is_free: #logging.error('-----------------------entro en ENABLED') # Today today = datetime.utcnow().date() next_month = re.last_invoice.month + 1 next_year = re.last_invoice.year if next_month == 13: next_month = 1 next_year = next_year + 1 next_date = date(next_year, next_month, re.last_invoice.day) #logging.error('--------------next date ' + str(next_date) ) #logging.error('--------------today ' + str(today) ) invoice = None if today > next_date: invoice = Invoice() invoice.realestate = re invoice.trx_id = create_transaction_number(next_date, re) invoice.amount = re.plan.amount invoice.state = Invoice._NOT_PAID invoice.date = next_date invoice.put() re.last_invoice = next_date # Contamos las facturas impagas, si son mas que dos, ponemos en disabled # Si son menos que dos y le acabo de facturar, le envio la factura not_paid_invoices = len(Invoice().all(keys_only=True).filter( 'realestate', re.key()).filter('state', Invoice._NOT_PAID).fetch(10)) #logging.error('----------- Lleva %d sin pagar' % not_paid_invoices) if not_paid_invoices > 2: re.status = RealEstate._NO_PAYMENT send_mail('no_payment', re) # TODO: mandar a deshablitiar? return ([re], []) elif invoice: send_mail('new_invoice', re, invoice) return ([re], []) return ([], []) # update/delete
def post(self, **kwargs): self.request.charset = 'utf-8' kwargs['planes'] = Plan.all().filter('online = ', 1).filter( 'enabled = ', 1).order('amount').fetch(3) kwargs['selected_plan'] = None plan = get_or_404(self.request.POST.get('plan')) # if not plan: # kwargs['form'] = self.form # kwargs['flash'] = self.build_error('Seleccione un plan vigente.') # return self.render_response('backend/signup.html', **kwargs) form_validated = self.form.validate() if not form_validated: kwargs['form'] = self.form if self.form.errors: kwargs['flash'] = self.build_error( 'Verifique los datos ingresados.') kwargs['default_plan'] = str(plan.key()) return self.render_response('backend/signup.html', **kwargs) # Generamos la inmo en estado TRIAL y le ponemos el Plan realEstate = RealEstate.new() realEstate.telephone_number = self.form.telephone_number.data realEstate.name = self.form.name.data realEstate.email = self.form.email.data realEstate.plan = plan # realEstate.status = RealEstate._REGISTERED realEstate.status = RealEstate._ENABLED if plan.is_free else RealEstate._REGISTERED realEstate.email_image = None realEstate.email_image_url = '' # Ya tenemos registrado ese domain_id realEstate.domain_id = do_slugify(realEstate.name) tmp = validate_domain_id(realEstate.domain_id) if tmp['result'] != 'free': realEstate.domain_id = realEstate.domain_id + datetime.now( ).strftime('%Y%m%d%H%M') realEstate.put() # Generamos la primer factura con fecha hoy+dias_gratis # Utilizamos el indicador I para indicar 'id' en vez de 'name' first_date = (datetime.utcnow() + timedelta(days=plan.free_days)).date() if first_date.day > 28: first_date = date(first_date.year, first_date.month, 28) invoice = Invoice() invoice.realestate = realEstate invoice.trx_id = '%sI%d' % (first_date.strftime('%Y%m'), realEstate.key().id()) invoice.amount = plan.amount #invoice.state = Invoice._NOT_PAID if plan.amount > 0 else Invoice._INBANK invoice.state = Invoice._NOT_PAID if not plan.is_free else Invoice._INBANK invoice.date = first_date invoice.put() # Volvemos a guardar el realEstate con los datos nuevos realEstate.last_invoice = invoice.date realEstate.save() # Generamos el usuario y le asignamos la realestate user = User.new() user.email = self.form.email.data user.password = self.form.password.data user.rol = 'owner' user.realestate = realEstate user.put() # Mando Correo de bienvenida y validación de eMail. # Armo el contexto dado que lo utilizo para mail plano y mail HTML. context = { 'server_url': 'http://' + self.request.headers.get('host', 'no host'), 'realestate_name': realEstate.name, 'validate_user_link': self.url_for('backend/validate/user', key=str(user.key()), _full=True), 'support_url': 'http://' + self.request.headers.get('host', 'no host') } # Armo el body en plain text. body = self.render_template( 'email/' + self.config['ultraprop']['mail']['signup']['template'] + '.txt', **context) # Armo el body en HTML. html = self.render_template( 'email/' + self.config['ultraprop']['mail']['signup']['template'] + '.html', **context) # Envío el correo. mail.send_mail(sender="www.ultraprop.com.ar <%s>" % self.config['ultraprop']['mail']['signup']['sender'], to=user.email, subject="ULTRAPROP - Bienvenido", body=body, html=html) self.set_ok( u'Un correo ha sido enviado a su casilla de email. Ingrese a ULTRAPROP a través del enlace recibido.' ) return self.redirect_to('backend/auth/login')
def get(self, **kwargs): self.request.charset = 'utf-8' re = db.get(kwargs['key']) plan = re.plan if re.status == RealEstate._TRIAL: #logging.error('-----------------entro en trial') # Uso el 80% del free_days del Plan? delta = datetime.utcnow() - re.created_at if delta.days >= int(re.plan.free_days * 0.80): #re.status = RealEstate._TRIAL_END #send_mail('trial_will_expire', re) self.response.write('1') return elif re.status == RealEstate._TRIAL_END: #logging.error('---------------entro en trial end') # Llegamos a los free_days del Plan y todavia no pago? delta = datetime.utcnow() - re.created_at if delta.days >= re.plan.free_days: # re.status = RealEstate._NO_PAYMENT # send_mail('trial_ended', re) self.response.write('2') return elif re.status == RealEstate._ENABLED and not re.plan.is_free: # Today today = datetime.utcnow().date() next_month = re.last_invoice.month + 1 next_year = re.last_invoice.year if next_month == 13: next_month = 1 next_year = next_year + 1 next_date = date(next_year, next_month, re.last_invoice.day) self.response.write( ' || next_month: [%s] | next_year: [%s] | next_date: [%s] || ' % (str(next_month), str(next_year), str(next_date))) invoice = None if today > next_date: invoice = Invoice() invoice.realestate = re invoice.trx_id = create_transaction_number(next_date, re) invoice.amount = re.plan.amount invoice.state = Invoice._NOT_PAID invoice.date = next_date # invoice.put() # re.last_invoice = next_date self.response.write('4') #return # Contamos las facturas impagas, si son mas que dos, ponemos en disabled # Si son menos que dos y le acabo de facturar, le envio la factura not_paid_invoices = len(Invoice().all(keys_only=True).filter( 'realestate', re.key()).filter('state', Invoice._NOT_PAID).fetch(10)) #logging.error('----------- Lleva %d sin pagar' % not_paid_invoices) if not_paid_invoices > 2: # re.status = RealEstate._NO_PAYMENT # send_mail('no_payment', re) # # TODO: mandar a deshablitiar? # return ([re], []) self.response.write('5') return elif invoice: # send_mail('new_invoice', re, invoice) # return ([re], []) self.response.write('6') return self.response.write('nada') return