hunk.code_window:     def _compute_l10n_in_state_id(self):
           for move in self:
               if move.country_code == 'IN':
                   country_code = move.partner_id.country_id.code
                   if country_code == 'IN':
                       move.l10n_in_state_id = move.partner_id.state_id
  
hunk.labels: keep keep replace keep keep keep
hunk.after_edit:             if move.country_code == 'IN' and move.journal_id.type == 'sale':
  
hunk.file_path: addons/l10n_in/models/account_invoice.py
hunk.type: replace
file: # -*- coding: utf-8 -*-
  # Part of Odoo. See LICENSE file for full copyright and licensing details.
  
  from odoo import api, fields, models, _
  from odoo.exceptions import ValidationError, RedirectWarning
  
  
  class AccountMove(models.Model):
      _inherit = "account.move"
  
      amount_total_words = fields.Char("Total (In Words)", compute="_compute_amount_total_words")
      l10n_in_gst_treatment = fields.Selection([
              ('regular', 'Registered Business - Regular'),
              ('composition', 'Registered Business - Composition'),
              ('unregistered', 'Unregistered Business'),
              ('consumer', 'Consumer'),
              ('overseas', 'Overseas'),
              ('special_economic_zone', 'Special Economic Zone'),
              ('deemed_export', 'Deemed Export'),
              ('uin_holders', 'UIN Holders'),
          ], string="GST Treatment", compute="_compute_l10n_in_gst_treatment", store=True, readonly=False, copy=True)
      l10n_in_state_id = fields.Many2one('res.country.state', string="Place of supply", compute="_compute_l10n_in_state_id", store=True, readonly=False)
      l10n_in_gstin = fields.Char(string="GSTIN")
      # For Export invoice this data is need in GSTR report
      l10n_in_shipping_bill_number = fields.Char('Shipping bill number', readonly=True, states={'draft': [('readonly', False)]})
      l10n_in_shipping_bill_date = fields.Date('Shipping bill date', readonly=True, states={'draft': [('readonly', False)]})
      l10n_in_shipping_port_code_id = fields.Many2one('l10n_in.port.code', 'Port code', readonly=True, states={'draft': [('readonly', False)]})
      l10n_in_reseller_partner_id = fields.Many2one('res.partner', 'Reseller', domain=[('vat', '!=', False)], help="Only Registered Reseller", readonly=True, states={'draft': [('readonly', False)]})
  
      @api.depends('amount_total')
      def _compute_amount_total_words(self):
          for invoice in self:
              invoice.amount_total_words = invoice.currency_id.amount_to_text(invoice.amount_total)
  
      @api.depends('partner_id')
      def _compute_l10n_in_gst_treatment(self):
          for record in self:
              record.l10n_in_gst_treatment = record.partner_id.l10n_in_gst_treatment
  
      @api.depends('partner_id')
      def _compute_l10n_in_state_id(self):
          for move in self:
              if move.country_code == 'IN':
                  country_code = move.partner_id.country_id.code
                  if country_code == 'IN':
                      move.l10n_in_state_id = move.partner_id.state_id
                  elif country_code:
                      move.l10n_in_state_id = self.env.ref('l10n_in.state_in_oc', raise_if_not_found=False)
                  else:
                      move.l10n_in_state_id = move.company_id.state_id
              else:
                  move.l10n_in_state_id = False
  
      def _post(self, soft=True):
          """Use journal type to define document type because not miss state in any entry including POS entry"""
          posted = super()._post(soft)
          gst_treatment_name_mapping = {k: v for k, v in
                               self._fields['l10n_in_gst_treatment']._description_selection(self.env)}
          for move in posted.filtered(lambda m: m.country_code == 'IN'):
              if not move.company_id.state_id:
                  msg = _("Your company %s needs to have a correct address in order to validate this invoice.\n"
                  "Set the address of your company (Don't forget the State field)") % (move.company_id.name)
                  action = {
                      "view_mode": "form",
                      "res_model": "res.company",
                      "type": "ir.actions.act_window",
                      "res_id" : move.company_id.id,
                      "views": [[self.env.ref("base.view_company_form").id, "form"]],
                  }
                  raise RedirectWarning(msg, action, _('Go to Company configuration'))
              move.l10n_in_gstin = move.partner_id.vat
              if not move.l10n_in_gstin and move.l10n_in_gst_treatment in ['regular', 'composition', 'special_economic_zone', 'deemed_export']:
                  raise ValidationError(_(
                      "Partner %(partner_name)s (%(partner_id)s) GSTIN is required under GST Treatment %(name)s",
                      partner_name=move.partner_id.name,
                      partner_id=move.partner_id.id,
                      name=gst_treatment_name_mapping.get(move.l10n_in_gst_treatment)
                  ))
          return posted
  
      def _l10n_in_get_warehouse_address(self):
          """Return address where goods are delivered/received for Invoice/Bill"""
          # TO OVERRIDE
          self.ensure_one()
          return False
  