from netforce.model import Model, fields, get_model
from netforce.utils import get_file_path
from . import utils

class ImportUC(Model):
    _name="clinic.import.uc"
    _transient=True

    _fields={
        "payment_id": fields.Many2One("account.payment","Payment",required=True,on_delete="cascade"),
        "file": fields.File("File", required=True),
        'type_id': fields.Many2One("clinic.patient.type","Type", required=True),
    }
    
    def _get_payment_id(self,context={}):
        payment_id=context.get("refer_id")
        if not payment_id:
            return None
        return int(payment_id)

    def _get_type(self,context={}):
        st=get_model("clinic.setting").browse(1)
        return st.imp_patient_type_id.id

    _defaults={
        'payment_id': _get_payment_id,
        'type_id': _get_type,
    }

    def do_import(self,ids,context):
        obj=self.browse(ids)[0]
        partner=obj.type_id.contact_id
        if not partner:
            raise Exception("No partner")
        account_id=partner.account_income_id.id
        if not account_id:
            raise Exception("No account income")

        vals={
            'direct_lines':[],
        }
        patients={}
        for p in get_model("clinic.patient").search_browse([]):
            patients[p.hn_no]=p.name

        if obj.type_id.code=='U':
            fname=obj.file
            fpath=get_file_path(fname)
            node='EPOBills'
            lines=utils.read_xml(fpath,node=node)
            #hcode_impt=fname.split("_")[0]
            epoadm=0
            for line in lines:
                hn=line.get('hn')
                hn_no=''.join(x for x in hn if x.isdigit()) #XXX
                epoadm=line.get("epoadm")
                lines2=line.get("epos").get('EPO',[])
                name='%s %s'%(hn,patients.get(hn_no,""))
                for l2 in lines2:
                    if type(l2)==type(''):
                        continue
                    desc=l2.get('@desc')
                    if '-' in desc:
                        continue
                    name+=desc
                vals['direct_lines'].append(('create',{
                    'description': name,
                    'qty': 1,
                    'unit_price': epoadm,
                    'amount': epoadm,
                    'account_id': account_id,
                }))

        for dline in obj.payment_id.direct_lines:
            dline.delete()
        obj.payment_id.write(vals)

        return {
            'next': {
                'name': 'payment',
                'mode': 'form',
                'active_id': obj.payment_id.id,
            },
            'flash': 'Import successfully',
        }

ImportUC.register()