Пример #1
0
    def load_domain_dicts(cls, force=False, federal=True, region=True, district=True):
        print 'Loading domain dicts...'
        from ..compulink_admin.model import Region, District
        from csv import DictReader


        if (region and not federal) or (district and not region):
            print('Not consist params!')
            return

        db_session = DBSession()
        db_session.autoflush = False
        with transaction.manager:

            if ((db_session.query(FederalDistrict).count() > 0 and federal) or
               (db_session.query(Region).count() > 0 and region) or
               (db_session.query(District).count() > 0 and district)) and not force:
                print '     Domain dictionary already existings! Returning...'
                return

            with open(path.join(BASE_PATH, 'federal_districts.csv')) as fed_csv, \
                 open(path.join(BASE_PATH, 'regions.csv')) as reg_csv, \
                 open(path.join(BASE_PATH, 'districts.csv')) as dist_csv:

                fed_reader = DictReader(fed_csv)
                reg_reader = DictReader(reg_csv)
                dist_reader = DictReader(dist_csv)


                feds = {}
                if federal:
                    for fed_row in fed_reader:
                        federal_dist = FederalDistrict()
                        federal_dist.name = fed_row['name']
                        federal_dist.short_name = fed_row['short_name']
                        federal_dist.persist()
                        feds[fed_row['id']] = federal_dist


                regs = {}
                if region:
                    for reg_row in reg_reader:
                        region = Region()
                        region.name = reg_row['name']
                        region.short_name = reg_row['short_name']
                        region.region_code = reg_row['region_code']
                        region.persist()
                        regs[reg_row['id']] = region

                if district:
                    for dist_row in dist_reader:
                        district = District()
                        district.name = dist_row['name']
                        district.short_name = dist_row['short_name']
                        district.region = regs[dist_row['region_id']]

                        district.persist()


            db_session.flush()
Пример #2
0
    def load_rt_domain_dicts(cls, force=False):
        print 'Loading RT domain dicts...'
        from ..compulink_admin.model import Region
        from ..compulink_reporting.model import RtMacroDivision, RtBranch, RtBranchRegion
        from csv import DictReader

        db_session = DBSession()
        db_session.autoflush = False

        if (db_session.query(RtMacroDivision).count() > 0 or
            db_session.query(RtBranch).count() > 0 or
            db_session.query(RtBranchRegion).count() > 0
            ) and not force:
            print '     RT Domain dictionary already existings! Returning...'
            return

        with open(path.join(BASE_PATH, 'rt_macro_division.csv')) as macro_csv, \
            open(path.join(BASE_PATH, 'rt_branch.csv')) as branch_csv, \
            open(path.join(BASE_PATH, 'rt_branch_region.csv')) as branch_region_csv:

            macro_reader = DictReader(macro_csv)
            branch_reader = DictReader(branch_csv)
            branch_region_reader = DictReader(branch_region_csv)


            macros = {}
            branches = {}
            for macro_row in macro_reader:
                macro = RtMacroDivision()
                macro.name = macro_row['name']
                macro.persist()
                macros[macro_row['id']] = macro

            for branch_row in branch_reader:
                branch = RtBranch()
                branch.name = branch_row['name']
                branch.rt_macro_division = macros[branch_row['macro_division_id']]
                branch.persist()
                branches[branch_row['id']] = branch

            for br_reg_row in branch_region_reader:
                branch_reg = RtBranchRegion()
                branch_reg.rt_branch = branches[br_reg_row['rt_branch_id']]
                branch_reg.region = db_session.query(Region).filter(Region.region_code == br_reg_row['region_code']).one()
                branch_reg.persist()

        db_session.flush()
Пример #3
0
def init_calendar():
    print('Fill calendar...')

    db_session = DBSession()
    db_session.autoflush = False

    count = db_session.query(Calendar).count()
    if count != 0:
        print '     Calendar is not empty! Returning...'
        return

    start_date = date(2014, 1, 1)
    max_date = date(2025, 1, 1)

    active_date = start_date

    quarter_names = {
        1: u'1 кв.',
        2: u'2 кв.',
        3: u'3 кв.',
        4: u'4 кв.',
    }

    month_names = {
        1: u'Январь',
        2: u'Февраль',
        3: u'Март',
        4: u'Апрель',
        5: u'Май',
        6: u'Июнь',
        7: u'Июль',
        8: u'Август',
        9: u'Сентябрь',
        10: u'Октябрь',
        11: u'Ноябрь',
        12: u'Декабрь',
    }

    week_day_names = {
        1: u'Понедельник',
        2: u'Вторник',
        3: u'Среда',
        4: u'Четверг',
        5: u'Пятница',
        6: u'Суббота',
        7: u'Воскресенье',
    }

    week_day_short_names = {
        1: u'Пн',
        2: u'Вт',
        3: u'Ср',
        4: u'Чт',
        5: u'Пт',
        6: u'Сб',
        7: u'Вс',
    }

    relat_day = relativedelta.relativedelta(days=+1)

    while active_date < max_date:
        cal = Calendar()
        cal.id = active_date.year * 10000 + active_date.month * 100 + active_date.day
        cal.full_date = active_date
        cal.year_number = active_date.year
        cal.semester_number = 1 if active_date.month < 7 else 2
        cal.semester_name = u'1 полугодие'  if active_date.month<7 else u'2 полугодие'
        cal.quarter_number = (active_date.month-1)//3 + 1
        cal.quarter_name = quarter_names[cal.quarter_number]
        cal.month_number = active_date.month
        cal.month_name = month_names[active_date.month]
        cal.year_week_number = active_date.isocalendar()[1]
        cal.month_week_number = get_week_of_month(active_date)
        cal.month_decade_number = (active_date.day < 11) * 1 + \
                                  (11 <= active_date.day <= 20) * 2 + \
                                  (active_date.day > 20) * 3
        cal.year_day_number = active_date.timetuple().tm_yday
        cal.month_day_number = active_date.day
        cal.week_day_number = active_date.weekday() + 1
        cal.week_day_name = week_day_names[cal.week_day_number]
        cal.week_day_short_name = week_day_short_names[cal.week_day_number]
        cal.weekend = cal.week_day_number > 5

        cal.persist()
        active_date = active_date + relat_day

    db_session.flush()