from django.db import models
from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver
from django.contrib.auth.models import User, Group, Permission
import os

from Applications.Measure.support_units import *

class Lldevicelist(models.Model):
    id = models.CharField(primary_key=True, db_column='ID', unique=True, max_length=45)  # Field name made lowercase.
    password = models.CharField(db_column='Password', max_length=100, blank=True)  # Field name made lowercase.
    loc_active = models.IntegerField(db_column='Loc_Active', blank=True, null=True)  # Field name made lowercase.
    loc_type = models.CharField(db_column='Loc_Type', max_length=10, blank=True)  # Field name made lowercase.
    loc_lat = models.CharField(db_column='Loc_Lat', max_length=45, blank=True)  # Field name made lowercase.
    loc_long = models.CharField(db_column='Loc_Long', max_length=45, blank=True)  # Field name made lowercase.
    loc_permissions = models.CharField(db_column='Loc_Permissions', max_length=45, blank=True)  # Field name made lowercase.
    rem_info = models.CharField(db_column='Rem_Info', max_length=145, blank=True)  # Field name made lowercase.
    rem_identifier = models.CharField(db_column='Rem_Identifier', max_length=45, blank=True)  # Field name made lowercase.
    rem_firmware = models.CharField(db_column='Rem_Firmware', max_length=45, blank=True)  # Field name made lowercase.
    loc_pressurerecalculateunit = models.CharField(db_column='Loc_PressureRecalculateUnit', max_length=15, blank=True)  # Field name made lowercase.
    loc_flowrecalculateunit = models.CharField(db_column='Loc_FlowRecalculateUnit', max_length=15, blank=True)  # Field name made lowercase.
    loc_totalflowrecalculateunit = models.CharField(db_column='Loc_TotalFlowRecalculateUnit', max_length=15, blank=True)  # Field name made lowercase.
    loc_recalculateequation1 = models.CharField(db_column='Loc_RecalculateEquation1', max_length=45, blank=True)  # Field name made lowercase.
    loc_recalculateequation2 = models.CharField(db_column='Loc_RecalculateEquation2', max_length=45, blank=True)  # Field name made lowercase.
    info_devicenote = models.CharField(db_column='Info_DeviceNote', max_length=145, blank=True)  # Field name made lowercase.
    info_deviceicon = models.CharField(db_column='Info_DeviceIcon', max_length=25, blank=True)  # Field name made lowercase.
    info_simcardid = models.CharField(db_column='Info_SIMCardID', max_length=45, blank=True)  # Field name made lowercase.
    info_simcardnumber = models.CharField(db_column='Info_SIMCardNumber', max_length=45, blank=True)  # Field name made lowercase.
    info_simcardinfo = models.CharField(db_column='Info_SIMCardInfo', max_length=145, blank=True)  # Field name made lowercase.
    info_simcardoperator = models.CharField(db_column='Info_SIMCardOperator', max_length=45, blank=True)  # Field name made lowercase.
    info_simcardtype = models.CharField(db_column='Info_SIMCardType', max_length=45, blank=True)  # Field name made lowercase.
    info_locationtype = models.CharField(db_column='Info_LocationType', max_length=45, blank=True)  # Field name made lowercase.
    info_locationheight = models.CharField(db_column='Info_LocationHeight', max_length=45, blank=True)  # Field name made lowercase.
    info_locationinformation = models.CharField(db_column='Info_LocationInformation', max_length=45, blank=True)  # Field name made lowercase.
    info_ch1pressurename = models.CharField(db_column='Info_CH1PressureName', max_length=45, blank=True)  # Field name made lowercase.
    info_ch2pressurename = models.CharField(db_column='Info_CH2PressureName', max_length=45, blank=True)  # Field name made lowercase.
    info_ch1flowname = models.CharField(db_column='Info_CH1FlowName', max_length=45, blank=True)  # Field name made lowercase.
    info_ch2flowname = models.CharField(db_column='Info_CH2FlowName', max_length=45, blank=True)  # Field name made lowercase.
    info_ch1digitalname = models.CharField(db_column='Info_CH1DigitalName', max_length=45, blank=True)  # Field name made lowercase.
    info_ch2digitalname = models.CharField(db_column='Info_CH2DigitalName', max_length=45, blank=True)  # Field name made lowercase.
    info_label1 = models.CharField(db_column='Info_Label1', max_length=45, blank=True)  # Field name made lowercase.
    info_label2 = models.CharField(db_column='Info_Label2', max_length=45, blank=True)  # Field name made lowercase.
    info_label3 = models.CharField(db_column='Info_Label3', max_length=45, blank=True)  # Field name made lowercase.
    info_label4 = models.CharField(db_column='Info_Label4', max_length=45, blank=True)  # Field name made lowercase.

    def get_device_id(self):
        return self.id

    def get_device_identifier(self):
        return self.rem_identifier

    def get_device_type(self):
        return self.loc_type

    def get_device_version(self):
        if self.rem_firmware is None:
            return 'UNKNOWN'
        else:
            return self.rem_firmware

    def get_device_info_battery(self):
        if self.rem_info is None:
            return '?'
        else:
            if self.loc_type == "MAG8000":
                return self.rem_info
            else:
                status_list = self.rem_info.split(",")
                if len(status_list)<2:
                    return '?'
                else:
                    return status_list[1]

    def get_device_info_signal(self):
        if self.rem_info is None:
            return '?'
        else:
            if self.loc_type == "MAG8000":
                return "/"
            else:
                status_list = self.rem_info.split(",")
                if len(status_list)<2:
                    return '?'
                else:
                    return status_list[0]

    def get_device_groups(self):
        Return = ''
        permission = Permission.objects.filter(codename=self.id)
        device_groups = list(Group.objects.filter(permissions=permission).distinct())
        for group in device_groups:
            Return = Return + group.name+ ", "

        return Return

    def get_pressure_factor(self):
        recalculate_unit_string = self.get_pressure_recalculate_unit()
        current_unit_string = self.get_pressure_current_unit()
        pressure_factor = measure_return_pressure_factor_s(current_unit_string, recalculate_unit_string)
        return pressure_factor

    def get_pressure_current_unit(self):
        current_unit_value = LldevicePdlagParameters.objects.get(lldevicelist=self).pmu
        current_unit_string = measure_return_pressure_unit_string_s(current_unit_value)
        return current_unit_string

    def get_pressure_recalculate_unit(self):
        if self.loc_pressurerecalculateunit is None:
            return 'Bar'
        elif self.loc_pressurerecalculateunit is "":
            return 'Bar'
        else:
            return self.loc_pressurerecalculateunit

    def get_flow_factor(self):
        recalculate_unit_string = self.get_flow_recalculate_unit()
        current_unit_string = self.get_flow_current_unit()
        flow_factor = measure_return_flow_factor_s(current_unit_string, recalculate_unit_string)
        return flow_factor

    def get_flow_current_unit(self):
        current_unit_value = LldevicePdlagParameters.objects.get(lldevicelist=self).fmu
        current_unit_string = measure_return_total_flow_unit_string_s(current_unit_value)+"/s"
        return current_unit_string

    def get_flow_recalculate_unit(self):
        if self.loc_flowrecalculateunit is None:
            return 'l/s'
        elif self.loc_flowrecalculateunit is "":
            return 'l/s'
        else:
            return self.loc_flowrecalculateunit

    def get_total_flow_factor(self):
        recalculate_unit_string = self.get_total_flow_recalculate_unit()
        current_unit_string = self.get_total_flow_current_unit()
        total_flow_factor = measure_return_total_flow_factor_s(current_unit_string, recalculate_unit_string)
        return total_flow_factor

    def get_total_flow_current_unit(self):
        current_unit_value = LldevicePdlagParameters.objects.get(lldevicelist=self).fmu
        current_unit_string = measure_return_total_flow_unit_string_s(current_unit_value)
        return current_unit_string

    def get_total_flow_recalculate_unit(self):
        if self.loc_totalflowrecalculateunit is None:
            return 'm3'
        elif self.loc_totalflowrecalculateunit is "":
            return 'm3'
        else:
            return self.loc_totalflowrecalculateunit

    class Meta:
        managed = False
        db_table = 'LLDeviceList'
    def __unicode__(self):
        return self.id

class LldevicePdlagParameterinfo(models.Model):
    idlldevice_pdlag_parameterinfo = models.IntegerField(db_column='idLLDevice_PDLAG_ParameterInfo', primary_key=True)  # Field name made lowercase.
    visible = models.IntegerField(db_column='Visible', blank=True, null=True)  # Field name made lowercase.
    publicname = models.CharField(db_column='PublicName', max_length=45, blank=True)  # Field name made lowercase.
    name = models.CharField(db_column='Name', max_length=45, blank=True)  # Field name made lowercase.
    type = models.CharField(db_column='Type', max_length=45, blank=True)  # Field name made lowercase.
    infotext_cro = models.CharField(db_column='InfoText_CRO', max_length=145, blank=True)  # Field name made lowercase.
    infotext_eng = models.CharField(db_column='InfoText_ENG', max_length=145, blank=True)  # Field name made lowercase.
    group = models.CharField(db_column='Group', max_length=45, blank=True)  # Field name made lowercase.
    subgroup = models.IntegerField(db_column='Subgroup', blank=True, null=True)  # Field name made lowercase.
    min = models.FloatField(db_column='Min', blank=True, null=True)  # Field name made lowercase.
    max = models.FloatField(db_column='Max', blank=True, null=True)  # Field name made lowercase.
    infotext_cro_brief = models.CharField(db_column='InfoText_CRO_Brief', max_length=45, blank=True)  # Field name made lowercase.
    infotext_eng_brief = models.CharField(db_column='InfoText_ENG_Brief', max_length=45, blank=True)  # Field name made lowercase.
    enumtext = models.CharField(db_column='EnumText', max_length=145, blank=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'LLDevice_PDLAG_ParameterInfo'

class LldeviceProduction(models.Model):
    idlldevice_pdlag_parameters = models.IntegerField(db_column='idLLDeviceProduction', primary_key=True)  # Field name made lowercase.
    lldevicelist = models.ForeignKey(Lldevicelist, db_column='LLDeviceList_ID')  # Field name made lowercase.
    note = models.CharField(db_column='Note', max_length=250)  # Field name made lowercase.
    status = models.CharField(db_column='Status', max_length=45)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'LLDeviceProduction'

class LldevicePdlagParameters(models.Model):
    idlldevice_pdlag_parameters = models.IntegerField(db_column='idLLDevice_PDLAG_Parameters', primary_key=True)  # Field name made lowercase.
    lldevicelist = models.ForeignKey(Lldevicelist, db_column='LLDeviceList_ID')  # Field name made lowercase.
    lastparameterchange = models.DateTimeField(db_column='LastParameterChange', blank=True, null=True)  # Field name made lowercase.
    idn = models.IntegerField(db_column='IDN', blank=True, null=True)  # Field name made lowercase.
    loc_idn = models.CharField(db_column='Loc_IDN', max_length=15)  # Field name made lowercase.
    rem_idn = models.CharField(db_column='Rem_IDN', max_length=15)  # Field name made lowercase.
    ap1t = models.IntegerField(db_column='AP1T', blank=True, null=True)  # Field name made lowercase.
    loc_ap1t = models.FloatField(db_column='Loc_AP1T', blank=True, null=True)  # Field name made lowercase.
    rem_ap1t = models.FloatField(db_column='Rem_AP1T', blank=True, null=True)  # Field name made lowercase.
    ap1b = models.IntegerField(db_column='AP1B', blank=True, null=True)  # Field name made lowercase.
    loc_ap1b = models.FloatField(db_column='Loc_AP1B', blank=True, null=True)  # Field name made lowercase.
    rem_ap1b = models.FloatField(db_column='Rem_AP1B', blank=True, null=True)  # Field name made lowercase.
    ap1d = models.IntegerField(db_column='AP1D', blank=True, null=True)  # Field name made lowercase.
    loc_ap1d = models.FloatField(db_column='Loc_AP1D', blank=True, null=True)  # Field name made lowercase.
    rem_ap1d = models.FloatField(db_column='Rem_AP1D', blank=True, null=True)  # Field name made lowercase.
    af1t = models.IntegerField(db_column='AF1T', blank=True, null=True)  # Field name made lowercase.
    loc_af1t = models.FloatField(db_column='Loc_AF1T', blank=True, null=True)  # Field name made lowercase.
    rem_af1t = models.FloatField(db_column='Rem_AF1T', blank=True, null=True)  # Field name made lowercase.
    af1b = models.IntegerField(db_column='AF1B', blank=True, null=True)  # Field name made lowercase.
    loc_af1b = models.FloatField(db_column='Loc_AF1B', blank=True, null=True)  # Field name made lowercase.
    rem_af1b = models.FloatField(db_column='Rem_AF1B', blank=True, null=True)  # Field name made lowercase.
    af1d = models.IntegerField(db_column='AF1D', blank=True, null=True)  # Field name made lowercase.
    loc_af1d = models.FloatField(db_column='Loc_AF1D', blank=True, null=True)  # Field name made lowercase.
    rem_af1d = models.FloatField(db_column='Rem_AF1D', blank=True, null=True)  # Field name made lowercase.
    ap2t = models.IntegerField(db_column='AP2T', blank=True, null=True)  # Field name made lowercase.
    loc_ap2t = models.FloatField(db_column='Loc_AP2T', blank=True, null=True)  # Field name made lowercase.
    rem_ap2t = models.FloatField(db_column='Rem_AP2T', blank=True, null=True)  # Field name made lowercase.
    ap2b = models.IntegerField(db_column='AP2B', blank=True, null=True)  # Field name made lowercase.
    loc_ap2b = models.FloatField(db_column='Loc_AP2B', blank=True, null=True)  # Field name made lowercase.
    rem_ap2b = models.FloatField(db_column='Rem_AP2B', blank=True, null=True)  # Field name made lowercase.
    ap2d = models.IntegerField(db_column='AP2D', blank=True, null=True)  # Field name made lowercase.
    loc_ap2d = models.FloatField(db_column='Loc_AP2D', blank=True, null=True)  # Field name made lowercase.
    rem_ap2d = models.FloatField(db_column='Rem_AP2D', blank=True, null=True)  # Field name made lowercase.
    af2t = models.IntegerField(db_column='AF2T', blank=True, null=True)  # Field name made lowercase.
    loc_af2t = models.FloatField(db_column='Loc_AF2T', blank=True, null=True)  # Field name made lowercase.
    rem_af2t = models.FloatField(db_column='Rem_AF2T', blank=True, null=True)  # Field name made lowercase.
    af2b = models.IntegerField(db_column='AF2B', blank=True, null=True)  # Field name made lowercase.
    loc_af2b = models.FloatField(db_column='Loc_AF2B', blank=True, null=True)  # Field name made lowercase.
    rem_af2b = models.FloatField(db_column='Rem_AF2B', blank=True, null=True)  # Field name made lowercase.
    af2d = models.IntegerField(db_column='AF2D', blank=True, null=True)  # Field name made lowercase.
    loc_af2d = models.FloatField(db_column='Loc_AF2D', blank=True, null=True)  # Field name made lowercase.
    rem_af2d = models.FloatField(db_column='Rem_AF2D', blank=True, null=True)  # Field name made lowercase.
    ilt = models.IntegerField(db_column='ILT', blank=True, null=True)  # Field name made lowercase.
    loc_ilt = models.IntegerField(db_column='Loc_ILT', blank=True, null=True)  # Field name made lowercase.
    rem_ilt = models.IntegerField(db_column='Rem_ILT', blank=True, null=True)  # Field name made lowercase.
    aro = models.IntegerField(db_column='ARO', blank=True, null=True)  # Field name made lowercase.
    loc_aro = models.IntegerField(db_column='Loc_ARO', blank=True, null=True)  # Field name made lowercase.
    rem_aro = models.IntegerField(db_column='Rem_ARO', blank=True, null=True)  # Field name made lowercase.
    gsti = models.IntegerField(db_column='GSTI', blank=True, null=True)  # Field name made lowercase.
    loc_gsti = models.TimeField(db_column='Loc_GSTI', blank=True, null=True)  # Field name made lowercase.
    rem_gsti = models.TimeField(db_column='Rem_GSTI', blank=True, null=True)  # Field name made lowercase.
    ap1 = models.IntegerField(db_column='AP1', blank=True, null=True)  # Field name made lowercase.
    loc_ap1 = models.IntegerField(db_column='Loc_AP1', blank=True, null=True)  # Field name made lowercase.
    rem_ap1 = models.IntegerField(db_column='Rem_AP1', blank=True, null=True)  # Field name made lowercase.
    af1 = models.IntegerField(db_column='AF1', blank=True, null=True)  # Field name made lowercase.
    loc_af1 = models.IntegerField(db_column='Loc_AF1', blank=True, null=True)  # Field name made lowercase.
    rem_af1 = models.IntegerField(db_column='Rem_AF1', blank=True, null=True)  # Field name made lowercase.
    ap2 = models.IntegerField(db_column='AP2', blank=True, null=True)  # Field name made lowercase.
    loc_ap2 = models.IntegerField(db_column='Loc_AP2', blank=True, null=True)  # Field name made lowercase.
    rem_ap2 = models.IntegerField(db_column='Rem_AP2', blank=True, null=True)  # Field name made lowercase.
    af2 = models.IntegerField(db_column='AF2', blank=True, null=True)  # Field name made lowercase.
    loc_af2 = models.IntegerField(db_column='Loc_AF2', blank=True, null=True)  # Field name made lowercase.
    rem_af2 = models.IntegerField(db_column='Rem_AF2', blank=True, null=True)  # Field name made lowercase.
    num = models.IntegerField(db_column='NUM', blank=True, null=True)  # Field name made lowercase.
    loc_num = models.CharField(db_column='Loc_NUM', max_length=15, blank=True)  # Field name made lowercase.
    rem_num = models.CharField(db_column='Rem_NUM', max_length=15, blank=True)  # Field name made lowercase.
    mto = models.IntegerField(db_column='MTO', blank=True, null=True)  # Field name made lowercase.
    loc_mto = models.CharField(db_column='Loc_MTO', max_length=31, blank=True)  # Field name made lowercase.
    rem_mto = models.CharField(db_column='Rem_MTO', max_length=31, blank=True)  # Field name made lowercase.
    fmmt = models.IntegerField(db_column='FMMT', blank=True, null=True)  # Field name made lowercase.
    loc_fmmt = models.IntegerField(db_column='Loc_FMMT', blank=True, null=True)  # Field name made lowercase.
    rem_fmmt = models.IntegerField(db_column='Rem_FMMT', blank=True, null=True)  # Field name made lowercase.
    pmu = models.IntegerField(db_column='PMU', blank=True, null=True)  # Field name made lowercase.
    loc_pmu = models.IntegerField(db_column='Loc_PMU', blank=True, null=True)  # Field name made lowercase.
    rem_pmu = models.IntegerField(db_column='Rem_PMU', blank=True, null=True)  # Field name made lowercase.
    fmu = models.IntegerField(db_column='FMU', blank=True, null=True)  # Field name made lowercase.
    loc_fmu = models.IntegerField(db_column='Loc_FMU', blank=True, null=True)  # Field name made lowercase.
    rem_fmu = models.IntegerField(db_column='Rem_FMU', blank=True, null=True)  # Field name made lowercase.
    gstr = models.IntegerField(db_column='GSTR', blank=True, null=True)  # Field name made lowercase.
    loc_gstr = models.TimeField(db_column='Loc_GSTR', blank=True, null=True)  # Field name made lowercase.
    rem_gstr = models.TimeField(db_column='Rem_GSTR', blank=True, null=True)  # Field name made lowercase.
    gwt = models.IntegerField(db_column='GWT', blank=True, null=True)  # Field name made lowercase.
    loc_gwt = models.IntegerField(db_column='Loc_GWT', blank=True, null=True)  # Field name made lowercase.
    rem_gwt = models.IntegerField(db_column='Rem_GWT', blank=True, null=True)  # Field name made lowercase.
    grc = models.IntegerField(db_column='GRC', blank=True, null=True)  # Field name made lowercase.
    loc_grc = models.IntegerField(db_column='Loc_GRC', blank=True, null=True)  # Field name made lowercase.
    rem_grc = models.IntegerField(db_column='Rem_GRC', blank=True, null=True)  # Field name made lowercase.
    ip = models.IntegerField(db_column='IP', blank=True, null=True)  # Field name made lowercase.
    loc_ip = models.CharField(db_column='Loc_IP', max_length=15, blank=True)  # Field name made lowercase.
    rem_ip = models.CharField(db_column='Rem_IP', max_length=15, blank=True)  # Field name made lowercase.
    port = models.IntegerField(db_column='PORT', blank=True, null=True)  # Field name made lowercase.
    loc_port = models.CharField(db_column='Loc_PORT', max_length=7, blank=True)  # Field name made lowercase.
    rem_port = models.CharField(db_column='Rem_PORT', max_length=7, blank=True)  # Field name made lowercase.
    s1fs = models.IntegerField(db_column='S1FS', blank=True, null=True)  # Field name made lowercase.
    rem_s1fs = models.FloatField(db_column='Rem_S1FS', blank=True, null=True)  # Field name made lowercase.
    loc_s1fs = models.FloatField(db_column='Loc_S1FS', blank=True, null=True)  # Field name made lowercase.
    s2fs = models.IntegerField(db_column='S2FS', blank=True, null=True)  # Field name made lowercase.
    rem_s2fs = models.FloatField(db_column='Rem_S2FS', blank=True, null=True)  # Field name made lowercase.
    loc_s2fs = models.FloatField(db_column='Loc_S2FS', blank=True, null=True)  # Field name made lowercase.
    s1ps = models.IntegerField(db_column='S1PS', blank=True, null=True)  # Field name made lowercase.
    rem_s1ps = models.FloatField(db_column='Rem_S1PS', blank=True, null=True)  # Field name made lowercase.
    loc_s1ps = models.FloatField(db_column='Loc_S1PS', blank=True, null=True)  # Field name made lowercase.
    s2ps = models.IntegerField(db_column='S2PS', blank=True, null=True)  # Field name made lowercase.
    rem_s2ps = models.FloatField(db_column='Rem_S2PS', blank=True, null=True)  # Field name made lowercase.
    loc_s2ps = models.FloatField(db_column='Loc_S2PS', blank=True, null=True)  # Field name made lowercase.
    mfr = models.IntegerField(db_column='MFR', blank=True, null=True)  # Field name made lowercase.
    loc_mfr = models.CharField(db_column='Loc_MFR', max_length=31, blank=True)  # Field name made lowercase.
    rem_mfr = models.CharField(db_column='Rem_MFR', max_length=31, blank=True)  # Field name made lowercase.
    msrv = models.IntegerField(db_column='MSRV', blank=True, null=True)  # Field name made lowercase.
    loc_msrv = models.CharField(db_column='Loc_MSRV', max_length=31, blank=True)  # Field name made lowercase.
    rem_msrv = models.CharField(db_column='Rem_MSRV', max_length=31, blank=True)  # Field name made lowercase.
    musr = models.IntegerField(db_column='MUSR', blank=True, null=True)  # Field name made lowercase.
    loc_musr = models.CharField(db_column='Loc_MUSR', max_length=15, blank=True)  # Field name made lowercase.
    rem_musr = models.CharField(db_column='Rem_MUSR', max_length=15, blank=True)  # Field name made lowercase.
    mpas = models.IntegerField(db_column='MPAS', blank=True, null=True)  # Field name made lowercase.
    loc_mpas = models.CharField(db_column='Loc_MPAS', max_length=15, blank=True)  # Field name made lowercase.
    rem_mpas = models.CharField(db_column='Rem_MPAS', max_length=15, blank=True)  # Field name made lowercase.
    mprt = models.IntegerField(db_column='MPRT', blank=True, null=True)  # Field name made lowercase.
    loc_mprt = models.CharField(db_column='Loc_MPRT', max_length=10, blank=True)  # Field name made lowercase.
    rem_mprt = models.CharField(db_column='Rem_MPRT', max_length=10, blank=True)  # Field name made lowercase.
    susr = models.IntegerField(db_column='SUSR', blank=True, null=True)  # Field name made lowercase.
    loc_susr = models.CharField(db_column='Loc_SUSR', max_length=15, blank=True)  # Field name made lowercase.
    rem_susr = models.CharField(db_column='Rem_SUSR', max_length=15, blank=True)  # Field name made lowercase.
    spas = models.IntegerField(db_column='SPAS', blank=True, null=True)  # Field name made lowercase.
    loc_spas = models.CharField(db_column='Loc_SPAS', max_length=15, blank=True)  # Field name made lowercase.
    rem_spas = models.CharField(db_column='Rem_SPAS', max_length=15, blank=True)  # Field name made lowercase.
    pin = models.IntegerField(db_column='PIN', blank=True, null=True)  # Field name made lowercase.
    loc_pin = models.CharField(db_column='Loc_PIN', max_length=7, blank=True)  # Field name made lowercase.
    rem_pin = models.CharField(db_column='Rem_PIN', max_length=7, blank=True)  # Field name made lowercase.
    lp1 = models.IntegerField(db_column='LP1', blank=True, null=True)  # Field name made lowercase.
    loc_lp1 = models.IntegerField(db_column='Loc_LP1', blank=True, null=True)  # Field name made lowercase.
    rem_lp1 = models.IntegerField(db_column='Rem_LP1', blank=True, null=True)  # Field name made lowercase.
    lp2 = models.IntegerField(db_column='LP2', blank=True, null=True)  # Field name made lowercase.
    loc_lp2 = models.IntegerField(db_column='Loc_LP2', blank=True, null=True)  # Field name made lowercase.
    rem_lp2 = models.IntegerField(db_column='Rem_LP2', blank=True, null=True)  # Field name made lowercase.
    lf1 = models.IntegerField(db_column='LF1', blank=True, null=True)  # Field name made lowercase.
    loc_lf1 = models.IntegerField(db_column='Loc_LF1', blank=True, null=True)  # Field name made lowercase.
    rem_lf1 = models.IntegerField(db_column='Rem_LF1', blank=True, null=True)  # Field name made lowercase.
    lf2 = models.IntegerField(db_column='LF2', blank=True, null=True)  # Field name made lowercase.
    loc_lf2 = models.IntegerField(db_column='Loc_LF2', blank=True, null=True)  # Field name made lowercase.
    rem_lf2 = models.IntegerField(db_column='Rem_LF2', blank=True, null=True)  # Field name made lowercase.
    apn = models.IntegerField(db_column='APN', blank=True, null=True)  # Field name made lowercase.
    loc_apn = models.CharField(db_column='Loc_APN', max_length=15, blank=True)  # Field name made lowercase.
    rem_apn = models.CharField(db_column='Rem_APN', max_length=15, blank=True)  # Field name made lowercase.
    usr = models.IntegerField(db_column='USR', blank=True, null=True)  # Field name made lowercase.
    loc_usr = models.CharField(db_column='Loc_USR', max_length=15, blank=True)  # Field name made lowercase.
    rem_usr = models.CharField(db_column='Rem_USR', max_length=15, blank=True)  # Field name made lowercase.
    pass_field = models.IntegerField(db_column='PASS', blank=True, null=True)  # Field name made lowercase. Field renamed because it was a Python reserved word.
    loc_pass = models.CharField(db_column='Loc_PASS', max_length=15, blank=True)  # Field name made lowercase.
    rem_pass = models.CharField(db_column='Rem_PASS', max_length=15, blank=True)  # Field name made lowercase.
    itsi = models.IntegerField(db_column='ITSI', blank=True, null=True)  # Field name made lowercase.
    loc_itsi = models.IntegerField(db_column='Loc_ITSI', blank=True, null=True)  # Field name made lowercase.
    rem_itsi = models.IntegerField(db_column='Rem_ITSI', blank=True, null=True)  # Field name made lowercase.
    ad1 = models.IntegerField(db_column='AD1', blank=True, null=True)  # Field name made lowercase.
    loc_ad1 = models.IntegerField(db_column='Loc_AD1', blank=True, null=True)  # Field name made lowercase.
    rem_ad1 = models.IntegerField(db_column='Rem_AD1', blank=True, null=True)  # Field name made lowercase.
    ad2 = models.IntegerField(db_column='AD2', blank=True, null=True)  # Field name made lowercase.
    loc_ad2 = models.IntegerField(db_column='Loc_AD2', blank=True, null=True)  # Field name made lowercase.
    rem_ad2 = models.IntegerField(db_column='Rem_AD2', blank=True, null=True)  # Field name made lowercase.
    dcc1 = models.IntegerField(db_column='DCC1', blank=True, null=True)  # Field name made lowercase.
    loc_dcc1 = models.IntegerField(db_column='Loc_DCC1', blank=True, null=True)  # Field name made lowercase.
    rem_dcc1 = models.IntegerField(db_column='Rem_DCC1', blank=True, null=True)  # Field name made lowercase.
    dcc2 = models.IntegerField(db_column='DCC2', blank=True, null=True)  # Field name made lowercase.
    loc_dcc2 = models.IntegerField(db_column='Loc_DCC2', blank=True, null=True)  # Field name made lowercase.
    rem_dcc2 = models.IntegerField(db_column='Rem_DCC2', blank=True, null=True)  # Field name made lowercase.
    rti = models.IntegerField(db_column='RTI', blank=True, null=True)  # Field name made lowercase.
    loc_rti = models.IntegerField(db_column='Loc_RTI', blank=True, null=True)  # Field name made lowercase.
    rem_rti = models.IntegerField(db_column='Rem_RTI', blank=True, null=True)  # Field name made lowercase.
    app1 = models.IntegerField(db_column='APP1', blank=True, null=True)  # Field name made lowercase.
    loc_app1 = models.IntegerField(db_column='Loc_APP1', blank=True, null=True)  # Field name made lowercase.
    rem_app1 = models.IntegerField(db_column='Rem_APP1', blank=True, null=True)  # Field name made lowercase.
    app2 = models.IntegerField(db_column='APP2', blank=True, null=True)  # Field name made lowercase.
    loc_app2 = models.IntegerField(db_column='Loc_APP2', blank=True, null=True)  # Field name made lowercase.
    rem_app2 = models.IntegerField(db_column='Rem_APP2', blank=True, null=True)  # Field name made lowercase.
    apf1 = models.IntegerField(db_column='APF1', blank=True, null=True)  # Field name made lowercase.
    loc_apf1 = models.IntegerField(db_column='Loc_APF1', blank=True, null=True)  # Field name made lowercase.
    rem_apf1 = models.IntegerField(db_column='Rem_APF1', blank=True, null=True)  # Field name made lowercase.
    apf2 = models.IntegerField(db_column='APF2', blank=True, null=True)  # Field name made lowercase.
    loc_apf2 = models.IntegerField(db_column='Loc_APF2', blank=True, null=True)  # Field name made lowercase.
    rem_apf2 = models.IntegerField(db_column='Rem_APF2', blank=True, null=True)  # Field name made lowercase.
    cdo1 = models.IntegerField(db_column='CDO1', blank=True, null=True)  # Field name made lowercase.
    loc_cdo1 = models.IntegerField(db_column='Loc_CDO1', blank=True, null=True)  # Field name made lowercase.
    rem_cdo1 = models.IntegerField(db_column='Rem_CDO1', blank=True, null=True)  # Field name made lowercase.
    cdo2 = models.IntegerField(db_column='CDO2', blank=True, null=True)  # Field name made lowercase.
    loc_cdo2 = models.IntegerField(db_column='Loc_CDO2', blank=True, null=True)  # Field name made lowercase.
    rem_cdo2 = models.IntegerField(db_column='Rem_CDO2', blank=True, null=True)  # Field name made lowercase.

    def get_loc_dcc1(self):
        if not self.loc_dcc1:
            return 0
        return self.loc_dcc1

    def get_rem_dcc1(self):
        if not self.rem_dcc1:
            return 0
        return self.rem_dcc1

    def get_loc_dcc2(self):
        if not self.loc_dcc2:
            return 0
        return self.loc_dcc2

    def get_rem_dcc2(self):
        if not self.rem_dcc2:
            return 0
        return self.rem_dcc2

    def get_loc_cdo1(self):
        if not self.loc_cdo1:
            return 0
        return self.loc_cdo1

    def get_rem_cdo1(self):
        if not self.rem_cdo1:
            return 0
        return self.rem_cdo1

    def get_loc_cdo2(self):
        if not self.loc_cdo2:
            return 0
        return self.loc_cdo2

    def get_rem_cdo2(self):
        if not self.rem_cdo2:
            return 0
        return self.rem_cdo2

    class Meta:
        managed = False
        db_table = 'LLDevice_PDLAG_Parameters'

class LlMapLayers(models.Model):
    id_llmaplayers = models.IntegerField(db_column='idLLMapLayers', primary_key=True)  # Field name made lowercase.
    user_group = models.ForeignKey(Group, db_column='UserGroup')  # Field name made lowercase.
    path = models.FileField(upload_to='layers/',db_column='Path')
    name = models.CharField(db_column='Name', max_length=45)  # Field name made lowercase.
    icon = models.CharField(db_column='Icon', max_length=45)  # Field name made lowercase.
    fill_color = models.CharField(db_column='FillColor', max_length=45)  # Field name made lowercase.
    fill_opacity = models.FloatField(db_column='FillOpacity', blank=True, null=True)  # Field name made lowercase.
    stroke_color = models.CharField(db_column='StrokeColor', max_length=45)  # Field name made lowercase.
    stroke_opacity = models.FloatField(db_column='StrokeOpacity', blank=True, null=True)  # Field name made lowercase.
    stroke_weight = models.IntegerField(db_column='StrokeWeight', blank=True, null=True)  # Field name made lowercase.
    z_index = models.IntegerField(db_column='ZIndex', blank=True, null=True)  # Field name made lowercase.

    def get_icon(self):
        if not self.icon:
            return '/static/map_markers/MA2.png'
        return self.icon

    def get_fill_color(self):
        if not self.fill_color:
            return 'red'
        return self.fill_color

    def get_fill_opacity(self):
        if not self.fill_opacity:
            return 0.5
        return self.fill_opacity

    def get_stroke_color(self):
        if not self.stroke_color:
            return 'red'
        return self.stroke_color

    def get_stroke_opacity(self):
        if not self.stroke_opacity:
            return 0.5
        return self.stroke_opacity

    def get_stroke_weight(self):
        if not self.stroke_weight:
            return 3
        return self.stroke_weight

    def get_z_index(self):
        if not self.z_index:
            return 1
        return self.z_index

    class Meta:
        db_table = 'LLMapLayers'

    def filename(self):
        return os.path.basename(self.path.name)

@receiver(pre_delete, sender=LlMapLayers)
def Llmaplayers_delete_file(sender, instance, **kwargs):
    # Pass false so FileField doesn't save the model.
    instance.path.delete(False)