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()
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
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) + ")"
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
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()
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
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
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)]
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
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
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
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
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]
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'
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
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 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, ]))
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
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)
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
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)
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
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
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 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)
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))
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
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
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
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)
def _get_reschedule_domain(cls, date): context = Transaction().context return [ ('company', '=', context.get('company')), ('state', '=', 'waiting'), ('planned_start_date', '<', date), ]
def _period_delta(cls): context = Transaction().context return { 'year': relativedelta(years=1), 'month': relativedelta(months=1), 'day': relativedelta(days=1), }.get(context.get('period'))
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
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
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'))
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)
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
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
def host(cls): context = Transaction().context if context: request = context.get('_request') if request: return request['http_host'] return HOSTNAME
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
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'), ]
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