573 def migrate_individual_memdata(members_batch_transaction,
576 mmth_uname_also_ody_mem_accnum,
579 _mmth_accnum_to_ody_userid_ref_csv_writer,
580 _mmth_repeating_transfers_outliers,
581 forceremain_update_list,
582 cusurveymaster_surveyid_map,
583 money_desktop_credit_card_type18_flag):
584 """Migrate member data tables of individual member""" 585 cu_lower = _cu.lower()
589 memacct_balance_attempt,
590 member_acct_balance_stamp) = cuuser_main_handler(
591 members_batch_transaction,
593 mmth_uname_also_ody_mem_accnum,
595 member_data[
"cuusers"],
596 member_data[
"cuquestselect"],
597 forceremain_update_list,
603 members_batch_transaction,
605 member_data[
"cualertcheck"],
606 member_data[
"cualertbal"],
607 member_data[
"cualertloan"],
608 member_data[
"cualerttrans"],
613 mmth_tbls_no_schema_change = [
617 for mmth_key
in mmth_tbls_no_schema_change:
618 mmth_data_nsc = member_data[mmth_key]
620 if mmth_key ==
"holds":
621 ody_table_name =
"{}{}".format(
624 ody_table_name = mmth_key
626 members_batch_transaction(
629 collection=mmth_data_nsc
639 tbl_cuadmeco =
"cuadmeco" 640 tbl_cuadmeco_mmth_data = member_data[tbl_cuadmeco]
642 if type(tbl_cuadmeco_mmth_data) == dict:
643 for mmth_msg_id, cuadmeco_message_records
in\
644 tbl_cuadmeco_mmth_data.items():
645 members_batch_transaction.cur.execute(
646 "select nextval('cuadmeco_messageid_seq')")
647 next_ody_message_id = members_batch_transaction.cur.fetchone()[0]
648 this_message_thread_collection = []
649 for ind, rec
in enumerate(cuadmeco_message_records):
652 rec[
"messageid"] = next_ody_message_id
658 rec[
"parentid"] = next_ody_message_id
660 rec[
"user_id"] = user_id
661 del rec[
"accountnumber"]
662 rec[
"admin"] = cu_lower
663 this_message_thread_collection.append(rec)
664 members_batch_transaction(
667 collection=this_message_thread_collection
670 for cusurveysays_rec
in member_data[
"cusurveysays"]:
671 assert "surveyid" in cusurveysays_rec,
"cusurveysays: missing surveyid" 673 if cusurveysays_rec[
"surveyid"].strip() \
674 not in cusurveymaster_surveyid_map:
675 LOGGER.warning(
"Invalid surveyid found: {}".format(
676 cusurveysays_rec[
"surveyid"].strip()))
679 cusurveysays_rec[
"surveyid"] = cusurveymaster_surveyid_map[
680 cusurveysays_rec[
"surveyid"].strip()]
681 assert (cusurveysays_rec[
"accountnumber"].strip() ==
682 mmth_uname_also_ody_mem_accnum)
683 cusurveysays_rec[
"user_id"] = user_id
684 members_batch_transaction(
687 list(cusurveysays_rec.keys()),
688 list(cusurveysays_rec.values())
691 mmth_tbls_userid_relation = [
"cucmsresponse",
"userlogins"]
693 for mmth_key
in mmth_tbls_userid_relation:
694 mmth_data_with_userid = member_data[mmth_key]
696 if mmth_key ==
"userlogins":
697 ody_table_name =
"{}{}".format(
700 ody_table_name = mmth_key
702 for mmth_rec
in mmth_data_with_userid:
703 assert (mmth_rec[
"accountnumber"].strip() ==
704 mmth_uname_also_ody_mem_accnum)
705 mmth_rec[
"user_id"] = user_id
707 if mmth_key ==
"userlogins":
708 del mmth_rec[
"accountnumber"]
709 del mmth_rec[
"userloginid"]
710 mmth_rec[
"user_name"] = ody_uname
712 members_batch_transaction(
715 collection=mmth_data_with_userid
723 cu_useraccounts_cols = [
724 "user_id",
"accountnumber",
725 "accounttype",
"certnumber",
726 "recordtype",
"display_name",
740 cuuseraccounts_rec_default_crossaccts = [
741 False,
False,
True,
False,
False,
False, 0]
743 culivetx_records_for_crossaccts = member_data[
"culivetx_x"]
746 for mmth_culivetx_x
in culivetx_records_for_crossaccts:
747 del mmth_culivetx_x[
"id"]
748 del mmth_culivetx_x[
"cu"]
750 acc_type_x = get_strip_value_dict(
"accounttype", mmth_culivetx_x)
751 deposit_type_x = get_strip_value_dict(
"deposittype", mmth_culivetx_x)
752 accnum_x = get_strip_value_dict(
"accountnumber", mmth_culivetx_x)
753 tomember_x = get_strip_value_dict(
"tomember", mmth_culivetx_x)
754 description_x = get_strip_value_dict(
"description", mmth_culivetx_x)
756 useraccounts_rec_from_culivetx = []
760 useraccounts_rec_from_culivetx.append(user_id)
762 useraccounts_rec_from_culivetx.append(accnum_x)
764 useraccounts_rec_from_culivetx.append(
"{}#{}".format(
765 acc_type_x, tomember_x))
767 useraccounts_rec_from_culivetx.append(0)
769 if deposit_type_x.upper()
in [
'S',
'Y',
'N',
'C']:
770 useraccounts_rec_from_culivetx.append(
"T")
772 useraccounts_rec_from_culivetx.append(
"P")
774 useraccounts_rec_from_culivetx.append(description_x)
776 useraccounts_rec_from_culivetx.extend(
777 cuuseraccounts_rec_default_crossaccts)
780 members_batch_transaction(
782 "{}useraccounts".format(cu_lower),
783 cu_useraccounts_cols,
784 useraccounts_rec_from_culivetx
787 members_batch_transaction(
789 "{}crossaccounts".format(cu_lower),
790 collection=culivetx_records_for_crossaccts
795 cu_useraccounts_cols.append(
"display_qty")
796 cu_useraccounts_cols.append(
"display_qty_type")
808 cuuseraccounts_rec_default_ln_bal = [
809 None,
True,
True,
True,
True,
True,
True, 0, 30,
"D"]
813 account_balance_coll = member_data[
"accountbalance"]
814 for accbal_rec
in account_balance_coll:
815 acc_type = get_strip_value_dict(
"accounttype", accbal_rec)
816 deposit_type = get_strip_value_dict(
"deposittype", accbal_rec)
817 accbal_accnum = get_strip_value_dict(
"accountnumber", accbal_rec)
818 accbal_certnum = get_strip_value_dict(
"certnumber", accbal_rec)
820 assert acc_type
is not None 821 assert accbal_accnum
is not None 822 assert accbal_accnum == mmth_uname_also_ody_mem_accnum
826 if deposit_type.upper()
in [
'Y',
'N',
'S']:
829 accbal_rec[
"interestrate"] =
None 830 accbal_rec[
"maturitydate"] =
None 831 accbal_rec[
"misc1"] =
None 832 accbal_rec[
"regdcount"] =
None 833 accbal_rec[
"may_deposit"] = may_deposit
834 accbal_rec[
"may_withdraw"] = may_withdraw
835 accbal_rec[
"balance_stamp"] = member_acct_balance_stamp
836 accbal_rec[
"history_stamp"] = member_acct_balance_stamp
837 accbal_rec[
"balance_attempt"] = memacct_balance_attempt
838 accbal_rec[
"history_attempt"] = memacct_balance_attempt
840 useraccounts_rec_from_accbal = []
844 useraccounts_rec_from_accbal.append(user_id)
846 useraccounts_rec_from_accbal.append(accbal_accnum)
848 useraccounts_rec_from_accbal.append(acc_type)
850 useraccounts_rec_from_accbal.append(accbal_certnum)
852 useraccounts_rec_from_accbal.append(
"D")
853 useraccounts_rec_from_accbal.extend(cuuseraccounts_rec_default_ln_bal)
856 members_batch_transaction(
858 "{}useraccounts".format(cu_lower),
859 cu_useraccounts_cols,
860 useraccounts_rec_from_accbal
865 prepare_money_desktop_xref(_cu,
867 mmth_uname_also_ody_mem_accnum,
868 _mmth_accnum_to_ody_userid_ref_csv_writer,
873 members_batch_transaction(
875 "{}accountbalance".format(cu_lower),
876 collection=account_balance_coll
881 loan_balance_coll = member_data[
"loanbalance"]
882 for lnbal_rec
in loan_balance_coll:
883 lnbal_accnum = get_strip_value_dict(
"accountnumber",
885 lnbal_lnnum = get_strip_value_dict(
"loannumber",
888 assert lnbal_accnum
is not None 889 assert lnbal_accnum == mmth_uname_also_ody_mem_accnum
891 credit_limit = get_strip_value_dict(
"creditlimit", lnbal_rec)
892 lnbal_rec[
"payoff"] = get_strip_value_dict(
893 "payoff", lnbal_rec, default=0)
894 lnbal_rec[
"currentdue"] = 0
896 lnbal_rec[
"misc1"] = get_strip_value_dict(
897 "misc1", lnbal_rec, default=
None)
899 lnbal_rec[
"cbtype"] = get_strip_value_dict(
900 "type", lnbal_rec, pop=
True)
902 lnbal_rec[
"balance_stamp"] = member_acct_balance_stamp
903 lnbal_rec[
"history_stamp"] = member_acct_balance_stamp
904 lnbal_rec[
"balance_attempt"] = memacct_balance_attempt
905 lnbal_rec[
"history_attempt"] = memacct_balance_attempt
907 if float(credit_limit) > 0:
908 lnbal_rec[
"may_addon"] =
True 910 lnbal_rec[
"may_addon"] =
False 912 lnbal_rec[
"may_payment"] =
True 917 lnbal_rec[
"unpaidinterest"] = get_strip_value_dict(
918 "unpaidinterest", lnbal_rec, default=
None)
920 lnbal_rec[
"frequencyperyear"] = get_strip_value_dict(
921 "frequencyperyear", lnbal_rec, default=
None)
923 lnbal_rec[
"originalamount"] = get_strip_value_dict(
924 "originalamount", lnbal_rec, default=
None)
926 lnbal_rec[
"originaldate"] = get_strip_value_dict(
927 "originaldate", lnbal_rec, default=
None)
929 lnbal_rec[
"term"] = get_strip_value_dict(
930 "term", lnbal_rec, default=
None)
932 lnbal_rec[
"creditdisability"] = get_strip_value_dict(
933 "cdi", lnbal_rec, pop=
True, default=
None)
935 lnbal_rec[
"creditlife"] = get_strip_value_dict(
936 "cli", lnbal_rec, pop=
True, default=
None)
939 useraccounts_rec_from_lnbal = []
943 useraccounts_rec_from_lnbal.append(user_id)
945 useraccounts_rec_from_lnbal.append(lnbal_accnum)
947 useraccounts_rec_from_lnbal.append(lnbal_lnnum)
949 useraccounts_rec_from_lnbal.append(0)
951 useraccounts_rec_from_lnbal.append(
"L")
952 useraccounts_rec_from_lnbal.extend(cuuseraccounts_rec_default_ln_bal)
955 members_batch_transaction(
957 "{}useraccounts".format(cu_lower),
958 cu_useraccounts_cols,
959 useraccounts_rec_from_lnbal
964 prepare_money_desktop_xref(_cu,
966 mmth_uname_also_ody_mem_accnum,
967 _mmth_accnum_to_ody_userid_ref_csv_writer,
970 money_desktop_credit_card_type18_flag)
973 members_batch_transaction(
975 "{}loanbalance".format(cu_lower),
976 collection=loan_balance_coll
980 curepeattx_mammoth_records = member_data[
"curepeattx"]
981 for mmth_curepeattx_rec
in curepeattx_mammoth_records:
982 mmth_curepeattx_rec_copy = deepcopy(mmth_curepeattx_rec)
984 del mmth_curepeattx_rec[
"txid"]
986 curepeattx_interval = get_strip_value_dict(
992 mmth_curepeattx_rec[
"repeating_parameters"] = get_valid_json({
993 "interval": SCHEDULE_INTERVAL_MAPPING[curepeattx_interval]})
995 mmth_curepeattx_rec[
"user_id"] = user_id
997 mmth_curepeattx_rec[
"interval_count"] = get_strip_value_dict(
1003 mmth_curepeattx_rec[
"next_trigger_date"] = get_strip_value_dict(
1005 mmth_curepeattx_rec,
1009 mmth_curepeattx_rec[
"end_date"] = get_strip_value_dict(
1011 mmth_curepeattx_rec,
1015 curepeattx_startdate = get_strip_value_dict(
1017 mmth_curepeattx_rec,
1021 mmth_curepeattx_rec[
"start_date"] = curepeattx_startdate
1022 mmth_curepeattx_rec[
"create_date"] = curepeattx_startdate
1023 mmth_curepeattx_rec[
"approved_date"] = curepeattx_startdate
1024 mmth_curepeattx_rec[
"last_edit_date"] = curepeattx_startdate
1026 mmth_curepeattx_rec[
"approved_by"] = user_id
1027 mmth_curepeattx_rec[
"last_edit_by"] = user_id
1028 mmth_curepeattx_rec[
"approved_status"] = 10
1030 mmth_curepeattx_rec[
"failure_count"] = 0
1031 mmth_curepeattx_rec[
"feature_code"] =
"TRN" 1034 curepeattx_transactioncode = get_strip_value_dict(
1036 mmth_curepeattx_rec,
1040 curepeattx_fromsuffix = get_strip_value_dict(
1042 mmth_curepeattx_rec,
1045 curepeattx_tosuffix = get_strip_value_dict(
1047 mmth_curepeattx_rec,
1050 curepeattx_accountnumber = get_strip_value_dict(
1052 mmth_curepeattx_rec,
1056 curepeattx_tomember = get_strip_value_dict(
1058 mmth_curepeattx_rec,
1062 curepeattx_amount = get_strip_value_dict(
1064 mmth_curepeattx_rec,
1071 if curepeattx_transactioncode ==
"AT":
1074 elif curepeattx_transactioncode
in [
"LP",
"CP"]:
1077 if curepeattx_accountnumber != curepeattx_tomember:
1083 for loanbalance_rec
in loan_balance_coll:
1084 if curepeattx_tosuffix == loanbalance_rec[
"loannumber"]:
1085 if loanbalance_rec[
"cbtype"] ==
'18':
1103 _mmth_repeating_transfers_outliers.writerow(
1104 [(
"'{}' is not a valid loan/credit card account " 1105 "for member '{}'.").format(curepeattx_tosuffix,
1106 curepeattx_accountnumber),
1107 get_valid_json(mmth_curepeattx_rec_copy)])
1109 elif curepeattx_transactioncode
in [
"LA",
"CA"]:
1113 if from_type ==
"" or to_type ==
"":
1114 error_msg =
"cu_scheduledtxn from_type or to_type not populated" 1115 LOGGER.error(error_msg)
1120 if curepeattx_transactioncode ==
"LA":
1121 from_txn =
"{}|{}|{}".format(
1123 curepeattx_accountnumber,
1124 curepeattx_fromsuffix)
1126 from_txn =
"{}|{}|{}|{}".format(
1128 curepeattx_accountnumber,
1129 curepeattx_fromsuffix,
1134 if curepeattx_transactioncode
in [
"LP",
"CP"]:
1135 to_txn =
"{}|{}|{}".format(
1137 curepeattx_tomember,
1138 curepeattx_tosuffix)
1140 to_txn =
"{}|{}|{}|{}".format(
1142 curepeattx_tomember,
1143 curepeattx_tosuffix,
1150 if curepeattx_accountnumber != curepeattx_tomember:
1151 if curepeattx_transactioncode ==
'AT':
1152 curepeattx_transactioncode =
'XA' 1153 elif curepeattx_transactioncode ==
'LP':
1154 curepeattx_transactioncode =
'XP' 1156 cuscheduled_txndata = {}
1157 cuscheduled_txndata[
"txn"] = {
1158 "from": handle_overloaded_accounts(from_txn),
1159 "frommember": curepeattx_accountnumber,
1160 "fromsuffix": curepeattx_fromsuffix,
1161 "fromtype": from_type,
1162 "to": handle_overloaded_accounts(to_txn),
1163 "tomember": curepeattx_tomember,
1164 "tosuffix": curepeattx_tosuffix,
1166 "amount": curepeattx_amount,
1167 "transactioncode": curepeattx_transactioncode,
1168 "deposittype": from_type,
1171 mmth_curepeattx_rec[
"txn_data"] = get_valid_json(cuscheduled_txndata)
1174 members_batch_transaction(
1177 collection=curepeattx_mammoth_records
1182 cuauditusers_coll = member_data[
"cuauditusers"]
1183 for cuaudituser_rec
in cuauditusers_coll:
1184 mmth_cu = get_strip_value_dict(
1185 "cu", cuaudituser_rec, pop=
True)
1186 assert mmth_cu == _cu
1187 del cuaudituser_rec[
"admuser"]
1188 cuaudituser_rec[
"user_id"] = user_id
1189 cuaudituser_rec[
"auditdate"] = get_strip_value_dict(
1190 "chdate", cuaudituser_rec, pop=
True)
1191 cuaudituser_rec[
"auditaction"] = get_strip_value_dict(
1192 "action", cuaudituser_rec, pop=
True)
1193 cuaudituser_rec[
"auditsrctype"] =
"U" 1194 cuaudituser_rec[
"auditsrcuser_name"] = get_strip_value_dict(
1195 "user_name", cuaudituser_rec, pop=
True)
1196 cuaudituser_rec[
"auditsrcemail"] = get_strip_value_dict(
1197 "email", cuaudituser_rec, pop=
True, default=
"a@b.cde")
1198 cuaudituser_rec[
"auditsrcip"] =
"127.0.0.1" 1199 cuaudituser_rec[
"accountnumber"] = mmth_uname_also_ody_mem_accnum
1203 if cuaudituser_rec[
"auditaction"]
in AUDITUSER_DESCMAP:
1204 val = cuaudituser_rec[
"auditaction"]
1205 cuaudituser_rec[
"auditfulldesc"] = AUDITUSER_DESCMAP[val]
1208 members_batch_transaction(
1210 "{}audituser".format(cu_lower),
1211 collection=cuauditusers_coll
1215 cuovermicr_coll = member_data[
"cuovermicr"]
1216 members_batch_transaction(
1219 collection=cuovermicr_coll