Beispiel #1
0
    def get_period_ids(cls, name):
        pool = Pool()
        Period = pool.get('account.period')
        context = Transaction().context

        period = None
        if name.startswith('start_'):
            period_ids = [0]
            if context.get('start_period'):
                period = Period(context['start_period'])
        elif name.startswith('end_'):
            period_ids = []
            if context.get('end_period'):
                period = Period(context['end_period'])

        if period:
            periods = Period.search([
                    ('fiscalyear', '=', context.get('fiscalyear')),
                    ('end_date', '<=', period.start_date),
                    ])
            if period.start_date == period.end_date:
                periods.append(period)
            if periods:
                period_ids = [p.id for p in periods]
            if name.startswith('end_'):
                # Always include ending period
                period_ids.append(period.id)
        return period_ids
 def default_date_account(self ):
     context = Transaction().context
     if context.get('date_account'):
         return context.get('date_account')
     elif context.get('current_date'):
         return context.get('current_date')
     return datetime.datetime.now()
Beispiel #3
0
    def search(cls, domain, offset=0, limit=None, order=None, count=False,
            query=False):
        #pool = Pool() 
        #Subscription = pool.get('sale.subscription')
        transaction = Transaction().context 
        horario = transaction.get('horario')
        estudiante = transaction.get('estudiante')
        suscriptor = transaction.get('suscriptor')
        course = transaction.get('course')
        
        domain = domain[:]
        #if horario is not None: 
        #    domain = [domain, ('horario','=',horario)]
        if estudiante is not None: 
            domain = [domain, ('estudiante','=',estudiante)]
        if suscriptor is not None: 
            domain = [domain, ('party','=',suscriptor)]
        if course is not None: 
            domain = [domain, ('lines.service','=',course)]

        records = super(Subscription, cls).search(domain, offset=offset, limit=limit,
             order=order, count=count, query=query)

        if Transaction().user:
            # Clear the cache as it was not cleaned for confidential
            cache = Transaction().get_cache()
            cache.pop(cls.__name__, None)
        return records
Beispiel #4
0
 def view_header_get(self, value, view_type='form'):
     context = Transaction().context
     if not context.get('locations'):
         return value
     location_obj = self.pool.get('stock.location')
     locations = location_obj.browse(context.get('locations'))
     return value + " (" + ",".join(l.name for l in locations) + ")"
Beispiel #5
0
    def get_cash(self):
        pool = Pool()
        Date = pool.get('ir.date')
        AccountType = pool.get('account.account.type')

        today = Date.today()
        company = Transaction().context.get('company')
        balance = Decimal('0.0') 
        transaction = Transaction()
        context = Transaction().context
        total_cash = Decimal('0.0')

        if self.is_consolidated: 
            companies = context.get('companies',[])
            for company in context.get('companies', []):
                with transaction.set_context(company=company['id']):
                    cash = Decimal('0.0')
                    accounts = AccountType.search([('company','=',company['id']),
                        ('name','=','10. Efectivo y Equivalencias de Efectivo')
                        ])
                    if len(accounts)==1: 
                        cash = accounts[0].amount * Decimal('1.0')
                total_cash += cash
            return total_cash
        else: 
            accounts = AccountType.search([('company','=',company),
                ('name','=','10. Efectivo y Equivalencias de Efectivo')])
            if len(accounts)==1: 
                balance = accounts[0].amount * Decimal('1.0')
        return balance
    def parse(self, report, objects, datas, localcontext={}):
        tmp_objects = []
        tmp_account = []

        context = Transaction().context
        user = self.pool.get("res.user").browse(Transaction().user)
        localcontext["company"] = self.pool.get("company.company").browse(context.get("company", False))
        localcontext["period"] = self.pool.get("ekd.period").browse(context.get("current_period", False))
        localcontext["start_date"] = context.get("start_period", False)
        localcontext["end_date"] = context.get("end_period", False)
        localcontext["current_date"] = context.get("current_date", False)
        for obj in objects:
            if obj["account"] not in tmp_account:
                tmp_account.append(obj["account"])
        if len(tmp_account) == 1:
            res = super(CardPartner, self).parse(
                report,
                [{"account_code": "10", "account_name": "name account", "sub_account": "1", "lines": objects}],
                datas,
                localcontext,
            )
        else:
            res = super(CardPartner, self).parse(
                report,
                [{"account_code": "10", "account_name": "name account", "sub_account": "1", "lines": objects}],
                datas,
                localcontext,
            )

        return res
Beispiel #7
0
    def get_sale_price(cls, products, quantity=0):
        pool = Pool()
        PriceList = pool.get('product.price_list')
        Party = pool.get('party.party')
        Uom = pool.get('product.uom')
        Tax = pool.get('account.tax')
        context = Transaction().context

        prices = super(Product, cls).get_sale_price(products,
            quantity=quantity)
        if context.get('price_list') and context.get('customer'):
            price_list = PriceList(Transaction().context['price_list'])
            customer = Party(Transaction().context['customer'])
            context_uom = None
            if context.get('uom'):
                context_uom = Uom(Transaction().context['uom'])
            taxes = None
            if context.get('taxes'):
                taxes = Tax.browse(context.get('taxes'))
            for product in products:
                uom = context_uom or product.default_uom
                price = price_list.compute(
                     customer, product, prices[product.id], quantity, uom)
                if price_list.tax_included and taxes:
                    price = Tax.reverse_compute(price, taxes)
                prices[product.id] = price
        return prices
 def default_date_account(self):
     context = Transaction().context
     if context.get("date_account"):
         return context.get("date_account")
     elif context.get("current_date"):
         return context.get("current_date")
     return datetime.datetime.now()
Beispiel #9
0
    def get_expenses(self):
        pool = Pool()
        Date = pool.get('ir.date')
        AccountType = pool.get('account.account.type')    
        today = Date.today()
        transaction = Transaction()
        context = Transaction().context
        total_expense = expense = Decimal('0.0')

        if self.is_consolidated: 
            companies = context.get('companies',[])
            for company in context.get('companies', []):
                with transaction.set_context(company=company['id']):
                    expense = Decimal('0.0')
                    expenses = AccountType.search([('company','=',company['id']),
                        ('name','=','GASTOS FINANCIEROS')
                        ])
                    if len(expenses)==1: 
                        expense = expenses[0].amount * Decimal('1.0')
                total_expense += expense
            return total_expense
        else:
            company = Transaction().context.get('company')
            expense = Decimal('0.0') 
            expenses = AccountType.search([('company','=',company),
                ('name','=','GASTOS FINANCIEROS')])
            
            if len(expenses)==1: 
                expense = expenses[0].amount * Decimal('1.0')
            
        return expense
Beispiel #10
0
 def _get_address_substitutions(self):
     context = Transaction().context
     subdivision_code = ''
     if getattr(self, 'subdivision', None):
         subdivision_code = self.subdivision.code or ''
         if '-' in subdivision_code:
             subdivision_code = subdivision_code.split('-', 1)[1]
     substitutions = {
         'party_name': '',
         'attn': '',
         'name': getattr(self, 'name', None) or '',
         'street': getattr(self, 'street', None) or '',
         'zip': getattr(self, 'zip', None) or '',
         'city': getattr(self, 'city', None) or '',
         'subdivision': (self.subdivision.name
             if getattr(self, 'subdivision', None) else ''),
         'subdivision_code': subdivision_code,
         'country': (self.country.name
             if getattr(self, 'country', None) else ''),
         'country_code': (self.country.code or ''
             if getattr(self, 'country', None) else ''),
         }
     if context.get('address_from_country') == getattr(self, 'country', ''):
         substitutions['country'] = ''
     if context.get('address_with_party', False):
         substitutions['party_name'] = self.party_full_name
     if context.get('address_attention_party', False):
         substitutions['attn'] = (
             context['address_attention_party'].full_name)
     for key, value in list(substitutions.items()):
         substitutions[key.upper()] = value.upper()
     return substitutions
Beispiel #11
0
    def search_quantity(self, name, domain=None):
        date_obj = self.pool.get('ir.date')
        context = Transaction().context
        if not (context and context.get('locations') and domain):
            return []

        if name == 'quantity' and \
                context.get('stock_date_end') and \
                context.get('stock_date_end') > \
                date_obj.today():

            context = context.copy()
            context['stock_date_end'] = date_obj.today()

        if name == 'forecast_quantity':
            context = context.copy()
            context['forecast'] = True
            if not context.get('stock_date_end'):
                context['stock_date_end'] = datetime.date.max

        pbl = self.products_by_location(
           location_ids=context['locations'], with_childs=True,
            skip_zero=False).iteritems()

        processed_lines = []
        for (location, product), quantity in pbl:
            processed_lines.append({'location': location, #XXX useful ?
                                    'product': product,
                                    name: quantity})

        res= [line['product'] for line in processed_lines \
                    if self._search_quantity_eval_domain(line, domain)]
        return [('id', 'in', res)]
Beispiel #12
0
 def default_period_start(self):
     context = Transaction().context
     if context.get('period_start'):
         return context.get('period_start')
     elif context.get('period_current'):
         return context.get('period_current')
     else:
         return False
 def parse(self, report, objects=[], datas={}, localcontext={}):
     context = Transaction().context
     user = self.pool.get('res.user').browse(Transaction().user)
     localcontext['company'] = self.pool.get('company.company').browse(context.get('company', False))
     localcontext['current_date'] = context.get('current_date', False)
     with Transaction().set_context(language='ru_RU'):
         res = super(ChartAccountReport, self).parse(report, objects, datas, localcontext)
     return res
Beispiel #14
0
    def get_recommended_capital(self):
        pool = Pool()
        Date = pool.get('ir.date')
        Fiscalyear = pool.get('account.fiscalyear')
        Budget = pool.get('account.budget')

        today = Date.today()        

        transaction = Transaction()
        context = Transaction().context
        company = context.get('company')
        balance = Decimal('0.0')

        if self.is_consolidated:
            companies = context.get('companies',[])
            for company in context.get('companies', []):
                total_amount = Decimal('0.0')
                with transaction.set_context(company=company['id']):
                    fiscalyears = Fiscalyear.search([('company','=',company['id']),
                        ('start_date','<=',today),
                        ('end_date','>=',today)])
                    fiscalyear = None 
                    if len(fiscalyears)==1: 
                        fiscalyear = fiscalyears[0].id

                    budgets = Budget.search([('fiscalyear','=',fiscalyear),
                        ('company','=',company['id']),
                        ('parent','=',None)])
                    if len(budgets)==1: 
                        budget = Budget(budgets[0].id)
                        balance += budget.children[1].amount * Decimal('0.15') 
            #balance *= -1
        else:
            fiscalyear = Transaction().context.get('fiscalyear')
            if fiscalyear is not None: 
                fiscalyears = Fiscalyear.search([('company','=',company),
                    ('id','=',fiscalyear) ])
            else:
                fiscalyears = Fiscalyear.search([('company','=',company),
                    ('start_date','<=',today),
                    ('end_date','>=',today)])
                if len(fiscalyears)==1: 
                    fiscalyear = fiscalyears[0].id

            budgets = Budget.search([('fiscalyear','=',fiscalyear),
                ('company','=',company),
                ('parent','=',None)])



            if len(budgets)==1: 
                budget = Budget(budgets[0].id)
                print("BUDGET: ", str(budget))
                balance = budget.children[0].amount * Decimal('0.15') 
                print("BALANCE: ", str(balance))
                #balance *= -1

        return balance
 def get_budget_ref(self, ids, name):
     context = Transaction().context
     if context.get('budget_ref'):
         return {}.fromkeys(ids,context.get('budget_ref'))
     res={}.fromkeys(ids, False)
     for line in self.browse(ids):
         if line.requestcash.budget_ref:
             res[line.id] = line.requestcash.budget_ref.id
     #raise Exception(str(res))
     return res
Beispiel #16
0
    def get_purchase_price(cls, products, quantity=0):
        '''
        Return purchase price for product ids.
        The context that can have as keys:
            uom: the unit of measure
            supplier: the supplier party id
            currency: the currency id for the returned price
        '''
        pool = Pool()
        Uom = pool.get('product.uom')
        User = pool.get('res.user')
        Currency = pool.get('currency.currency')
        Date = pool.get('ir.date')
        ProductSupplier = pool.get('purchase.product_supplier')
        ProductSupplierPrice = pool.get('purchase.product_supplier.price')

        today = Date.today()
        context = Transaction().context
        prices = {}

        uom = None
        if context.get('uom'):
            uom = Uom(context['uom'])

        currency = None
        if context.get('currency'):
            currency = Currency(context['currency'])

        user = User(Transaction().user)

        for product in products:
            prices[product.id] = product.cost_price
            default_uom = product.default_uom
            default_currency = (user.company.currency if user.company
                else None)
            if not uom:
                uom = default_uom
            pattern = ProductSupplier.get_pattern()
            for product_supplier in product.product_suppliers:
                if product_supplier.match(pattern):
                    pattern = ProductSupplierPrice.get_pattern()
                    for price in product_supplier.prices:
                        if price.match(quantity, uom, pattern):
                            prices[product.id] = price.unit_price
                            default_uom = product_supplier.uom
                            default_currency = product_supplier.currency
                    break
            prices[product.id] = Uom.compute_price(
                default_uom, prices[product.id], uom)
            if currency and default_currency:
                date = context.get('purchase_date') or today
                with Transaction().set_context(date=date):
                    prices[product.id] = Currency.compute(default_currency,
                        prices[product.id], currency, round=False)
        return prices
Beispiel #17
0
    def get_quantity(self, ids, names):
        date_obj = self.pool.get('ir.date')
        period_obj = self.pool.get('ekd.period')
        balance_obj = self.pool.get('ekd.balances.product')
        res = {}
        context = Transaction().context
        #if not context.get('locations'):
        #    return dict((id, 0.0) for id in ids)

        for name in names:
            if name == 'quantity':
                res.setdefault(name, {}.fromkeys(ids, 0.0))
            elif name == 'unit_price':
                res.setdefault(name, {}.fromkeys(ids, Decimal('0.0')))
            elif name == 'amount':
                res.setdefault(name, {}.fromkeys(ids, Decimal('0.0')))
        return res


        if context.get('current_period'):
            current_period = context.get('current_period')

        if context.get('current_date'):
            current_period = period_obj.search([
                        ('start_date','<=', context.get('current_date')),
                        ('end_date','>=', context.get('current_date'))
                        ], limit=1)
        else:
            current_period = period_obj.search([
                        ('start_date','<=', date_obj.today()),
                        ('end_date','>=', date_obj.today()),
                        ], limit=1)
        if not current_period:
           raise Exception('Error', 'Period not find!')
        if isinstance(current_period, list):
            current_period = current_period[0]

        balance_ids = balance_obj.search([
                        ('id', 'in', ids),
                        ('period', '=', current_period)
                        ])

        if balance_ids:
            for balance in balance_obj.browse(balance_ids):
                for name in names:
                    if name == 'quantity':
                        res[name][balance.id] = balance.qbalance_end
                    elif name == 'unit_price':
                        res[name][balance.id] = balance.unit_price
                    elif name == 'amount':
                        res[name][balance.id] = balance.balance.balance_end
#                    elif name == 'forecast_quantity':

        return res
Beispiel #18
0
 def default_template_invoice(self):
     context = Transaction().context
     if context.get('template_invoice', False):
         return context.get('template_invoice')
     else:
         template_obj = self.pool.get('ekd.document.template')
         template_ids = template_obj.search(
             [('type_account', '=', context.get('direct_document'))],
             order=[('sequence', 'ASC')])
         if len(template_ids) > 0:
             return template_ids[0]
 def default_template_invoice(self):
     context = Transaction().context
     if context.get("template_invoice", False):
         return context.get("template_invoice")
     else:
         template_obj = self.pool.get("ekd.document.template")
         template_ids = template_obj.search(
             [("type_account", "=", context.get("direct_document"))], order=[("sequence", "ASC")]
         )
         if len(template_ids) > 0:
             return template_ids[0]
 def default_template_invoice(self):
     context = Transaction().context
     if context.get('template_invoice', False):
         return  context.get('template_invoice')
     else:
         template_obj = self.pool.get('ekd.document.template')
         template_ids = template_obj.search( [
                     ('type_account','=',context.get('direct_document'))
                     ], order=[('sequence','ASC')])
         if len(template_ids) > 0:
             return template_ids[0]
Beispiel #21
0
 def transition_start(self):
     context = Transaction().context
     model = context.get('active_model')
     action_id = context.get('action_id')
     period = context.get('period')
     if model == 'account.move.line':
         # Template id is used as action
         self.template.template = action_id
         self.template.period = period
         return 'keywords'
     else:
         return 'template'
Beispiel #22
0
 def products_by_location(cls, *args, **kwargs):
     pool = Pool()
     Location = pool.get('stock.location')
     context = Transaction().context
     forecast_location_move = context.get('forecast_location_move', False)
     if forecast_location_move:
         date = context.get('stock_date_end') or datetime.date.max
         restore = Location.forecast_location_move(date)
     quantities = super(Product, cls).products_by_location(*args, **kwargs)
     if forecast_location_move:
         restore()
     return quantities
Beispiel #23
0
    def get_current_liability(self):
        pool = Pool()
        Date = pool.get('ir.date')
        AccountType = pool.get('account.account.type')
        today = Date.today()
        liability = Decimal('0.0')
        transaction = Transaction()
        context = Transaction().context
        total_liability = liability = Decimal('0.0')

        company = Transaction().context.get('company')
        to_date = Transaction().context.get('to_date')

        if self.is_consolidated:
            companies = context.get('companies', [])
            date = today if to_date is None else to_date
            for company in context.get('companies', []):
                with transaction.set_context(
                        company=company['id'],
                        posted=True,
                        cumulate=True,
                        date=date,
                        to_date=date,
                        from_date=None,
                ):
                    liability = Decimal('0.0')
                    liabilities = AccountType.search([
                        ('company', '=', company['id']),
                        ('name', '=', '3) PASIVOS CORRIENTES')
                    ])
                    if len(liabilities) == 1:
                        liability = liabilities[0].amount * Decimal('1.0')
                total_liability += liability
            return total_liability
        else:
            current_liability = Decimal('0.0')
            date = today if to_date is None else to_date
            with transaction.set_context(
                    posted=True,
                    cumulate=True,
                    date=date,
                    to_date=date,
                    from_date=None,
            ):
                current_liabilities = AccountType.search([
                    ('company', '=', company),
                    ('name', '=', '3) PASIVOS CORRIENTES')
                ])
                if len(current_liabilities) == 1:
                    current_liability = current_liabilities[
                        0].amount * Decimal('1.0')

        return current_liability
Beispiel #24
0
    def table_query(cls):
        pool = Pool()
        Invoice = pool.get('account.invoice')
        InvoiceTax = pool.get('account.invoice.tax')
        Tax = pool.get('account.tax')
        Date = pool.get('ir.date')
        context = Transaction().context
        invoice = Invoice.__table__()
        invoice_tax = InvoiceTax.__table__()
        tax = Tax.__table__()

        amount = invoice_tax.base + invoice_tax.amount
        month = Extract('MONTH', invoice.invoice_date)

        where = ((invoice.company == context.get('company'))
                 & (invoice.state.in_(['posted', 'paid']))
                 & (tax.es_vat_list_code != Null)
                 & (Extract('year', invoice.invoice_date) == context.get(
                     'date', Date.today()).year))
        return (invoice_tax.join(
            invoice, condition=invoice_tax.invoice == invoice.id
        ).join(tax, condition=invoice_tax.tax == tax.id).select(
            Max(invoice_tax.id).as_('id'),
            Literal(0).as_('create_uid'),
            Min(invoice_tax.create_date).as_('create_date'),
            Literal(0).as_('write_uid'),
            Max(invoice_tax.write_date).as_('write_date'),
            invoice.tax_identifier.as_('company_tax_identifier'),
            invoice.party.as_('party'),
            invoice.party_tax_identifier.as_('party_tax_identifier'),
            tax.es_vat_list_code.as_('code'),
            Sum(amount).as_('amount'),
            Sum(amount,
                filter_=month <= Literal(3)).as_('first_period_amount'),
            Sum(amount,
                filter_=((month > Literal(3)) &
                         (month <= Literal(6)))).as_('second_period_amount'),
            Sum(amount,
                filter_=((month > Literal(6)) &
                         (month <= Literal(9)))).as_('third_period_amount'),
            Sum(amount,
                filter_=((month > Literal(9)) &
                         (month <= Literal(12)))).as_('fourth_period_amount'),
            invoice.currency.as_('currency'),
            where=where,
            group_by=[
                invoice.tax_identifier,
                invoice.type,
                invoice.party,
                invoice.party_tax_identifier,
                invoice.currency,
                tax.es_vat_list_code,
            ]))
Beispiel #25
0
 def transition_start(self):
     context = Transaction().context
     model = context.get('active_model')
     action_id = context.get('action_id')
     period = context.get('period')
     if model == 'account.move.line':
         # Template id is used as action
         self.template.template = action_id
         self.template.period = period
         return 'keywords'
     else:
         return 'template'
Beispiel #26
0
 def _get_quantity_grouping(cls):
     context = Transaction().context
     grouping, grouping_filter, key = (), (), []
     if context.get('product') is not None:
         grouping = ('product',)
         grouping_filter = ([context['product']],)
         key = (context['product'],)
     elif context.get('product_template') is not None:
         grouping = ('product.template',)
         grouping_filter = ([context['product_template']],)
         key = (context['product_template'],)
     return grouping, grouping_filter, key
Beispiel #27
0
 def set_multivalue(self, name, value, save=True, **pattern):
     pool = Pool()
     Company = pool.get('company.company')
     context = Transaction().context
     Value = self.multivalue_model(name)
     if issubclass(Value, CostPrice) and context.get('company'):
         company = Company(context['company'])
         if company.cost_price_warehouse:
             pattern.setdefault('warehouse', context.get('warehouse'))
         if not value and not pattern.get('warehouse'):
             return []
     return super().set_multivalue(name, value, save=save, **pattern)
Beispiel #28
0
    def get_samples_qty(cls, records, name):
        pool = Pool()
        Template = pool.get('lims.template.analysis_sheet')

        context = Transaction().context
        with Transaction().set_context(
                date_from=context.get('date_from') or datetime.min,
                date_to=context.get('date_to') or datetime.max,
                laboratory=context.get('laboratory'),
                department=context.get('department')):
            templates = Template.browse(records)
        return {t.id: getattr(t, 'pending_fractions') for t in templates}
 def get_balance_period(self, ids, names):
     if not ids:
         return {}
     res = {}
     period_obj = self.pool.get('ekd.period')
     context = Transaction().context
     if isinstance(ids, (int, long)):
         ids = [ids]
     if context.get('current_period'):
         period = period_obj.browse(context.get('current_period'))
     cr = Transaction().cursor
     #raise Exception(','.join(map(str,ids)))
     cr.execute('SELECT id, account, balance, balance_quantity, '\
                 'debit, debit_quantity, '\
                 'credit, credit_quantity, '\
                 ' balance+debit-credit as balance_end, '\
                 ' balance_quantity+debit_quantity-credit_quantity as balance_quantity_end '\
                 'FROM ekd_balances_analytic_period '\
                 'WHERE period=%s AND account in (%s)'%(period.id, ','.join(map(str,ids))))
     for amount_id, account, balance, balance_quantity, debit, debit_quantity,\
              credit, credit_quantity, \
              balance_end, balance_quantity_end in cr.fetchall():
         # SQLite uses float for SUM
         if not isinstance(balance, Decimal):
             balance = Decimal(str(balance))
         if not isinstance(balance_end, Decimal):
             balance_end = Decimal(str(balance_end))
         if not isinstance(debit, Decimal):
             debit = Decimal(str(debit))
         if not isinstance(credit, Decimal):
             credit = Decimal(str(credit))
         for name in names:
             res.setdefault(name, {})
             res[name].setdefault(account, Decimal('0.0'))
             amount_balance = Decimal('0.0')
             if name == 'balance_end':
                 res[name][account] = balance_end
             elif name == 'balance_qty_end':
                 res[name][account] = balance_quantity_end
             elif name == 'balance_qty':
                 res[name][account] = balance_quantity
             elif name == 'balance':
                 res[name][account] = balance
             elif name == 'debit':
                 res[name][account] = debit
             elif name == 'credit':
                 res[name][account] = credit
             elif name == 'debit_qty':
                 res[name][account] = debit_quantity
             elif name == 'credit_qty':
                 res[name][account] = credit_quantity
     return res
 def get_balance_period(self, ids, names):
     if not ids:
         return {}
     res={}
     period_obj = self.pool.get('ekd.period')
     context = Transaction().context
     if isinstance(ids, (int, long)):
         ids = [ids]
     if context.get('current_period'):
         period = period_obj.browse(context.get('current_period'))
     cr = Transaction().cursor
     #raise Exception(','.join(map(str,ids)))
     cr.execute('SELECT id, account, balance, balance_quantity, '\
                 'debit, debit_quantity, '\
                 'credit, credit_quantity, '\
                 ' balance+debit-credit as balance_end, '\
                 ' balance_quantity+debit_quantity-credit_quantity as balance_quantity_end '\
                 'FROM ekd_balances_analytic_period '\
                 'WHERE period=%s AND account in (%s)'%(period.id, ','.join(map(str,ids))))
     for amount_id, account, balance, balance_quantity, debit, debit_quantity,\
              credit, credit_quantity, \
              balance_end, balance_quantity_end in cr.fetchall():
         # SQLite uses float for SUM
         if not isinstance(balance, Decimal):
             balance = Decimal(str(balance))
         if not isinstance(balance_end, Decimal):
             balance_end = Decimal(str(balance_end))
         if not isinstance(debit, Decimal):
             debit = Decimal(str(debit))
         if not isinstance(credit, Decimal):
             credit = Decimal(str(credit))
         for name in names:
             res.setdefault(name, {})
             res[name].setdefault(account, Decimal('0.0'))
             amount_balance= Decimal('0.0')
             if name == 'balance_end':
                 res[name][account] = balance_end
             elif name == 'balance_qty_end':
                 res[name][account] = balance_quantity_end
             elif name == 'balance_qty':
                 res[name][account] = balance_quantity
             elif name == 'balance':
                 res[name][account] = balance
             elif name == 'debit':
                 res[name][account] = debit
             elif name == 'credit':
                 res[name][account] = credit
             elif name == 'debit_qty':
                 res[name][account] = debit_quantity
             elif name == 'credit_qty':
                 res[name][account] = credit_quantity
     return res
Beispiel #31
0
    def get_rec_name(cls, records, name):
        pool = Pool()
        Product = pool.get('product.product')
        Template = pool.get('product.template')
        context = Transaction().context

        if context.get('product_template'):
            name = Template(context['product_template']).rec_name
        elif context.get('product'):
            name = Product(context['product']).rec_name
        else:
            name = ''
        return dict.fromkeys(map(int, records), name)
Beispiel #32
0
 def _get_for_product_domain(cls):
     pool = Pool()
     Company = pool.get('company.company')
     domain = super()._get_for_product_domain()
     context = Transaction().context
     if context.get('company'):
         company = Company(context['company'])
         if company.cost_price_warehouse:
             domain = [
                 domain,
                 ('warehouse', '=', context.get('warehouse')),
             ]
     return domain
Beispiel #33
0
    def get_debit_credit_balance(cls, journals, names):
        pool = Pool()
        MoveLine = pool.get('account.move.line')
        Move = pool.get('account.move')
        Account = pool.get('account.account')
        AccountType = pool.get('account.account.type')
        Company = pool.get('company.company')
        context = Transaction().context
        cursor = Transaction().connection.cursor()

        result = {}
        ids = [j.id for j in journals]
        for name in ['debit', 'credit', 'balance']:
            result[name] = dict.fromkeys(ids, 0)

        company_id = Transaction().context.get('company')
        if not company_id:
            return result
        company = Company(company_id)

        line = MoveLine.__table__()
        move = Move.__table__()
        account = Account.__table__()
        account_type = AccountType.__table__()
        where = ((move.date >= context.get('start_date'))
            & (move.date <= context.get('end_date'))
            & ~account_type.receivable
            & ~account_type.payable
            & (move.company == company.id))
        for sub_journals in grouped_slice(journals):
            sub_journals = list(sub_journals)
            red_sql = reduce_ids(move.journal, [j.id for j in sub_journals])
            query = line.join(move, 'LEFT', condition=line.move == move.id
                ).join(account, 'LEFT', condition=line.account == account.id
                ).join(account_type, 'LEFT',
                    condition=account.type == account_type.id
                ).select(move.journal, Sum(line.debit), Sum(line.credit),
                    where=where & red_sql,
                    group_by=move.journal)
            cursor.execute(*query)
            for journal_id, debit, credit in cursor.fetchall():
                # SQLite uses float for SUM
                if not isinstance(debit, Decimal):
                    debit = Decimal(str(debit))
                if not isinstance(credit, Decimal):
                    credit = Decimal(str(credit))
                result['debit'][journal_id] = company.currency.round(debit)
                result['credit'][journal_id] = company.currency.round(credit)
                result['balance'][journal_id] = company.currency.round(
                    debit - credit)
        return result
Beispiel #34
0
    def create(self, vals):
#        vals['code'] = "%s-%s"%('000',context.get('code', '000.000.000'))
        context = Transaction().context
        new_id = super(Budget, self).create(vals)
        budget = self.browse(new_id)
        if context.get('code', False):
            self.write(new_id, {
                                   'code': "%s-%s"%(new_id, context.get('code')),
                                    })
        else:
            self.write(new_id, {
                                   'code': "000-000.000",
                                    })
        return new_id
Beispiel #35
0
 def set_language(self, lang='en'):
     self.language = lang
     if lang in self.cache:
         self.current = self.cache[lang]
         return
     context = Transaction().context
     if context.get('default_translations'):
         default_translations = context['default_translations']
         if os.path.isdir(default_translations):
             self.current = BabelTranslations.load(
                 dirname=default_translations, locales=[lang])
             self.cache[lang] = self.current
     else:
         self.template = context.get('template', -1)
Beispiel #36
0
 def create(self, vals):
     #        vals['code'] = "%s-%s"%('000',context.get('code', '000.000.000'))
     context = Transaction().context
     new_id = super(Budget, self).create(vals)
     budget = self.browse(new_id)
     if context.get('code', False):
         self.write(new_id, {
             'code': "%s-%s" % (new_id, context.get('code')),
         })
     else:
         self.write(new_id, {
             'code': "000-000.000",
         })
     return new_id
    def compute_formula(self, id, formula, values={}):
        minus = 1
        if formula[:1] == '-':
            minus = -1
            formula = formula[1:]
        if formula == 'AmountDoc':
            return values['AmountDoc'] * minus
        elif formula == 'AmountLine':
            return values['AmountLine'] * minus
        elif formula == 'AmountAnalytic':
            return values['AmountAnalytic'] * minus
        elif formula == 'AmountTax':
            return values['AmountTax'] * minus
        #raise Exception(str(values))

        context = Transaction().context
        line_obj = self.pool.get('ekd.account.move.line.template')
        line = line_obj.browse(id)

        return safe_eval(
            formula, {
                'turnover': self.turnover,
                'balance': self.balance,
                'Period': self.period,
                'Date': self.date,
                'FromParty': line.ct_analytic,
                'ToParty': line.dt_analytic,
                'AccountDt': line.dt_account.id,
                'AccountCt': line.ct_account.id,
                'Debit': 1,
                'Credit': -1,
                'AmountDoc': Decimal('0.0'),
                'AmountDocTax': Decimal('0.0'),
                'AmountLine': Decimal('0.0'),
                'AmountLineTax': Decimal('0.0'),
                'AmountAnalytic': Decimal('0.0'),
                'AmountFixed': Decimal('0.0'),
                'AmountIntagible': Decimal('0.0'),
                'AmountMaterial': Decimal('0.0'),
                'AmountGoods': Decimal('0.0'),
                'AmountSupplier': Decimal('0.0'),
                'AmountCustomer': Decimal('0.0'),
                'AmountEmployee': Decimal('0.0'),
                'CurrentPeriod': context.get('current_period'),
                'FiscalYear': context.get('fiscalyear'),
                'StartDate': context.get('start_period'),
                'EndDate': context.get('end_period'),
                'CurrentDate': context.get('current_date'),
            }.update(values))
Beispiel #38
0
    def _quantity_context(cls, name):
        pool = Pool()
        Date = pool.get('ir.date')

        context = Transaction().context
        new_context = {}
        if name == 'quantity':
            if (context.get('stock_date_end')
                    and context['stock_date_end'] > Date.today()):
                new_context['stock_date_end'] = Date.today()
        elif name == 'forecast_quantity':
            new_context['forecast'] = True
            if not context.get('stock_date_end'):
                new_context['stock_date_end'] = datetime.date.max
        return new_context
Beispiel #39
0
    def _quantity_context(cls, name):
        pool = Pool()
        Date = pool.get('ir.date')

        context = Transaction().context
        new_context = {}
        if name == 'quantity':
            if (context.get('stock_date_end')
                    and context['stock_date_end'] > Date.today()):
                new_context['stock_date_end'] = Date.today()
        elif name == 'forecast_quantity':
            new_context['forecast'] = True
            if not context.get('stock_date_end'):
                new_context['stock_date_end'] = datetime.date.max
        return new_context
Beispiel #40
0
    def table_query(cls):
        pool = Pool()
        Invoice = pool.get('account.invoice')
        InvoiceTax = pool.get('account.invoice.tax')
        Move = pool.get('account.move')
        Period = pool.get('account.period')
        Tax = pool.get('account.tax')
        context = Transaction().context
        invoice = Invoice.__table__()
        invoice_tax = InvoiceTax.__table__()
        move = Move.__table__()
        period = Period.__table__()
        tax = Tax.__table__()

        sales = super().table_query()

        where = ((invoice.company == context.get('company'))
                 & (period.fiscalyear == context.get('fiscalyear')))
        if context.get('period'):
            where &= (period.id == context.get('period'))
        where &= ((tax.es_ec_purchases_list_code != Null)
                  & (tax.es_ec_purchases_list_code != ''))
        where &= invoice.type == 'in'
        purchases = (invoice_tax.join(
            invoice, condition=invoice_tax.invoice == invoice.id
        ).join(tax, condition=invoice_tax.tax == tax.id).join(
            move, condition=invoice.move == move.id).join(
                period, condition=move.period == period.id).select(
                    Max(invoice_tax.id).as_('id'),
                    Literal(0).as_('create_uid'),
                    Min(invoice_tax.create_date).as_('create_date'),
                    Literal(0).as_('write_uid'),
                    Max(invoice_tax.write_date).as_('write_date'),
                    invoice.tax_identifier.as_('company_tax_identifier'),
                    invoice.party.as_('party'),
                    invoice.party_tax_identifier.as_('party_tax_identifier'),
                    tax.es_ec_purchases_list_code.as_('code'),
                    Sum(invoice_tax.base).as_('amount'),
                    invoice.currency.as_('currency'),
                    where=where,
                    group_by=[
                        invoice.tax_identifier,
                        invoice.party,
                        invoice.party_tax_identifier,
                        tax.es_ec_purchases_list_code,
                        invoice.currency,
                    ]))
        return sales | purchases
Beispiel #41
0
    def get_current_liability(self):
        pool = Pool()
        Date = pool.get('ir.date')
        AccountType = pool.get('account.account.type')
        today = Date.today()
        liability = Decimal('0.0')
        transaction = Transaction()
        context = Transaction().context
        total_liability = liability = Decimal('0.0')

        company = Transaction().context.get('company')
        to_date = Transaction().context.get('to_date')

        if self.is_consolidated: 
            companies = context.get('companies',[])
            date = today if to_date is None else to_date
            for company in context.get('companies', []):
                with transaction.set_context(company=company['id'],
                        posted=True, 
                        cumulate=True, 
                        date=date, 
                        to_date=date, 
                        from_date=None,
                    ):
                    liability = Decimal('0.0')
                    liabilities = AccountType.search([('company','=',company['id']),
                        ('name','=','3) PASIVOS CORRIENTES')
                        ])
                    if len(liabilities)==1: 
                        liability = liabilities[0].amount * Decimal('1.0')
                total_liability += liability
            return total_liability
        else:
            current_liability = Decimal('0.0') 
            date = today if to_date is None else to_date
            with transaction.set_context(
                    posted=True, 
                    cumulate=True, 
                    date=date, 
                    to_date=date, 
                    from_date=None, 
                    ):
                current_liabilities = AccountType.search([('company','=',company),
                    ('name','=','3) PASIVOS CORRIENTES')])
                if len(current_liabilities)==1: 
                    current_liability = current_liabilities[0].amount * Decimal('1.0')
            
        return current_liability
    def compute_formula(self, id, formula, values={}):
        minus = 1
        if formula[:1] == '-':
            minus = -1
            formula = formula[1:]
        if formula == 'AmountDoc':
            return values['AmountDoc']*minus
        elif formula == 'AmountLine':
            return values['AmountLine']*minus
        elif formula == 'AmountAnalytic':
            return values['AmountAnalytic']*minus
        elif formula == 'AmountTax':
            return values['AmountTax']*minus
        #raise Exception(str(values))
       
        context = Transaction().context
        line_obj = self.pool.get('ekd.account.move.line.template')
        line = line_obj.browse(id)

        return safe_eval(formula, {
                    'turnover': self.turnover,
                    'balance': self.balance,
                    'Period': self.period,
                    'Date': self.date,
                    'FromParty': line.ct_analytic,
                    'ToParty': line.dt_analytic,
                    'AccountDt': line.dt_account.id,
                    'AccountCt': line.ct_account.id,
                    'Debit': 1,
                    'Credit': -1,
                    'AmountDoc': Decimal('0.0'),
                    'AmountDocTax': Decimal('0.0'),
                    'AmountLine': Decimal('0.0'),
                    'AmountLineTax': Decimal('0.0'),
                    'AmountAnalytic': Decimal('0.0'),
                    'AmountFixed': Decimal('0.0'),
                    'AmountIntagible': Decimal('0.0'),
                    'AmountMaterial': Decimal('0.0'),
                    'AmountGoods': Decimal('0.0'),
                    'AmountSupplier': Decimal('0.0'),
                    'AmountCustomer': Decimal('0.0'),
                    'AmountEmployee': Decimal('0.0'),
                    'CurrentPeriod': context.get('current_period'),
                    'FiscalYear': context.get('fiscalyear'),
                    'StartDate': context.get('start_period'),
                    'EndDate': context.get('end_period'),
                    'CurrentDate': context.get('current_date'),
                    }.update(values))
 def default_currency_digits(self):
     company_obj = self.pool.get("company.company")
     context = Transaction().context
     if context.get("company"):
         company = company_obj.browse(context["company"])
         return company.currency.digits
     return 2
Beispiel #44
0
 def search_domain(cls, domain, active_test=True, tables=None):
     context = Transaction().context
     if context.get('inactive_test'):
         domain = [domain, ('active', '=', False)]
     return super().search_domain(domain,
                                  active_test=active_test,
                                  tables=tables)
Beispiel #45
0
 def _get_reschedule_domain(cls, date):
     context = Transaction().context
     return [
         ('company', '=', context.get('company')),
         ('state', '=', 'waiting'),
         ('planned_start_date', '<', date),
     ]
Beispiel #46
0
 def _period_delta(cls):
     context = Transaction().context
     return {
         'year': relativedelta(years=1),
         'month': relativedelta(months=1),
         'day': relativedelta(days=1),
     }.get(context.get('period'))
Beispiel #47
0
    def _where(cls, tables):
        context = Transaction().context
        sale = tables['line.sale']

        where = sale.company == context.get('company')
        where &= sale.state.in_(cls._sale_states())
        from_date = context.get('from_date')
        if from_date:
            where &= sale.sale_date >= from_date
        to_date = context.get('to_date')
        if to_date:
            where &= sale.sale_date <= to_date
        warehouse = context.get('warehouse')
        if warehouse:
            where &= sale.warehouse == warehouse
        return where
Beispiel #48
0
    def _joins(cls):
        pool = Pool()
        Company = pool.get('company.company')
        Currency = pool.get('currency.currency')
        context = Transaction().context

        tables = {}
        company = context.get('company')
        lines = cls._lines()
        tables['line'] = line = Union(*(l(len(lines), i, company)
                                        for i, l in enumerate(lines)))
        tables['line.company'] = company = Company.__table__()
        withs = {}
        currency_sale = With(query=Currency.currency_rate_sql())
        withs['currency_sale'] = currency_sale
        currency_company = With(query=Currency.currency_rate_sql())
        withs['currency_company'] = currency_company

        from_item = (line.join(
            currency_sale,
            condition=(line.currency == currency_sale.currency)
            & (currency_sale.start_date <= line.date)
            &
            ((currency_sale.end_date == Null)
             | (currency_sale.end_date >= line.date))).join(
                 company, condition=line.company == company.id).join(
                     currency_company,
                     condition=(company.currency == currency_company.currency)
                     & (currency_company.start_date <= line.date)
                     & ((currency_company.end_date == Null)
                        | (currency_company.end_date >= line.date))))
        return from_item, tables, withs
Beispiel #49
0
 def is_secure(cls):
     context = Transaction().context
     if context:
         request = context.get('_request')
         if request:
             return request['is_secure']
     return bool(config.get('ssl', 'certificate'))
Beispiel #50
0
 def get_baptism_target(self, name=None):
     pool = Pool()
     Configuration = pool.get('tmi.configuration')
     config = Configuration(1)
     target = config.get_multivalue('tmi_baptism_target')
     context = Transaction().context 
     start_date = context.get('start_date')
     end_date = context.get('end_date')
     value = self.child_value 
     if start_date and end_date: 
         months = diff_month(end_date, start_date)
         value = value * months
     total = 0
     if target and value:
         total = target * value 
     return total 
    def render(cls, report, report_context):
        pool = Pool()
        Company = pool.get('company.company')

        # Convert to str as buffer from DB is not supported by StringIO
        report_content = (report.report_content if report.report_content
                          else False)
        if not report.report_content:
            raise Exception('Error', 'Missing report file!')
        report_content = report.report_content.decode('utf-8')

        # Make the report itself available n the report context
        report_context['report'] = report
        company_id = Transaction().context.get('company')
        report_context['company'] = Company(company_id)

        company_id = Transaction().context.get('company')

        ids = Transaction().context.get('html_report_ids')
        data = Transaction().context.get('html_report_data')
        if ids and data.get('model'):
            Model = pool.get(data['model'])
            report_context['record'] = Model(data['id'])
            report_context['records'] = Model.browse(ids)
        return cls.render_template(report_content, report_context)
Beispiel #52
0
 def _get_target_tables(self, tables):
     Target = self.get_target()
     table, _ = tables[None]
     target_tables = tables.get(self.name)
     context = Transaction().context
     if target_tables is None:
         if Target._history and context.get('_datetime'):
             target = Target.__table_history__()
             target_history = Target.__table_history__()
             history_condition = Column(target, '__id').in_(
                 target_history.select(
                     Max(Column(target_history, '__id')),
                     where=Coalesce(target_history.write_date,
                                    target_history.create_date) <=
                     context['_datetime'],
                     group_by=target_history.id))
         else:
             target = Target.__table__()
             history_condition = None
         condition = target.id == self.sql_column(table)
         if history_condition:
             condition &= history_condition
         target_tables = {
             None: (target, condition),
         }
         tables[self.name] = target_tables
     return target_tables
Beispiel #53
0
 def default_currency_digits(self):
     company_obj = self.pool.get('company.company')
     context = Transaction().context
     if context.get('company'):
         company = company_obj.browse( context['company'])
         return company.currency.digits
     return 2
 def default_fiscalyear(self):
     fiscalyear_obj = self.pool.get("account.fiscalyear")
     context = Transaction().context
     fiscalyear_id = fiscalyear_obj.find(context.get("company", False), exception=False)
     if fiscalyear_id:
         return fiscalyear_id
     return False
Beispiel #55
0
 def host(cls):
     context = Transaction().context
     if context:
         request = context.get('_request')
         if request:
             return request['http_host']
     return HOSTNAME
Beispiel #56
0
    def fields_view_get(cls, view_id=None, view_type='form'):
        view_id = view_id or None
        ViewConfigurator = Pool().get('view.configurator')
        user = Transaction().user or None
        viewConfigurator = ViewConfigurator.search(
            [('model.model', '=', cls.__name__), ('view', '=', view_id),
             ('user', 'in', (None, user))],
            order=[('user', 'ASC')],
            limit=1)
        context = Transaction().context
        if (not viewConfigurator or context.get('avoid_custom_view')
                or cls.__name__ == 'view.configurator'):
            result = super(ModelViewMixin,
                           cls).fields_view_get(view_id, view_type)
            return result

        view_configurator, = viewConfigurator
        key = (cls.__name__, view_configurator.id)
        result = cls._fields_view_get_cache.get(key)
        if result:
            return result

        result = super(ModelViewMixin, cls).fields_view_get(view_id, view_type)
        if result.get('type') != 'tree':
            return result
        xml = view_configurator.generate_xml()
        parser = etree.XMLParser(remove_blank_text=True)
        tree = etree.fromstring(xml, parser)

        result['arch'], result['fields'] = cls.parse_view(
            tree, 'tree', result['field_childs'])
        cls._fields_view_get_cache.set(key, result)
        return result
Beispiel #57
0
 def _domain_moves_cost(cls):
     "Returns the domain for moves to use in cost computation"
     context = Transaction().context
     return [
         ('company', '=', context.get('company')),
         ('state', '=', 'done'),
     ]
Beispiel #58
0
    def get_debit_credit_balance(cls, journals, names):
        pool = Pool()
        MoveLine = pool.get('account.move.line')
        Move = pool.get('account.move')
        Account = pool.get('account.account')
        Company = pool.get('company.company')
        context = Transaction().context
        cursor = Transaction().connection.cursor()

        result = {}
        ids = [j.id for j in journals]
        for name in ['debit', 'credit', 'balance']:
            result[name] = dict.fromkeys(ids, 0)

        company_id = Transaction().context.get('company')
        if not company_id:
            return result
        company = Company(company_id)

        line = MoveLine.__table__()
        move = Move.__table__()
        account = Account.__table__()
        where = ((move.date >= context.get('start_date'))
            & (move.date <= context.get('end_date'))
            & ~account.kind.in_(['receivable', 'payable'])
            & (move.company == company.id))
        for sub_journals in grouped_slice(journals):
            sub_journals = list(sub_journals)
            red_sql = reduce_ids(move.journal, [j.id for j in sub_journals])
            query = line.join(move, 'LEFT', condition=line.move == move.id
                ).join(account, 'LEFT', condition=line.account == account.id
                ).select(move.journal, Sum(line.debit), Sum(line.credit),
                    where=where & red_sql,
                    group_by=move.journal)
            cursor.execute(*query)
            for journal_id, debit, credit in cursor.fetchall():
                # SQLite uses float for SUM
                if not isinstance(debit, Decimal):
                    debit = Decimal(str(debit))
                if not isinstance(credit, Decimal):
                    credit = Decimal(str(credit))
                result['debit'][journal_id] = company.currency.round(debit)
                result['credit'][journal_id] = company.currency.round(credit)
                result['balance'][journal_id] = company.currency.round(
                    debit - credit)
        return result
 def default_currency(self):
     company_obj = self.pool.get('company.company')
     currency_obj = self.pool.get('currency.currency')
     context = Transaction().context
     if context.get('company'):
         company = company_obj.browse( context['company'])
         return company.currency.id
     return False
    def parse(self, report, objects, datas, localcontext={}):

        context = Transaction().context
        user = self.pool.get("res.user").browse(Transaction().user)
        localcontext["company"] = self.pool.get("company.company").browse(context.get("company", False))
        localcontext["period"] = self.pool.get("ekd.period").browse(context.get("current_period", False))
        localcontext["start_date"] = context.get("start_period", False)
        localcontext["end_date"] = context.get("end_period", False)
        localcontext["current_date"] = context.get("current_date", False)
        localcontext["total_balance_dt"] = sum((x["balance_dt"] for x in objects))
        localcontext["total_balance_ct"] = sum((x["balance_ct"] for x in objects))
        localcontext["total_debit"] = sum((x["debit"] for x in objects))
        localcontext["total_credit"] = sum((x["credit"] for x in objects))
        localcontext["total_balance_dt_end"] = sum((x["balance_dt_end"] for x in objects))
        localcontext["total_balance_ct_end"] = sum((x["balance_ct_end"] for x in objects))

        res = super(TurnoverAnalytic, self).parse(report, objects, datas, localcontext)
        return res