# -*- coding: utf-8 -*- from openerp import http from openerp.http import request from werkzeug.wrappers import Response from datetime import datetime import simplejson as json import logging LOGGER = logging.getLogger(__name__) class Purchases(http.Controller): ''' Get server date to send ''' def get_server_date(self): return datetime.now().strftime('%Y-%m-%d') ''' Get current user information ''' def get_user(self): user = request.env.user return { 'id': user.id, 'name': user.name, 'displayName': user.display_name, 'currency': { 'id': user.company_id.currency_id.id, 'name': user.company_id.currency_id.name, 'displayName': user.company_id.currency_id.display_name, 'symbol': user.company_id.currency_id.symbol } } def get_currencies(self): return [{ 'id': currency.id, 'name': currency.name, 'displayName': currency.display_name, 'base': currency.base, 'accuracy': currency.accuracy, 'position': currency.position, 'rate': currency.rate, 'rounding': currency.rounding, 'symbol': currency.symbol } for currency in request.env['res.currency'].search([('active', '=', True)])] ''' Get all active journals ''' def get_journals(self): return [{ 'id': journal.id, 'name': journal.name, 'displayName': journal.display_name, 'code': journal.code, 'cashControl': journal.cash_control, 'type': journal.type, 'currency': { 'id': journal.currency.id, 'name': journal.currency.name, 'displayName': journal.currency.display_name }, 'defaultCreditAccount': { 'id': journal.default_credit_account_id.id, 'name': journal.default_credit_account_id.name, 'displayName': journal.default_credit_account_id.display_name, 'code': journal.default_credit_account_id.code, 'exchangeRate': journal.default_credit_account_id.exchange_rate, 'foreignBalance': journal.default_credit_account_id.foreign_balance, 'reconcile': journal.default_credit_account_id.reconcile, 'debit': journal.default_credit_account_id.debit, 'credit': journal.default_credit_account_id.credit, 'currencyMode': journal.default_credit_account_id.currency_mode, 'companyCurrency': { 'id': journal.default_credit_account_id.company_currency_id.id, 'name': journal.default_credit_account_id.company_currency_id.name, 'displayName': journal.default_credit_account_id.company_currency_id.display_name, }, 'currency': { 'id': journal.default_credit_account_id.currency_id.id, 'name': journal.default_credit_account_id.currency_id.name, 'displayName': journal.default_credit_account_id.currency_id.display_name }, }, 'defaultDebitAccount': { 'id': journal.default_debit_account_id.id, 'name': journal.default_debit_account_id.name, 'displayName': journal.default_debit_account_id.display_name, 'code': journal.default_debit_account_id.code, 'exchange_rate': journal.default_credit_account_id.exchange_rate, 'foreignBalance': journal.default_credit_account_id.foreign_balance, 'reconcile': journal.default_credit_account_id.reconcile, 'debit': journal.default_credit_account_id.debit, 'credit': journal.default_credit_account_id.credit, 'currencyMode': journal.default_credit_account_id.currency_mode, 'companyCurrency': { 'id': journal.default_credit_account_id.company_currency_id.id, 'name': journal.default_credit_account_id.company_currency_id.name, 'displayName': journal.default_credit_account_id.company_currency_id.display_name, }, 'currency': { 'id': journal.default_credit_account_id.currency_id.id, 'name': journal.default_credit_account_id.currency_id.name, 'displayName': journal.default_credit_account_id.currency_id.display_name } } } for journal in request.env['account.journal'].search([('type', 'in', ['bank', 'cash']), ('default_debit_account_id.currency_id', '=', False), ('active', '=', True)], order='id')] ''' Get all active suppliers ''' def get_suppliers(self): return [{ 'id': supplier.id, 'name': supplier.name, 'displayName': supplier.display_name, 'imageMedium': supplier.image_medium, 'phone': supplier.phone, 'mobile': supplier.mobile, 'email': supplier.email } for supplier in request.env['res.partner'].search([('supplier', '=', True), ('active', '=', True)])] ''' Get all purchasable and active products ''' def get_products(self): return [{ 'id': product.id, 'name': product.name, 'displayName': product.display_name, 'ean13': product.ean13, 'imageMedium': product.image_medium, 'listPrice': product.list_price, 'variantCount': product.product_variant_count, 'variants': [{ 'id': variant.id, 'name': variant.name, 'displayName': variant.display_name, 'ean13': variant.ean13, 'imageMedium': variant.image_medium, 'listPrice': variant.list_price } for variant in product.product_variant_ids if variant.active] } for product in request.env['product.template'].search([('purchase_ok', '=', True), ('active', '=', True)])] ''' Get all incoming and active picking types ''' def get_picking_types(self): return [{ 'id': picking_type.id, 'name': picking_type.name, 'displayName': picking_type.display_name } for picking_type in request.env['stock.picking.type'].search([('code', '=', 'incoming'), ('active', '=', True)])] ''' Get all active payment terms ''' def get_payment_terms(self): return [{ 'id': payment_term.id, 'name': payment_term.name, 'displayName': payment_term.display_name, 'lines': [{ 'id': line.id, 'days': line.days, 'days2': line.days2, 'value': line.value, 'value_amount': line.value_amount } for line in payment_term.line_ids] } for payment_term in request.env['account.payment.term'].search([('active', '=', True)])] ''' Make JSON response to send ''' def make_response(self, data, status=200): return Response(json.dumps(data), status=status, content_type='application/json') ''' ''' def make_info_log(self, log): LOGGER.info(log) ''' New purchase resource route ''' @http.route('/eiru_purchases/new', auth='user', methods=['GET'], cors='*') def new_purchase(self, **kw): self.make_info_log('sending json response') return self.make_response({ 'date': self.get_server_date(), 'user': self.get_user(), 'currencies': self.get_currencies(), 'journals': self.get_journals(), 'suppliers': self.get_suppliers(), 'products': self.get_products(), 'pickingTypes': self.get_picking_types(), 'paymentTerms': self.get_payment_terms() }) ''' Create purchase resource route ''' @http.route('/eiru_purchases/create', auth='user', methods=['POST'], cors='*') def create_purchase(self, **kw): pass