Exemple #1
0
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
Exemple #2
0
    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/>&nbsp;&nbsp;' +
                    '<br/>&nbsp;&nbsp;'.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')
Exemple #3
0
    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
Exemple #4
0
    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')
Exemple #5
0
    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