Migrate Liefermengen
This commit is contained in:
@ -272,6 +272,30 @@ CREATE TABLE wine_attribute (
|
|||||||
CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid)
|
CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid)
|
||||||
) STRICT;
|
) STRICT;
|
||||||
|
|
||||||
|
CREATE TABLE area_commitment_type (
|
||||||
|
vtrgid TEXT NOT NULL CHECK (vtrgid LIKE sortid || attrid_1 || attrid_2 || disc),
|
||||||
|
sortid TEXT NOT NULL,
|
||||||
|
attrid_1 TEXT,
|
||||||
|
attrid_2 TEXT,
|
||||||
|
disc TEXT DEFAULT NULL CHECK (disc REGEXP '^[A-Z0-9]+$'),
|
||||||
|
|
||||||
|
min_kg_per_ha INTEGER,
|
||||||
|
max_kg_per_ha INTEGER,
|
||||||
|
penalty_amount REAL,
|
||||||
|
|
||||||
|
CONSTRAINT pk_area_commitment_type PRIMARY KEY (vtrgid),
|
||||||
|
CONSTRAINT sk_area_commitment_type_sort_attr UNIQUE (sortid, attrid_1, attrid_2, disc),
|
||||||
|
CONSTRAINT fk_area_commitment_type_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
||||||
|
ON UPDATE CASCADE
|
||||||
|
ON DELETE RESTRICT,
|
||||||
|
CONSTRAINT fk_area_commitment_type_wine_attribute FOREIGN KEY (attrid_1) REFERENCES wine_attribute (attrid)
|
||||||
|
ON UPDATE CASCADE
|
||||||
|
ON DELETE RESTRICT,
|
||||||
|
CONSTRAINT fk_area_commitment_type_wine_attribute FOREIGN KEY (attrid_2) REFERENCES wine_attribute (attrid)
|
||||||
|
ON UPDATE CASCADE
|
||||||
|
ON DELETE RESTRICT
|
||||||
|
) STRICT;
|
||||||
|
|
||||||
CREATE TABLE wine_cultivation (
|
CREATE TABLE wine_cultivation (
|
||||||
cultid TEXT NOT NULL CHECK (cultid REGEXP '^[A-Z]+$'),
|
cultid TEXT NOT NULL CHECK (cultid REGEXP '^[A-Z]+$'),
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
@ -371,7 +395,7 @@ CREATE TABLE area_commitment (
|
|||||||
fbnr INTEGER NOT NULL,
|
fbnr INTEGER NOT NULL,
|
||||||
mgnr INTEGER NOT NULL,
|
mgnr INTEGER NOT NULL,
|
||||||
|
|
||||||
sortid TEXT NOT NULL,
|
vtrgid TEXT NOT NULL,
|
||||||
cultid TEXT NOT NULL,
|
cultid TEXT NOT NULL,
|
||||||
area INTEGER NOT NULL,
|
area INTEGER NOT NULL,
|
||||||
|
|
||||||
@ -390,7 +414,7 @@ CREATE TABLE area_commitment (
|
|||||||
CONSTRAINT fk_are_commitment_member FOREIGN KEY (mgnr) REFERENCES member (mgnr)
|
CONSTRAINT fk_are_commitment_member FOREIGN KEY (mgnr) REFERENCES member (mgnr)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT,
|
ON DELETE RESTRICT,
|
||||||
CONSTRAINT fk_area_commitment_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
CONSTRAINT fk_area_commitment_area_commitment_type FOREIGN KEY (vtrgid) REFERENCES area_commitment_type (vtrgid)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT,
|
ON DELETE RESTRICT,
|
||||||
CONSTRAINT fk_area_commitment_wine_cultivation FOREIGN KEY (cultid) REFERENCES wine_cultivation (cultid)
|
CONSTRAINT fk_area_commitment_wine_cultivation FOREIGN KEY (cultid) REFERENCES wine_cultivation (cultid)
|
||||||
@ -404,19 +428,6 @@ CREATE TABLE area_commitment (
|
|||||||
ON DELETE RESTRICT
|
ON DELETE RESTRICT
|
||||||
) STRICT;
|
) STRICT;
|
||||||
|
|
||||||
CREATE TABLE area_commitment_attribute (
|
|
||||||
fbnr INTEGER NOT NULL,
|
|
||||||
attrid TEXT NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT pk_area_commitment_attribute PRIMARY KEY (fbnr, attrid),
|
|
||||||
CONSTRAINT fk_area_commitment_attribute_area_commitment FOREIGN KEY (fbnr) REFERENCES area_commitment (fbnr)
|
|
||||||
ON UPDATE CASCADE
|
|
||||||
ON DELETE CASCADE,
|
|
||||||
CONSTRAINT fk_area_commitment_attribute_wine_attribute FOREIGN KEY (attrid) REFERENCES wine_attribute (attrid)
|
|
||||||
ON UPDATE CASCADE
|
|
||||||
ON DELETE RESTRICT
|
|
||||||
) STRICT;
|
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
@ -634,7 +645,7 @@ CREATE TABLE payment_variant (
|
|||||||
CONSTRAINT pk_payment PRIMARY KEY (year, avnr)
|
CONSTRAINT pk_payment PRIMARY KEY (year, avnr)
|
||||||
) STRICT;
|
) STRICT;
|
||||||
|
|
||||||
CREATE TABLE payment_delivery (
|
CREATE TABLE payment_delivery_part (
|
||||||
year INTEGER NOT NULL,
|
year INTEGER NOT NULL,
|
||||||
did INTEGER NOT NULL,
|
did INTEGER NOT NULL,
|
||||||
dpnr INTEGER NOT NULL,
|
dpnr INTEGER NOT NULL,
|
||||||
@ -665,33 +676,33 @@ CREATE TABLE payment_delivery (
|
|||||||
|
|
||||||
amount INTEGER NOT NULL,
|
amount INTEGER NOT NULL,
|
||||||
|
|
||||||
CONSTRAINT pk_payment_delivery PRIMARY KEY (year, did, dpnr, avnr),
|
CONSTRAINT pk_payment_delivery_part PRIMARY KEY (year, did, dpnr, avnr),
|
||||||
CONSTRAINT fk_payment_delivery_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr)
|
CONSTRAINT fk_payment_delivery_part_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE CASCADE,
|
ON DELETE CASCADE,
|
||||||
CONSTRAINT fk_payment_delivery_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr)
|
CONSTRAINT fk_payment_delivery_part_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE CASCADE
|
ON DELETE CASCADE
|
||||||
) STRICT;
|
) STRICT;
|
||||||
|
|
||||||
CREATE TRIGGER t_payment_delivery_i
|
CREATE TRIGGER t_payment_delivery_part_i
|
||||||
AFTER INSERT ON payment_delivery FOR EACH ROW
|
AFTER INSERT ON payment_delivery_part FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO payment_member (year, avnr, mgnr, amount)
|
INSERT INTO payment_member (year, avnr, mgnr, amount)
|
||||||
VALUES (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)), NEW.amount)
|
VALUES (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)), NEW.amount)
|
||||||
ON CONFLICT DO UPDATE SET amount = amount + NEW.amount;
|
ON CONFLICT DO UPDATE SET amount = amount + NEW.amount;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
CREATE TRIGGER t_payment_delivery_u
|
CREATE TRIGGER t_payment_delivery_part_u
|
||||||
AFTER UPDATE OF amount ON payment_delivery FOR EACH ROW
|
AFTER UPDATE OF amount ON payment_delivery_part FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE payment_member
|
UPDATE payment_member
|
||||||
SET amount = amount - OLD.amount + NEW.amount
|
SET amount = amount - OLD.amount + NEW.amount
|
||||||
WHERE (year, avnr, mgnr) = (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)));
|
WHERE (year, avnr, mgnr) = (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)));
|
||||||
END;
|
END;
|
||||||
|
|
||||||
CREATE TRIGGER t_payment_delivery_d
|
CREATE TRIGGER t_payment_delivery_part_d
|
||||||
AFTER DELETE ON payment_delivery FOR EACH ROW
|
AFTER DELETE ON payment_delivery_part FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE payment_member
|
UPDATE payment_member
|
||||||
SET amount = amount - OLD.amount
|
SET amount = amount - OLD.amount
|
||||||
|
@ -99,26 +99,6 @@ END;
|
|||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
CREATE TRIGGER t_area_commitment_attribute_i_mtime_area_commitment
|
|
||||||
AFTER INSERT ON area_commitment_attribute FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr;
|
|
||||||
END;
|
|
||||||
|
|
||||||
CREATE TRIGGER t_area_commitment_attribute_u_mtime_area_commitment
|
|
||||||
AFTER UPDATE ON area_commitment_attribute FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = OLD.fbnr OR fbnr = NEW.fbnr;
|
|
||||||
END;
|
|
||||||
|
|
||||||
CREATE TRIGGER t_area_commitment_attribute_d_mtime_area_commitment
|
|
||||||
AFTER DELETE ON area_commitment_attribute FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = OLD.fbnr;
|
|
||||||
END;
|
|
||||||
|
|
||||||
----------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TRIGGER t_delivery_i_ctime
|
CREATE TRIGGER t_delivery_i_ctime
|
||||||
AFTER INSERT ON delivery FOR EACH ROW
|
AFTER INSERT ON delivery FOR EACH ROW
|
||||||
WHEN NEW.ctime != UNIXEPOCH()
|
WHEN NEW.ctime != UNIXEPOCH()
|
||||||
@ -267,20 +247,20 @@ END;
|
|||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
CREATE TRIGGER t_payment_delivery_i_mtime_payment_variant
|
CREATE TRIGGER t_payment_delivery_part_i_mtime_payment_variant
|
||||||
AFTER INSERT ON payment_delivery FOR EACH ROW
|
AFTER INSERT ON payment_delivery_part FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (NEW.year, NEW.avnr);
|
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (NEW.year, NEW.avnr);
|
||||||
END;
|
END;
|
||||||
|
|
||||||
CREATE TRIGGER t_payment_delivery_u_mtime_payment_variant
|
CREATE TRIGGER t_payment_delivery_part_u_mtime_payment_variant
|
||||||
AFTER UPDATE ON payment_delivery FOR EACH ROW
|
AFTER UPDATE ON payment_delivery_part FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr) OR (year, avnr) = (NEW.year, NEW.avnr);
|
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr) OR (year, avnr) = (NEW.year, NEW.avnr);
|
||||||
END;
|
END;
|
||||||
|
|
||||||
CREATE TRIGGER t_payment_delivery_d_mtime_payment_variant
|
CREATE TRIGGER t_payment_delivery_part_d_mtime_payment_variant
|
||||||
AFTER DELETE ON payment_delivery FOR EACH ROW
|
AFTER DELETE ON payment_delivery_part FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr);
|
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr);
|
||||||
END;
|
END;
|
||||||
|
@ -13,9 +13,9 @@ import utils
|
|||||||
DIR: str
|
DIR: str
|
||||||
|
|
||||||
TABLES = ['client_parameter', 'branch', 'wb_gl', 'wb_kg', 'wb_rd', 'wine_attribute', 'wine_cultivation',
|
TABLES = ['client_parameter', 'branch', 'wb_gl', 'wb_kg', 'wb_rd', 'wine_attribute', 'wine_cultivation',
|
||||||
'member', 'member_billing_address', 'member_telephone_number', 'area_commitment', 'area_commitment_attribute',
|
'area_commitment_type', 'member', 'member_billing_address', 'member_telephone_number', 'area_commitment',
|
||||||
'season', 'modifier', 'delivery', 'delivery_part', 'delivery_part_attribute', 'delivery_part_modifier',
|
'season', 'modifier', 'delivery', 'delivery_part', 'delivery_part_attribute', 'delivery_part_modifier',
|
||||||
'payment_variant', 'payment_delivery']
|
'payment_variant', 'payment_delivery_part']
|
||||||
|
|
||||||
|
|
||||||
def get_sql_files() -> List[str]:
|
def get_sql_files() -> List[str]:
|
||||||
|
@ -608,6 +608,27 @@ def migrate_cultivations(in_dir: str, out_dir: str) -> None:
|
|||||||
f.row(cultid, name)
|
f.row(cultid, name)
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_area_commitment_types(in_dir: str, out_dir: str) -> None:
|
||||||
|
with utils.csv_open(f'{out_dir}/area_commitment_type.csv') as f:
|
||||||
|
f.header('vtrgid', 'sortid', 'attrid_1', 'attrid_2', 'disc',
|
||||||
|
'min_kg_per_ha', 'max_kg_per_ha', 'penalty_amount')
|
||||||
|
for t in utils.csv_parse_dict(f'{in_dir}/TLiefermengen.csv'):
|
||||||
|
sortid: str = t['SNR']
|
||||||
|
if not sortid or sortid == 'SV':
|
||||||
|
continue
|
||||||
|
menge = int(t['ErwarteteLiefermengeProHa'])
|
||||||
|
f.row(sortid + (t['SANR'] or ''), sortid[:2], t['SANR'] or sortid[2:] or None, None, None,
|
||||||
|
menge, menge, None)
|
||||||
|
bio = []
|
||||||
|
if WG == 'MATZEN':
|
||||||
|
bio = ['GV', 'ZW', 'MT']
|
||||||
|
f.row('BM', 'BM', None, None, None, 5000, 5000, None)
|
||||||
|
elif WG == 'GWK':
|
||||||
|
bio = ['GV', 'ZW', 'WR', 'MT', 'RR', 'WB', 'CH', 'MU']
|
||||||
|
for sortid in bio:
|
||||||
|
f.row(f'{sortid}B', sortid, 'B', None, None, None, None, None)
|
||||||
|
|
||||||
|
|
||||||
def normalize_name(family_name: str, given_name: str) -> Tuple[Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]]:
|
def normalize_name(family_name: str, given_name: str) -> Tuple[Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]]:
|
||||||
letters = string.ascii_letters + 'äöüßÄÖÜẞ-'
|
letters = string.ascii_letters + 'äöüßÄÖÜẞ-'
|
||||||
double_names = ['eva maria', 'maria theresia']
|
double_names = ['eva maria', 'maria theresia']
|
||||||
@ -1148,11 +1169,9 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
|||||||
new_reeds: Dict[Tuple[int, int], int] = {}
|
new_reeds: Dict[Tuple[int, int], int] = {}
|
||||||
|
|
||||||
with utils.csv_open(f'{out_dir}/area_commitment.csv') as f_fb, \
|
with utils.csv_open(f'{out_dir}/area_commitment.csv') as f_fb, \
|
||||||
utils.csv_open(f'{out_dir}/area_commitment_attribute.csv') as f_attr, \
|
|
||||||
utils.csv_open(f'{out_dir}/wb_rd.csv', 'a+') as f_rd:
|
utils.csv_open(f'{out_dir}/wb_rd.csv', 'a+') as f_rd:
|
||||||
f_fb.header('fbnr', 'mgnr', 'sortid', 'cultid', 'area', 'kgnr', 'gstnr', 'rdnr',
|
f_fb.header('fbnr', 'mgnr', 'vtrgid', 'cultid', 'area', 'kgnr', 'gstnr', 'rdnr',
|
||||||
'year_from', 'year_to', 'comment')
|
'year_from', 'year_to', 'comment')
|
||||||
f_attr.header('fbnr', 'attrid')
|
|
||||||
|
|
||||||
for fb in utils.csv_parse_dict(f'{in_dir}/TFlaechenbindungen.csv'):
|
for fb in utils.csv_parse_dict(f'{in_dir}/TFlaechenbindungen.csv'):
|
||||||
if (fb['Von'] is None and fb['Bis'] is None) or fb['GNR'] is None:
|
if (fb['Von'] is None and fb['Bis'] is None) or fb['GNR'] is None:
|
||||||
@ -1201,7 +1220,6 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
|||||||
if WG == 'MATZEN':
|
if WG == 'MATZEN':
|
||||||
gstnrs = parse_gstnrs(parz, kgnr, fb['MGNR'])
|
gstnrs = parse_gstnrs(parz, kgnr, fb['MGNR'])
|
||||||
else:
|
else:
|
||||||
# TODO GWK GstNrs
|
|
||||||
gstnrs = []
|
gstnrs = []
|
||||||
comment, gstnr = None, None
|
comment, gstnr = None, None
|
||||||
if parz is None or parz == '0000':
|
if parz is None or parz == '0000':
|
||||||
@ -1209,17 +1227,15 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
|||||||
invalid(mgnr, 'GstNr.', f'{lookup_kg_name(kgnr)} {kgnr or 0:05}-{parz}')
|
invalid(mgnr, 'GstNr.', f'{lookup_kg_name(kgnr)} {kgnr or 0:05}-{parz}')
|
||||||
gstnrs = []
|
gstnrs = []
|
||||||
gstnr = '-'
|
gstnr = '-'
|
||||||
if len(gstnrs) == 0:
|
if WG == 'MATZEN' and len(gstnrs) == 0:
|
||||||
comment = f'KG {kgnr or 0:05}: {parz}'
|
comment = f'KG {kgnr or 0:05}: {parz}'
|
||||||
gstnr = format_gstnr(gstnrs) or gstnr or parz
|
gstnr = format_gstnr(gstnrs) or gstnr or parz
|
||||||
if parz != gstnr.replace('+', '/'):
|
if parz != gstnr.replace('+', '/'):
|
||||||
convert(mgnr, f'GstNr. ({fbnr})', parz, gstnr)
|
convert(mgnr, f'GstNr. ({fbnr})', parz, gstnr)
|
||||||
|
|
||||||
to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
|
to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
|
||||||
f_fb.row(fbnr, mgnr, fb['SNR'], CULTIVATION_MAP[fb['BANR'] or 1], area,
|
f_fb.row(fbnr, mgnr, fb['SNR'] + (fb['SANR'] or ''), CULTIVATION_MAP[fb['BANR'] or 1], area,
|
||||||
kgnr, gstnr, rdnr, fb['Von'], to, comment)
|
kgnr, gstnr, rdnr, fb['Von'], to, comment)
|
||||||
if fb['SANR']:
|
|
||||||
f_attr.row(fbnr, fb['SANR'])
|
|
||||||
|
|
||||||
|
|
||||||
def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, List[int], datetime.date]]:
|
def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, List[int], datetime.date]]:
|
||||||
@ -1599,7 +1615,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None:
|
|||||||
prec = pow(10, WGMASTER_PRECISION)
|
prec = pow(10, WGMASTER_PRECISION)
|
||||||
return round(p1 * prec), round(p2 * prec), round(p3 * prec)
|
return round(p1 * prec), round(p2 * prec), round(p3 * prec)
|
||||||
|
|
||||||
with utils.csv_open(f'{out_dir}/payment_delivery.csv') as f_del_pay:
|
with utils.csv_open(f'{out_dir}/payment_delivery_part.csv') as f_del_pay:
|
||||||
f_del_pay.header('year', 'did', 'dpnr', 'avnr', 'bucket_1', 'bucket_2', 'bucket_3', 'amount')
|
f_del_pay.header('year', 'did', 'dpnr', 'avnr', 'bucket_1', 'bucket_2', 'bucket_3', 'amount')
|
||||||
deliveries = {d['LINR']: d for d in utils.csv_parse_dict(f'{in_dir}/TLieferungen.csv')}
|
deliveries = {d['LINR']: d for d in utils.csv_parse_dict(f'{in_dir}/TLieferungen.csv')}
|
||||||
for linr, (y, did, dpnr) in DELIVERY_MAP.items():
|
for linr, (y, did, dpnr) in DELIVERY_MAP.items():
|
||||||
@ -1704,6 +1720,7 @@ def main() -> None:
|
|||||||
migrate_reeds(args.in_dir, args.out_dir)
|
migrate_reeds(args.in_dir, args.out_dir)
|
||||||
migrate_attributes(args.in_dir, args.out_dir)
|
migrate_attributes(args.in_dir, args.out_dir)
|
||||||
migrate_cultivations(args.in_dir, args.out_dir)
|
migrate_cultivations(args.in_dir, args.out_dir)
|
||||||
|
migrate_area_commitment_types(args.in_dir, args.out_dir)
|
||||||
migrate_members(args.in_dir, args.out_dir)
|
migrate_members(args.in_dir, args.out_dir)
|
||||||
migrate_area_commitments(args.in_dir, args.out_dir)
|
migrate_area_commitments(args.in_dir, args.out_dir)
|
||||||
migrate_deliveries(args.in_dir, args.out_dir)
|
migrate_deliveries(args.in_dir, args.out_dir)
|
||||||
|
Reference in New Issue
Block a user