def retrieve_intake_for_level_control(open_water, labels, sheet, pars):
    """Return the single intake for level control.

    This method finds the PumpingStation named NAME_INTAKE_LEVEL_CONTROL or
    creates one with that name if it does not exist. It also finds or creates
    each PumpLine for this PumpingStation and connects that PumpLine to its
    time series.

    Parameters:
      * open_water *
        OpenWater to which the PumpingStation to retrieve belongs
      * labels *
        dictionary of PumpingStation name to Label
      * sheet *
        xlrd Sheet that contains all data
      * pars *
        dictionary of PumpingStation name to Parameter

    """
    label = labels[NAME_INTAKE_LEVEL_CONTROL]
    pumping_station = retrieve_pumping_station_for_level_control(sheet, open_water, label)

    row, column = tuple(COORDS_NAME_PUMPLINE_INTAKE_LEVEL_CONTROL)
    cell = sheet.cell(row, column)
    if (not cell.value is None) and len(cell.value) > 0:
        name = "%s" % cell.value

        print "pomplijn voor %s op %d, %d met naam %s" % (pumping_station.__unicode__(), row, column, name)
        pump_lines = PumpLine.objects.filter(pumping_station=pumping_station, name=name)
        if pump_lines.count() > 0:
            pump_line = pump_lines[0]
        else:
            pump_line = PumpLine()
            pump_line.pumping_station = pumping_station
            pump_line.name = name

        parameter = pars["structure_discharge"]
        timeseries_queryset = WaterbalanceTimeserie.objects.filter(parameter=parameter, pump_line_timeserie=pump_line)
        if timeseries_queryset.count() > 0:
            timeseries = timeseries_queryset[0]
        else:
            timeseries = WaterbalanceTimeserie.objects.create(
                parameter=parameter, name="%s: %s" % (pump_line.__unicode__()[:30], parameter.name[:15])
            )
            pump_line.timeserie = timeseries

        save_timeserie_into_database(timeseries, sheet, 76, 0, column)

        pump_line.save()
def upload_settings_from_excelfile(xls_file_name, load_excel_reference_results=False):
    """load settings from the waternet excelfile format

    """

    print "start import file %s" % xls_file_name

    xls = xlrd.open_workbook(xls_file_name)
    sheet = xls.sheet_by_name("uitgangspunten")

    wb_area_name = sheet.cell(0, 0).value

    pars = {}

    pars["rainfall_day"], new = Parameter.objects.get_or_create(
        name="dag neerslag",
        unit="mm/dag",
        parameter=Parameter.PARAMETER_PRECIPITATION,
        sourcetype=Parameter.TYPE_MEASURED,
    )
    pars["evaporation_day"], new = Parameter.objects.get_or_create(
        name="dag verdamping",
        unit="mm/dag",
        parameter=Parameter.PARAMETER_EVAPORATION,
        sourcetype=Parameter.TYPE_MEASURED,
    )
    pars["min_level"], new = Parameter.objects.get_or_create(
        name="minimum waterpeil",
        unit="mNAP",
        parameter=Parameter.PARAMETER_WATERLEVEL,
        sourcetype=Parameter.TYPE_USERINPUT,
    )
    pars["max_level"], new = Parameter.objects.get_or_create(
        name="maximum waterpeil",
        unit="mNAP",
        parameter=Parameter.PARAMETER_WATERLEVEL,
        sourcetype=Parameter.TYPE_USERINPUT,
    )
    pars["reference_waterlevel_day"], new = Parameter.objects.get_or_create(
        name="gemeten waterpeil",
        unit="mNAP",
        parameter=Parameter.PARAMETER_WATERLEVEL,
        sourcetype=Parameter.TYPE_MEASURED,
    )
    pars["seepage_infiltration"], new = Parameter.objects.get_or_create(
        name="kwel(+) en wegzijging(-)",
        unit="mm/dag",
        parameter=Parameter.PARAMETER_SEEPAGE_INFILTRATION,
        sourcetype=Parameter.TYPE_USERINPUT,
    )
    pars["seepage"], new = Parameter.objects.get_or_create(
        name="kwel",
        unit="mm/dag",
        parameter=Parameter.PARAMETER_SEEPAGE_INFILTRATION,
        sourcetype=Parameter.TYPE_USERINPUT,
    )
    pars["infiltration"], new = Parameter.objects.get_or_create(
        name="wegzijging",
        unit="mm/dag",
        parameter=Parameter.PARAMETER_SEEPAGE_INFILTRATION,
        sourcetype=Parameter.TYPE_USERINPUT,
    )
    pars["structure_discharge"], new = Parameter.objects.get_or_create(
        name="kunstwerk_debiet",
        unit="m3/dag",
        parameter=Parameter.PARAMETER_DISCHARGE,
        sourcetype=Parameter.TYPE_MEASURED,
    )
    pars["chloride_measurement"], new = Parameter.objects.get_or_create(
        name="gemeten chloride", unit="mg/l", parameter=Parameter.PARAMETER_CHLORIDE, sourcetype=Parameter.TYPE_MEASURED
    )
    pars["sewer_day"], new = Parameter.objects.get_or_create(
        name="referentie gemengde riolering", unit="m3/dag/ha", sourcetype=Parameter.TYPE_USERINPUT
    )

    try:
        area = WaterbalanceArea.objects.get(name=wb_area_name)
        scenario, new = WaterbalanceScenario.objects.get_or_create(name="import")
    except (WaterbalanceArea.DoesNotExist):
        print "geometry van gebied %s niet gevonden" % wb_area_name
        area, new = WaterbalanceArea.objects.get_or_create(name="%s n.g." % wb_area_name)
        # create scenario with name and link areas later manually
        scenario, new = WaterbalanceScenario.objects.get_or_create(name="import")

    config, config_new = WaterbalanceConf.objects.get_or_create(
        waterbalance_scenario=scenario,
        waterbalance_area=area,
        defaults={
            "calculation_start_date": datetime(1996, 1, 1),
            "description": "%s - %s" % (str(area.name), str(scenario.name)),
        },
    )

    labels = {}
    labels[(0, "neerslag")], new = Label.objects.get_or_create(
        program_name="precipitation"
    )  # name='neerslag', flow_type=Label.TYPE_IN, defaucolor='#0000ff', color_increment='#ff0000')
    labels[(1, "kwel")], new = Label.objects.get_or_create(
        program_name="seepage"
    )  # name='kwel', flow_type=Label.TYPE_IN, color='#ffbb00', color_increment='#ff0000')
    labels[(2, "verhard")], new = Label.objects.get_or_create(
        program_name="hardened"
    )  # name='verhard', flow_type=Label.TYPE_IN, color='#bbbbbb', color_increment='#ff0000')
    labels[(3, "riolering")], new = Label.objects.get_or_create(
        program_name="sewer"
    )  # name='riolering', flow_type=Label.TYPE_IN, color='#006600', color_increment='#ff0000')
    labels[(4, "gedraineerd")], new = Label.objects.get_or_create(
        program_name="drained"
    )  # name='gedraineerd', flow_type=Label.TYPE_IN, color='#ff9900', color_increment='#ff0000')
    labels[(5, "uitspoeling")], new = Label.objects.get_or_create(
        program_name="undrained"
    )  # name='uitspoeling', flow_type=Label.TYPE_IN, color='#00ff00', color_increment='#ff0000')
    labels[(6, "afstroming")], new = Label.objects.get_or_create(
        program_name="flow_off"
    )  # name='afstroming', flow_type=Label.TYPE_IN, color='#008800', color_increment='#ff0000')

    labels[(7, "inlaat1")], new = Label.objects.get_or_create(
        program_name="inlet1"
    )  # name='inlaat 1', flow_type=Label.TYPE_IN, color='#ff00ff', color_increment='#ff0000')
    labels[(8, "inlaat2")], new = Label.objects.get_or_create(
        program_name="inlet2"
    )  # name='inlaat 2', flow_type=Label.TYPE_IN, color='#cc00cc', color_increment='#ff0000')
    labels[(9, "inlaat3")], new = Label.objects.get_or_create(
        program_name="inlet3"
    )  # name='inlaat 3',, flow_type=Label.TYPE_IN, color='#aa00aa', color_increment='#ff0000')
    labels[(10, "inlaat4")], new = Label.objects.get_or_create(
        program_name="inlet4"
    )  # name='inlaat 4',, flow_type=Label.TYPE_IN, color='#880088', color_increment='#ff0000')
    labels[(11, "inlaat peilhandhaving")], new = Label.objects.get_or_create(
        program_name="intake_wl_control"
    )  # name='inlaat peilhandhaving',, flow_type=Label.TYPE_IN, color='#440044', color_increment='#ff0000')

    labels[(-1, "initieel")], new = Label.objects.get_or_create(
        program_name="initial"
    )  # name='afstroming', flow_type=Label.TYPE_IN, color='#008800', color_increment='#ff0000')

    labels[(-1, "uitlaat1")], new = Label.objects.get_or_create(
        program_name="outtake1"
    )  # name='uitlaat 1', flow_type=Label.TYPE_OUT, color='#663399', color_increment='#ff0000')
    labels[(-1, "uitlaat2")], new = Label.objects.get_or_create(
        program_name="outtake2"
    )  # name='uitlaat 2', flow_type=Label.TYPE_OUT, color='#443399', color_increment='#ff0000')
    labels[(-1, "uitlaat3")], new = Label.objects.get_or_create(
        program_name="outtake3"
    )  # name='uitlaat 3', flow_type=Label.TYPE_OUT, color='#666699', color_increment='#ff0000')
    labels[(-1, "uitlaat4")], new = Label.objects.get_or_create(
        program_name="outtake4"
    )  # name='uitlaat 4', flow_type=Label.TYPE_OUT, color='#554499', color_increment='#ff0000')
    labels[(-1, "uitlaat5")], new = Label.objects.get_or_create(
        program_name="outtake5"
    )  # name='uitlaat 5', flow_type=Label.TYPE_OUT, color='#6633bb', color_increment='#ff0000')
    labels[(-1, "uitlaat6")], new = Label.objects.get_or_create(
        program_name="outtake6"
    )  # name='uitlaat 6', flow_type=Label.TYPE_OUT, color='#662288', color_increment='#ff0000')
    labels[(-1, "uitlaat peilhandhaving")], new = Label.objects.get_or_create(
        program_name="outtake_wl_control"
    )  # name='uitlaat peilhandhaving',  flow_type=Label.TYPE_OUT, color='#7744aa', color_increment='#ff0000')

    # lab, new = Label.objects.get_or_create(name='intrek', program_name='indraft')#, flow_type=Label.TYPE_OUT, color='#ff9911', color_increment='#ff0000')
    # lab, new = Label.objects.get_or_create(name='wegzijging', program_name='infiltration')#, flow_type=Label.TYPE_OUT, color='#444444', color_increment='#ff0000')
    # lab, new = Label.objects.get_or_create(name='verdamping', program_name='evaporation')#, flow_type=Label.TYPE_OUT, color='#0000ff', color_increment='#ff0000')
    # lab, new = Label.objects.get_or_create(name='sluitfout', program_name='sluice_error')#, flow_type=Label.TYPE_ERROR, color='#000000', color_increment='#000000')
    # lab, new = Label.objects.get_or_create(name='gemeten waterpeil', program_name='meas_waterlevel')# flow_type=Label.TYPE_OTHER, color='#0000ff', color_increment='#000000')
    # lab, new = Label.objects.get_or_create(program_name='calc_waterlevel')#name='berekend waterpeil', , flow_type=Label.TYPE_ERROR, color='#ff00ff', color_increment='#000000')
    # lab, new = Label.objects.get_or_create(program_name='initial')#name='initieel', , flow_type=Label.TYPE_ERROR, color='#222222', color_increment='#000000')
    # initieel nog invullen

    def get_float_or_default(sheet, rownr, colnr, default_value=None):
        if type(sheet.cell(rownr, colnr).value).__name__ in ["int", "float"]:
            return float(sheet.cell(rownr, colnr).value)
        else:
            return default_value

    for key, label in labels.items():
        rownr = key[0] + 16
        if key[0] >= 0 and (
            type(sheet.cell(key[0] + 16, 1).value).__name__ in ["str", "unicode"]
            or get_float_or_default(sheet, key[0] + 16, 1) is not None
        ):
            concentration, new = Concentration.objects.get_or_create(label=label, configuration=config)

            concentration.stof_lower_concentration = get_float_or_default(sheet, rownr, 3, 0)
            concentration.stof_increment = get_float_or_default(sheet, rownr, 4, 0)

            concentration.cl_concentration = get_float_or_default(sheet, rownr, 5, 0)

            concentration.p_lower_concentration = get_float_or_default(sheet, rownr, 7, 0)
            concentration.p_incremental = get_float_or_default(sheet, rownr, 8, 0)

            concentration.n_lower_concentration = get_float_or_default(sheet, rownr, 9)
            concentration.n_incremental = get_float_or_default(sheet, rownr, 10)

            concentration.so4_lower_concentration = get_float_or_default(sheet, rownr, 11)
            concentration.so4_incremental = get_float_or_default(sheet, rownr, 12)

            concentration.save()

    labels = dict([(key[1], label) for key, label in labels.items()])

    concentration, new = Concentration.objects.get_or_create(label=labels["initieel"], configuration=config)
    concentration.stof_lower_concentration = 0
    concentration.stof_increment = 0
    concentration.cl_concentration = get_float_or_default(sheet, 32, 3, 0)
    concentration.p_lower_concentration = 0
    concentration.p_incremental = 0
    concentration.save()

    if config_new:
        WaterbalanceTimeserie.objects.filter(configuration_references=config)
        # reference - waterlevel
        parameter = pars["reference_waterlevel_day"]
        if WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_references=config).count() == 0:
            wb_timeserie = WaterbalanceTimeserie.objects.create(
                parameter=parameter, name="%s: %s" % (config.__unicode__()[:30], parameter.name[:15])
            )
            config.references.add(wb_timeserie)
        else:
            wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_references=config)[0]
        save_timeserie_into_database(wb_timeserie, sheet, 76, 0, 3, stick_to_last_value=True)

        # reference - chloride
        parameter = pars["chloride_measurement"]
        if WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_references=config).count() == 0:
            wb_timeserie = WaterbalanceTimeserie.objects.create(
                parameter=parameter, name="%s: %s" % (config.__unicode__()[:30], parameter.name[:15])
            )
            config.references.add(wb_timeserie)
        else:
            wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_references=config)[0]
        save_timeserie_into_database(wb_timeserie, sheet, 76, 22, 23)

        # reference - chloride
        parameter = pars["chloride_measurement"]
        if WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_references=config).count() == 0:
            wb_timeserie = WaterbalanceTimeserie.objects.create(
                parameter=parameter, name="%s: %s" % (config.__unicode__()[:30], parameter.name[:15])
            )
            config.references.add(wb_timeserie)
        else:
            wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_references=config)[0]
        save_timeserie_into_database(wb_timeserie, sheet, 76, 24, 25)

    # results - todo
    if config.open_water:
        open_water = config.open_water
        new = False
    else:
        open_water = OpenWater()
        new = True

    ######################### OpenWater ##############################

    open_water.name = config.__unicode__()
    open_water.surface = sheet.cell(10, 3).value
    open_water.bottom_height = sheet.cell(11, 3).value  # is average depth
    open_water.init_water_level = sheet.cell(67, 3).value

    # precipitation
    parameter = pars["rainfall_day"]
    if WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_precipitation=config).count() == 0:
        wb_timeserie = WaterbalanceTimeserie.objects.create(
            parameter=parameter, name="%s: %s" % (config.__unicode__()[:30], parameter.name[:15])
        )
        open_water.precipitation = wb_timeserie
    else:
        wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_precipitation=config)[0]
    save_timeserie_into_database(wb_timeserie, sheet, 76, 0, 1)

    # evaporation
    parameter = pars["evaporation_day"]
    if WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_evaporation=config).count() == 0:
        wb_timeserie = WaterbalanceTimeserie.objects.create(
            parameter=parameter, name="%s: %s" % (config.__unicode__()[:30], parameter.name[:15])
        )
        open_water.evaporation = wb_timeserie
    else:
        wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, configuration_evaporation=config)[0]
    save_timeserie_into_database(wb_timeserie, sheet, 76, 0, 2)

    # sewer
    parameter = pars["sewer_day"]
    if WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_sewer=open_water).count() == 0:
        wb_timeserie = WaterbalanceTimeserie.objects.create(
            parameter=parameter, name="%s: %s" % (config.__unicode__()[:30], parameter.name[:15])
        )
        open_water.sewer = wb_timeserie
    else:
        wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_sewer=open_water)[0]
    save_timeserie_into_database(wb_timeserie, sheet, 76, 0, 9)

    # minimum_level
    array_with_values = [
        [1, 1, float(sheet.cell(66, 2).value)],
        [3, 15, float(sheet.cell(63, 2).value)],
        [5, 1, float(sheet.cell(64, 2).value)],
        [8, 15, float(sheet.cell(65, 2).value)],
        [10, 1, float(sheet.cell(66, 2).value)],
    ]
    parameter = pars["min_level"]
    if WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_min_level=open_water).count() == 0:
        wb_timeserie = WaterbalanceTimeserie.objects.create(
            parameter=parameter, name="%s: %s" % (open_water.__unicode__()[:30], parameter.name[:15])
        )
        open_water.minimum_level = wb_timeserie
    else:
        wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_min_level=open_water)[0]
    create_save_yearly_timeserie_into_database(wb_timeserie, array_with_values, stick_to_last_value=True)

    # maximum_level
    array_with_values = [
        [1, 1, float(sheet.cell(66, 4).value)],
        [3, 15, float(sheet.cell(63, 4).value)],
        [5, 1, float(sheet.cell(64, 4).value)],
        [8, 15, float(sheet.cell(65, 4).value)],
        [10, 1, float(sheet.cell(66, 4).value)],
    ]
    parameter = pars["max_level"]
    if WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_max_level=open_water).count() == 0:
        wb_timeserie = WaterbalanceTimeserie.objects.create(
            parameter=parameter, name="%s: %s" % (open_water.__unicode__()[:30], parameter.name[:15])
        )
        open_water.maximum_level = wb_timeserie
    else:
        wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_max_level=open_water)[0]
    create_save_yearly_timeserie_into_database(wb_timeserie, array_with_values)

    # target_level, wordt niet gebruikt, weg?

    # seepage
    array_with_values = [[1, 1, float(sheet.cell(36, 1).value)]]
    parameter = pars["seepage"]
    if WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_seepage=open_water).count() == 0:
        wb_timeserie = WaterbalanceTimeserie.objects.create(
            parameter=parameter, name="%s: %s" % (open_water.__unicode__()[:30], parameter.name[:15])
        )
        open_water.seepage = wb_timeserie
    else:
        wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_seepage=open_water)[0]
    create_save_yearly_timeserie_into_database(wb_timeserie, array_with_values)

    array_with_values = [[1, 1, float(sheet.cell(36, 1).value)]]
    parameter = pars["infiltration"]
    if WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_infiltration=open_water).count() == 0:
        wb_timeserie = WaterbalanceTimeserie.objects.create(
            parameter=parameter, name="%s: %s" % (open_water.__unicode__()[:30], parameter.name[:15])
        )
        open_water.infiltration = wb_timeserie
    else:
        wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, open_water_infiltration=open_water)[0]
    create_save_yearly_timeserie_into_database(wb_timeserie, array_with_values)

    open_water.save()

    config.open_water = open_water
    config.save()

    ######################### Buckets ##############################

    bucket_nr = 0
    for colnr in range(4, 12):
        if sheet.cell(34, colnr).value > 0 and (
            sheet.cell(34, colnr).value < sheet.cell(34, colnr + 1).value or sheet.cell(34, colnr + 1).value < 0
        ):
            bucket_nr = bucket_nr + 1

            if sheet.cell(34, colnr).value == sheet.cell(34, colnr - 1).value:
                # dubble bucket
                print "dubbel bucket: %s" % sheet.cell(35, colnr - 1).value
                col_upper = colnr - 1
                col_lower = colnr

                name = sheet.cell(35, col_upper).value

                if name.find("verhard") >= 0:
                    surface_type = Bucket.HARDENED_SURFACE
                elif name.find("gedraineerd") >= 0:
                    surface_type = Bucket.DRAINED_SURFACE
                else:
                    print 'WARNING: bucket type "%s"unknown, take drained' % name
                    surface_type = Bucket.DRAINED_SURFACE

            else:
                # single bucket
                print "single bucket: %s" % sheet.cell(35, colnr).value
                col_upper = colnr
                col_lower = colnr

                name = sheet.cell(35, col_upper).value

                if name.find("stedelijk") >= 0:
                    bucket.surface_type = Bucket.STEDELIJK_SURFACE
                elif name.find("ongedraineerd") >= 0:
                    bucket.surface_type = Bucket.UNDRAINED_SURFACE
                elif name.lower().find("verhard") >= 0:
                    bucket.surface_type = Bucket.HARDENED_SURFACE
                elif name.lower().find("landelijk") >= 0:
                    bucket.surface_type = Bucket.UNDRAINED_SURFACE
                else:
                    print 'WARNING: bucket type "%s" unknown, take undrained' % name
                    bucket.surface_type = Bucket.UNDRAINED_SURFACE

            if Bucket.objects.filter(open_water=open_water, name=name, surface_type=surface_type).count() > 0:
                bucket = Bucket.objects.filter(open_water=open_water, name=name, surface_type=surface_type)[0]
            else:
                bucket = Bucket()

            bucket.name = name
            bucket.surface_type = surface_type
            bucket.slug = sheet.cell(35, col_upper).value
            bucket.surface = 0
            if not sheet.cell(43, col_upper).value in ["", None]:
                bucket.surface = sheet.cell(43, col_upper).value
            else:
                bucket.surface = 0
                print "Warning: bucket surface veld is leeg"

            bucket.open_water = open_water

            # upper
            if bucket.surface_type == Bucket.HARDENED_SURFACE:
                bucket.crop_evaporation_factor = 1
                bucket.min_crop_evaporation_factor = 1
            else:
                bucket.crop_evaporation_factor = 1
                bucket.min_crop_evaporation_factor = 0.75

            bucket.upper_porosity = sheet.cell(38, col_upper).value
            bucket.upper_drainage_fraction = sheet.cell(36, col_upper).value
            bucket.upper_indraft_fraction = sheet.cell(37, col_upper).value
            bucket.upper_max_water_level = sheet.cell(39, col_upper).value
            bucket.upper_equi_water_level = 0
            if type(sheet.cell(41, col_upper).value) == type(1) or type(sheet.cell(41, col_upper).value) == type(1.0):
                bucket.upper_min_water_level = sheet.cell(41, col_upper).value
            else:
                bucket.upper_min_water_level = None

            bucket.upper_init_water_level = sheet.cell(42, col_upper).value

            # lower

            bucket.porosity = sheet.cell(38, col_lower).value
            bucket.drainage_fraction = sheet.cell(36, col_lower).value
            bucket.indraft_fraction = sheet.cell(37, col_lower).value
            bucket.max_water_level = sheet.cell(39, col_lower).value
            bucket.equi_water_level = 0

            if type(sheet.cell(41, col_lower).value) == type(1) or type(sheet.cell(41, col_lower).value) == type(1.0):
                bucket.min_water_level = sheet.cell(41, col_lower).value
            else:
                bucket.min_water_level = None

            bucket.init_water_level = sheet.cell(42, col_lower).value

            # bucket.seepage
            array_with_values = [[1, 1, float(sheet.cell(37 + bucket_nr, 1).value)]]
            parameter = pars["seepage_infiltration"]
            if WaterbalanceTimeserie.objects.filter(parameter=parameter, bucket_seepage=bucket).count() == 0:
                wb_timeserie = WaterbalanceTimeserie.objects.create(
                    parameter=parameter, name="%s: %s" % (bucket.__unicode__()[:30], parameter.name[:15])
                )
                bucket.seepage = wb_timeserie
            else:
                wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, bucket_seepage=bucket)[0]
            create_save_yearly_timeserie_into_database(wb_timeserie, array_with_values)

            bucket.save()
            # results

    ################# PUMPINGSTATIONS ################

    retrieve_intake_for_level_control(open_water, labels, sheet, pars)

    # uitlaat peilhandhaving
    if PumpingStation.objects.filter(open_water=open_water, name="uitlaat peilhandhaving").count() > 0:
        pumping_station = PumpingStation.objects.filter(open_water=open_water, name="uitlaat peilhandhaving")[0]
    else:
        pumping_station = PumpingStation()
        pumping_station.open_water = open_water
        pumping_station.name = "uitlaat peilhandhaving"
    pumping_station.into = False
    pumping_station.percentage = 100
    pumping_station.computed_level_control = True
    pumping_station.label = labels["uitlaat peilhandhaving"]
    if type(sheet.cell(70, 1).value) == type(1) or type(sheet.cell(70, 1).value) == type(1.0):
        pumping_station.max_discharge = sheet.cell(70, 1).value
    pumping_station.save()
    for colnr in range(4, 8):
        if (not sheet.cell(72, colnr).value == None) and len(str(sheet.cell(72, colnr).value)) > 0:
            name = "%s_%i" % (str(sheet.cell(72, colnr).value), colnr - 3)
            print "pomplijn voor %s op %d, %d met naam %s" % (pumping_station.__unicode__(), 72, colnr, name)
            if PumpLine.objects.filter(pumping_station=pumping_station, name=name):
                pump_line = PumpLine.objects.filter(pumping_station=pumping_station, name=name)[0]
            else:
                pump_line = PumpLine()
                pump_line.pumping_station = pumping_station
                pump_line.name = name

            parameter = pars["structure_discharge"]
            if WaterbalanceTimeserie.objects.filter(parameter=parameter, pump_line_timeserie=pump_line).count() == 0:
                wb_timeserie = WaterbalanceTimeserie.objects.create(
                    parameter=parameter, name="%s: %s" % (pump_line.__unicode__()[:30], parameter.name[:15])
                )
                pump_line.timeserie = wb_timeserie
            else:
                wb_timeserie = WaterbalanceTimeserie.objects.filter(parameter=parameter, pump_line_timeserie=pump_line)[
                    0
                ]
            save_timeserie_into_database(wb_timeserie, sheet, 76, 0, colnr)

            pump_line.save()

    # in- en uitlaten niet voor peilhandhaving
    inlaat_nr = 0
    uitlaat_nr = 0

    for row in range(23, 31):
        if sheet.cell(row, 1).value in [0] and sheet.cell(row, 2).value in [0]:
            pass
        elif sheet.cell(row, 1).value == "rekenhart":
            pass
        else:
            name = sheet.cell(row, 0).value
            if PumpingStation.objects.filter(open_water=open_water, name=name).count() > 0:
                pumping_station = PumpingStation.objects.filter(open_water=open_water, name=name)[0]
            else:
                pumping_station = PumpingStation()
                pumping_station.open_water = open_water
                pumping_station.name = name
            if row > 27:
                pumping_station.into = False
                uitlaat_nr += 1
                pumping_station.label = labels["uitlaat%i" % uitlaat_nr]

            else:
                pumping_station.into = True
                inlaat_nr += 1
                pumping_station.label = labels["inlaat%i" % inlaat_nr]

            pumping_station.percentage = 100
            pumping_station.computed_level_control = False
            pumping_station.max_discharge = None
            pumping_station.save()

            if PumpLine.objects.filter(pumping_station=pumping_station, name=name):
                pump_line = PumpLine.objects.filter(pumping_station=pumping_station, name=name)[0]
            else:
                pump_line = PumpLine()
                pump_line.pumping_station = pumping_station
                pump_line.name = pumping_station.name

            colnr = row - 13
            # as row in range(23, 31), colnr in range(10, 18)
            if (not sheet.cell(72, colnr).value == None) and len(str(sheet.cell(72, colnr).value)) > 0:
                name = "%s_%i" % (str(sheet.cell(72, colnr).value), colnr - 3)
                print "opgedrukte pomplijn voor %s op rij %d, kolom %d met naam %s" % (
                    pumping_station.__unicode__(),
                    72,
                    colnr,
                    name,
                )
                if PumpLine.objects.filter(pumping_station=pumping_station, name=name):
                    pump_line = PumpLine.objects.filter(pumping_station=pumping_station, name=name)[0]
                else:
                    pump_line = PumpLine()
                    pump_line.pumping_station = pumping_station
                    pump_line.name = name

                parameter = pars["structure_discharge"]
                if (
                    WaterbalanceTimeserie.objects.filter(parameter=parameter, pump_line_timeserie=pump_line).count()
                    == 0
                ):
                    wb_timeserie = WaterbalanceTimeserie.objects.create(
                        parameter=parameter, name="%s: %s" % (pump_line.__unicode__()[:30], parameter.name[:15])
                    )
                    pump_line.timeserie = wb_timeserie
                else:
                    wb_timeserie = WaterbalanceTimeserie.objects.filter(
                        parameter=parameter, pump_line_timeserie=pump_line
                    )[0]
                save_timeserie_into_database(wb_timeserie, sheet, 76, 0, colnr)

                pump_line.save()
            else:
                print "opgedrukte jaarlijkse tijdreeks voor %s met naam %s" % (pumping_station.__unicode__(), name)

                # discharge
                winter_value = 0
                summer_value = 1
                if not sheet.cell(row, 1).value in [0, "", None]:
                    winter_value = float(sheet.cell(row, 1).value)
                if not sheet.cell(row, 2).value in [0, "", None]:
                    summer_value = float(sheet.cell(row, 2).value)
                print row, winter_value, summer_value
                array_with_values = [[1, 1, winter_value], [4, 1, summer_value], [10, 1, winter_value]]
                parameter = pars["structure_discharge"]
                if (
                    WaterbalanceTimeserie.objects.filter(parameter=parameter, pump_line_timeserie=pump_line).count()
                    == 0
                ):
                    wb_timeserie = WaterbalanceTimeserie.objects.create(
                        parameter=parameter, name="%s: %s" % (pump_line.__unicode__()[:30], parameter.name[:15])
                    )
                    pump_line.timeserie = wb_timeserie
                else:
                    wb_timeserie = WaterbalanceTimeserie.objects.filter(
                        parameter=parameter, pump_line_timeserie=pump_line
                    )[0]
                create_save_yearly_timeserie_into_database(wb_timeserie, array_with_values)
                pump_line.save()