comparison Generic/fiebdc.py @ 25:189f8274aecd

gui. switch navigation menu on switch page
author Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es>
date Mon, 20 May 2019 13:18:33 +0200
parents 65e7ae0d0e63
children 16f91684686b
comparison
equal deleted inserted replaced
24:2b393934f1db 25:189f8274aecd
145 145
146 Test if the code have invalid characters and try to erase it, 146 Test if the code have invalid characters and try to erase it,
147 if it is posible return a valid code else return a empty string. 147 if it is posible return a valid code else return a empty string.
148 """ 148 """
149 if not isinstance(code, unicode): 149 if not isinstance(code, unicode):
150 print(_("Invalid code, it must be a unicode string") ) 150 _str = _("Invalid code, it must be a unicode string")
151 print(_str.encode("utf-8") )
151 return u"" 152 return u""
152 # Valid chararcter: A-Z a-z 0-9 ñ Ñ . $ # % & _ 153 # Valid chararcter: A-Z a-z 0-9 ñ Ñ . $ # % & _
153 # "valid_code" : "[^A-Za-z0-9ñÑ.$#%&_]" 154 # "valid_code" : "[^A-Za-z0-9ñÑ.$#%&_]"
154 _ucode = self.__pattern["valid_code"].sub(u"_", code) 155 _ucode = self.__pattern["valid_code"].sub(u"_", code)
155 if _ucode != code: 156 if _ucode != code:
156 try: 157 try:
157 print(utils.mapping(_("The code '$1' have invalid characters, replaced by '$2'."), 158 _tstr = _("The code '$1' have invalid characters," \
158 (code.encode("utf8"),_ucode.encode("utf8"))) ) 159 " replaced by '$2'.")
160 print(utils.mapping(_tstr, (code.encode("utf8"),
161 _ucode.encode("utf8"))) )
159 except: 162 except:
160 print(utils.mapping(_("The code '$1' have invalid characters and can not be encoded in utf8."), (code,)) ) 163 _tstr = _("The code '$1' have invalid characters and can not" \
164 " be encoded in utf8.")
165 print(utils.mapping(_tstr, (code,)).encode("utf-8") )
161 166
162 if len(_ucode) == 0: 167 if len(_ucode) == 0:
163 _normalize_code = ''.join((c for c in unicodedata.normalize('NFD', _ucode) if unicodedata.category(c) != 'Mn')) 168 _normalize_code = ""
164 # from http://www.leccionespracticas.com/uncategorized/eliminar-tildes-con-python-solucionado/ 169 for c in unicodedata.normalize('NFD', _ucode):
170 if unicodedata.category(c) != 'Mn':
171 _normalize_code.join(c)
172 #_normalize_code = ''.join((c for c in unicodedata.normalize(
173 # 'NFD', _ucode) if unicodedata.category(c) != 'Mn'))
174 # from http://www.leccionespracticas.com/uncategorized/
175 # eliminar-tildes-con-python-solucionado/
165 _ucode = self.__pattern["valid_code"].sub(u"", _normalize_code) 176 _ucode = self.__pattern["valid_code"].sub(u"", _normalize_code)
166 if len(_ucode) == 0: 177 if len(_ucode) == 0:
167 _hash_code = hashlib.sha256() 178 _hash_code = hashlib.sha256()
168 _hash_code.update(code.encode('utf-8')) 179 _hash_code.update(code.encode('utf-8'))
169 _hexdigest_code = _hash_code.hexdigest() 180 _hexdigest_code = _hash_code.hexdigest()
170 _ucode = self.__pattern["valid_code"].sub(u"", _hexdigest_code) 181 _p_valid_code = self.__pattern["valid_code"]
182 _ucode = _p_valid_code.sub(u"", _hexdigest_code)
171 code = _ucode 183 code = _ucode
172 if code == u"##": 184 if code == u"##":
173 # root code is an empty code : set to ROOT 185 # root code is an empty code : set to ROOT
174 return u"ROOT" 186 return u"ROOT"
175 # the lasts characters can not be <#> or <##> 187 # the lasts characters can not be <#> or <##>
183 if len(code) > 20: 195 if len(code) > 20:
184 code = code[:20] 196 code = code[:20]
185 # only one charecter # % or & 197 # only one charecter # % or &
186 if sum([code.count(c) for c in u'#%&']) > 1: 198 if sum([code.count(c) for c in u'#%&']) > 1:
187 print(utils.mapping(_("The code '$1' contains special "\ 199 print(utils.mapping(_("The code '$1' contains special "\
188 "characters repeated."),(code.encode("utf8"),)) ) 200 "characters repeated."),
201 (code.encode("utf8"),)).encode("utf-8") )
189 _i = min([code.find(c) for c in u'#%&']) 202 _i = min([code.find(c) for c in u'#%&'])
190 code = code[:_i+1] + \ 203 code = code[:_i+1] + \
191 self.__pattern["special_char"].sub(u"", code[_i+1:]) 204 self.__pattern["special_char"].sub(u"", code[_i+1:])
192 return code 205 return code
193 206
386 self._parseF(_field_list) 399 self._parseF(_field_list)
387 elif _field_list[0] == u"A": 400 elif _field_list[0] == u"A":
388 self.__statistics.A += 1 401 self.__statistics.A += 1
389 self._parseA(_field_list) 402 self._parseA(_field_list)
390 else: 403 else:
391 print(utils.mapping(_("FIEBDC. Unknow record: $1"),(record[:100],))) 404 print(utils.mapping(_("FIEBDC. Unknow record: $1"),
405 (record[:100],)).encode("utf-8"))
392 self.__statistics.unknow += 1 406 self.__statistics.unknow += 1
393 407
394 def _parseV(self, field_list): 408 def _parseV(self, field_list):
395 """_parseV(field_list) 409 """_parseV(field_list)
396 410
407 9- [Date budget certificate] 421 9- [Date budget certificate]
408 """ 422 """
409 if self.__statistics.records != 1: 423 if self.__statistics.records != 1:
410 print(utils.mapping(_("The 'V' record (Property and Version) "\ 424 print(utils.mapping(_("The 'V' record (Property and Version) "\
411 "must be the first record in the file but it is the "\ 425 "must be the first record in the file but it is the "\
412 "number: $1"), (str(self.__statistics.records),)) ) 426 "number: $1"),
427 (str(self.__statistics.records),)).encode("utf-8") )
413 print(_("The default values were taken and this V record is "\ 428 print(_("The default values were taken and this V record is "\
414 "ignored") ) 429 "ignored").encode("utf-8") )
415 return 430 return
416 # _____number of fields_____ 431 # _____number of fields_____
417 # Any INFORMATION after last field separator is ignored 432 # Any INFORMATION after last field separator is ignored
418 if len(field_list) > 10: 433 if len(field_list) > 10:
419 field_list = field_list[:10] 434 field_list = field_list[:10]
442 # _____Version-Date_____ 457 # _____Version-Date_____
443 _version_date = _version_date.split(u"\\") 458 _version_date = _version_date.split(u"\\")
444 _file_format = _version_date[0] 459 _file_format = _version_date[0]
445 if _file_format in self.__format_list: 460 if _file_format in self.__format_list:
446 self.__file_format = _file_format 461 self.__file_format = _file_format
447 print(utils.mapping(_("FIEBDC format: $1"),(_file_format,)) ) 462 print(utils.mapping(_("FIEBDC format: $1"),
463 (_file_format,)).encode("utf-8") )
448 464
449 if len(_version_date) > 1: 465 if len(_version_date) > 1:
450 _date = _version_date[1] 466 _date = _version_date[1]
451 if _date != u"": 467 if _date != u"":
452 _parsed_date = self.parseDate(_date) 468 _parsed_date = self.parseDate(_date)
453 if _parsed_date is not None: 469 if _parsed_date is not None:
454 self.__budget.setDate(_parsed_date) 470 self.__budget.setDate(_parsed_date)
455 # _____Generator_____ 471 # _____Generator_____
456 # ignored field 472 # ignored field
457 print(utils.mapping(_("FIEBDC file generated by $1"),(_generator,)) ) 473 print(utils.mapping(_("FIEBDC file generated by $1"),
474 (_generator,)).encode("utf-8") )
458 # _____Header_Title_____ 475 # _____Header_Title_____
459 _header_title = _header_title.split(u"\\") 476 _header_title = _header_title.split(u"\\")
460 _header_title = [_title.strip() for _title in _header_title] 477 _header_title = [_title.strip() for _title in _header_title]
461 _header = _header_title.pop(0) 478 _header = _header_title.pop(0)
462 _header = [_item.encode("utf8") for _item in _header] 479 _header = [_item.encode("utf8") for _item in _header]
793 if len(_codes) > 0: 810 if len(_codes) > 0:
794 #TODO: test this 811 #TODO: test this
795 _code = _codes[0] 812 _code = _codes[0]
796 _synonyms = [synonym.encode("utf8") for synonym in _codes] 813 _synonyms = [synonym.encode("utf8") for synonym in _codes]
797 else: 814 else:
798 print(_("Record C without a valid code") ) 815 print(_("Record C without a valid code").encode("utf-8") )
799 return 816 return
800 # _____Unit_____ 817 # _____Unit_____
801 # nothing to do 818 # nothing to do
802 # _____Summary_____ 819 # _____Summary_____
803 # nothing to do 820 # nothing to do
872 elif _type == u"0" or _type == u"": 889 elif _type == u"0" or _type == u"":
873 _subtype = u"" 890 _subtype = u""
874 _type = 0 891 _type = 0
875 else: 892 else:
876 print(utils.mapping(_("Incorrect type ($1) in the code $2"), 893 print(utils.mapping(_("Incorrect type ($1) in the code $2"),
877 (_type.encode("utf8"), _code.encode("utf8"))) ) 894 (_type.encode("utf8"),
895 _code.encode("utf8"))).encode("utf-8") )
878 _type = 0 896 _type = 0
879 _subtype = u"" 897 _subtype = u""
880 elif _hierarchy == 1: 898 elif _hierarchy == 1:
881 if _type == u"PU": 899 if _type == u"PU":
882 _subtype = _type 900 _subtype = _type
884 elif _type == u"0" or _type == u"": 902 elif _type == u"0" or _type == u"":
885 _subtype = u"" 903 _subtype = u""
886 _type = 0 904 _type = 0
887 else: 905 else:
888 print(utils.mapping(_("Incorrect type ($1) in the code $2"), 906 print(utils.mapping(_("Incorrect type ($1) in the code $2"),
889 (_type.encode("utf8"), _code.encode("utf8"))) ) 907 (_type.encode("utf8"),
908 _code.encode("utf8"))).encode("utf-8") )
890 _type = 0 909 _type = 0
891 _subtype = u"" 910 _subtype = u""
892 else: 911 else:
893 if _type == u"EA" or _type == u"EU" or _type == u"EC" or \ 912 if _type == u"EA" or _type == u"EU" or _type == u"EC" or \
894 _type == u"EF" or _type == u"PA": 913 _type == u"EF" or _type == u"PA":
912 elif _type == u"": 931 elif _type == u"":
913 _subtype = u"" 932 _subtype = u""
914 _type = 0 933 _type = 0
915 else: 934 else:
916 print(utils.mapping(_("Incorrect type ($1) in the code $2"), 935 print(utils.mapping(_("Incorrect type ($1) in the code $2"),
917 (_type.encode("utf8"), _code.encode("utf8"))) ) 936 (_type.encode("utf8"),
937 _code.encode("utf8"))).encode("utf-8") )
918 _type = 0 938 _type = 0
919 _subtype = u"" 939 _subtype = u""
920 self.__budget.setRecord(_code.encode("utf8"), _synonyms, _hierarchy, 940 self.__budget.setRecord(_code.encode("utf8"), _synonyms, _hierarchy,
921 _unit.encode("utf8"), _summary.encode("utf8"), 941 _unit.encode("utf8"), _summary.encode("utf8"),
922 _prices, _dates, _type, _subtype.encode("utf8")) 942 _prices, _dates, _type, _subtype.encode("utf8"))
969 except ValueError: 989 except ValueError:
970 print(utils.mapping(_("ValueError loadig the "\ 990 print(utils.mapping(_("ValueError loadig the "\
971 "descomposition of the record $1, the factor "\ 991 "descomposition of the record $1, the factor "\
972 "of the child $2 must be a float number and "\ 992 "of the child $2 must be a float number and "\
973 "can not be $3, seted default value 1.0"), 993 "can not be $3, seted default value 1.0"),
974 (_code.encode("utf8"), _child_code.encode("utf8"), _factor.encode("utf8"))) ) 994 (_code.encode("utf8"), _child_code.encode("utf8"),
995 _factor.encode("utf8"))).encode("utf-8") )
975 _factor = 1.0 996 _factor = 1.0
976 #____yield___ 997 #____yield___
977 if _yield != u"": 998 if _yield != u"":
978 try: 999 try:
979 _yield = float(_yield) 1000 _yield = float(_yield)
980 except ValueError: 1001 except ValueError:
981 print(utils.mapping(_("ValueError loading the "\ 1002 print(utils.mapping(_("ValueError loading the "\
982 "descomposition of the record $1, the yield of "\ 1003 "descomposition of the record $1, the yield of "\
983 "the child $2, must be a float number and can"\ 1004 "the child $2, must be a float number and can"\
984 "not be $3, seted default value 1.0"), 1005 "not be $3, seted default value 1.0"),
985 (_code.encode("utf8"), _child_code.encode("utf8"), _factor.encode("utf8"))) ) 1006 (_code.encode("utf8"), _child_code.encode("utf8"),
1007 _factor.encode("utf8"))).encode("utf-8") )
986 _yield = 1.0 1008 _yield = 1.0
987 if _child_code != u"" and _code != u"": 1009 if _child_code != u"" and _code != u"":
988 _children_list.append([_child_code, _factor, _yield ]) 1010 _children_list.append([_child_code, _factor, _yield ])
989 if _record_type == u"D": 1011 if _record_type == u"D":
990 _position = _child_index / 3 1012 _position = _child_index / 3
991 else: #_record_type == "Y" 1013 else: #_record_type == "Y"
992 _position = -1 1014 _position = -1
993 self.__budget.setTree(_code.encode("utf8"), _child_code.encode("utf8"), _position, _factor, 1015 self.__budget.setTree(_code.encode("utf8"),
1016 _child_code.encode("utf8"), _position, _factor,
994 _yield, "", "", "", "") 1017 _yield, "", "", "", "")
995 _child_index = _child_index + 3 1018 _child_index = _child_index + 3
996 interface.updateGui() 1019 interface.updateGui()
997 self.__statistics.valid = self.__statistics.valid +1 1020 self.__statistics.valid = self.__statistics.valid +1
998 1021
1066 elif len(_code_list) == 1: 1089 elif len(_code_list) == 1:
1067 _child_code = self.validateCode(_code_list[0]) 1090 _child_code = self.validateCode(_code_list[0])
1068 _parent_code = None 1091 _parent_code = None
1069 else: 1092 else:
1070 print(utils.mapping(_("Invalid codes in $1 record, codes $2"), 1093 print(utils.mapping(_("Invalid codes in $1 record, codes $2"),
1071 (_record_type.encode("utf8"), _codes.encode("utf8"))) ) 1094 (_record_type.encode("utf8"),
1095 _codes.encode("utf8"))).encode("utf-8") )
1072 return 1096 return
1073 if _child_code == u"": 1097 if _child_code == u"":
1074 print(utils.mapping(_("Empty child code in $1 record, codes: "\ 1098 print(utils.mapping(_("Empty child code in $1 record, codes: "\
1075 "$2"), (_record_type.encode("utf8"), _codes.encode("utf8"))) ) 1099 "$2"), (_record_type.encode("utf8"),
1100 _codes.encode("utf8"))).encode("utf-8") )
1076 return 1101 return
1077 if _parent_code == None: 1102 if _parent_code == None:
1078 # Empty parent code. No-estructured measures. 1103 # Empty parent code. No-estructured measures.
1079 pass 1104 pass
1080 1105
1090 _path = _path_list[-1] 1115 _path = _path_list[-1]
1091 try: 1116 try:
1092 _path = int(_path) 1117 _path = int(_path)
1093 except ValueError: 1118 except ValueError:
1094 print(utils.mapping(_("Invalid path in $1 record, "\ 1119 print(utils.mapping(_("Invalid path in $1 record, "\
1095 "codes $2"), (_record_type.encode("utf8"), _codes.encode("utf8"))) ) 1120 "codes $2"), (_record_type.encode("utf8"),
1121 _codes.encode("utf8"))).encode("utf-8") )
1096 return 1122 return
1097 if _path > 0: 1123 if _path > 0:
1098 _path -= 1 1124 _path -= 1
1099 else: 1125 else:
1100 _path = -2 1126 _path = -2
1102 try: 1128 try:
1103 _total = float(_total) 1129 _total = float(_total)
1104 except ValueError: 1130 except ValueError:
1105 print(utils.mapping(_("Invalid Total Measure value in $1 "\ 1131 print(utils.mapping(_("Invalid Total Measure value in $1 "\
1106 "record, codes $2. Total fixed to 0."), 1132 "record, codes $2. Total fixed to 0."),
1107 (_record_type.encode("utf8"), _codes.encode("utf8"))) ) 1133 (_record_type.encode("utf8"),
1134 _codes.encode("utf8"))).encode("utf-8") )
1108 _total = 0 1135 _total = 0
1109 # _____Measure lines_____ 1136 # _____Measure lines_____
1110 _lines = _lines.split(u"\\") 1137 _lines = _lines.split(u"\\")
1111 _line_index = 0 1138 _line_index = 0
1112 _line_list = [ ] 1139 _line_list = [ ]
1123 if _linetype == 3: 1150 if _linetype == 3:
1124 # "formula": ".*[^0123456789\.()\+\-\*/\^abcdp ].*" 1151 # "formula": ".*[^0123456789\.()\+\-\*/\^abcdp ].*"
1125 if self.__pattern["formula"].match(_comment): 1152 if self.__pattern["formula"].match(_comment):
1126 print(utils.mapping(_("The comment is not a formula or "\ 1153 print(utils.mapping(_("The comment is not a formula or "\
1127 "its have invalid characters, in the $1 record, "\ 1154 "its have invalid characters, in the $1 record, "\
1128 "codes $2"), (_record_type.encode("utf8"), _codes.encode("utf8"))) ) 1155 "codes $2"), (_record_type.encode("utf8"),
1156 _codes.encode("utf8"))).encode("utf-8") )
1129 return 1157 return
1130 else: 1158 else:
1131 _formula = _comment.encode("utf8") 1159 _formula = _comment.encode("utf8")
1132 _comment = "" 1160 _comment = ""
1133 else: 1161 else:
1148 if _length != u"": _length = float(_length) 1176 if _length != u"": _length = float(_length)
1149 if _width != u"": _width = float(_width) 1177 if _width != u"": _width = float(_width)
1150 if _height != u"": _height = float(_height) 1178 if _height != u"": _height = float(_height)
1151 except ValueError: 1179 except ValueError:
1152 print(utils.mapping(_("The measure values are not float "\ 1180 print(utils.mapping(_("The measure values are not float "\
1153 "numbers, code $1"), (_codes.encode("utf8"),)) ) 1181 "numbers, code $1"),
1182 (_codes.encode("utf8"),)).encode("utf-8") )
1154 return 1183 return
1155 # Prevent subfield units remains empty. 1184 # Prevent subfield units remains empty.
1156 if (_units == u"" and (_length != u"" or _width != u"" 1185 if (_units == u"" and (_length != u"" or _width != u""
1157 or _height != u"")): 1186 or _height != u"")):
1158 _units = 1.0 1187 _units = 1.0
1159 _line_list.append([_linetype, _comment, _units, 1188 _line_list.append([_linetype, _comment, _units,
1160 _length, _width, _height, _formula]) 1189 _length, _width, _height, _formula])
1161 _line_index = _line_index + 6 1190 _line_index = _line_index + 6
1162 self.__budget.setTree(_parent_code, _child_code.encode("utf8"), _path, "", "", 1191 self.__budget.setTree(_parent_code, _child_code.encode("utf8"), _path, "", "",
1163 _total, _line_list, _label.encode("utf8"), _record_type.encode("utf8")) 1192 _total, _line_list, _label.encode("utf8"),
1193 _record_type.encode("utf8"))
1164 self.__statistics.valid = self.__statistics.valid + 1 1194 self.__statistics.valid = self.__statistics.valid + 1
1165 1195
1166 def _parseW(self, field_list): 1196 def _parseW(self, field_list):
1167 """_parseW(field_list) 1197 """_parseW(field_list)
1168 1198
1195 # _____section_code_____ 1225 # _____section_code_____
1196 #"control": "[\t \n\r]" 1226 #"control": "[\t \n\r]"
1197 _field_code = self.delete_control_space(_field_code) 1227 _field_code = self.delete_control_space(_field_code)
1198 # _____section_title_____ 1228 # _____section_title_____
1199 if _field_code != u"": 1229 if _field_code != u"":
1200 _field_dict[_field_code.encode("utf8")] = _field_title.encode("utf8") 1230 _e_field_code = _field_code.encode("utf8")
1231 _e_field_title = _field_title.encode("utf8")
1232 _field_dict[_e_field_code] = _e_field_title
1201 _field_index = _field_index + 2 1233 _field_index = _field_index + 2
1202 self.__budget.setSheetFields(_field_dict) 1234 self.__budget.setSheetFields(_field_dict)
1203 self.__statistics.valid = self.__statistics.valid +1 1235 self.__statistics.valid = self.__statistics.valid +1
1204 1236
1205 def _parseL(self, field_list): 1237 def _parseL(self, field_list):
1245 # _____section_code_____ 1277 # _____section_code_____
1246 _section_code = self.delete_control_space(_section_code) 1278 _section_code = self.delete_control_space(_section_code)
1247 # _____section_title_____ 1279 # _____section_title_____
1248 _section_title = self.delete_control_space(_section_title) 1280 _section_title = self.delete_control_space(_section_title)
1249 if _section_code != u"": 1281 if _section_code != u"":
1250 _section_dict[_section_code.encode("utf8")] = _section_title.encode("utf8") 1282 _e_section_code = _section_code.encode("utf8")
1283 _e_section_title = _section_title.encode("utf8")
1284 _section_dict[_e_section_code] = _e_section_title
1251 _section_index = _section_index + 2 1285 _section_index = _section_index + 2
1252 self.__budget.setSheetSections(_section_dict) 1286 self.__budget.setSheetSections(_section_dict)
1253 self.__statistics.valid = self.__statistics.valid +1 1287 self.__statistics.valid = self.__statistics.valid +1
1254 1288
1255 else: 1289 else:
1265 # invalid characters are also erased 1299 # invalid characters are also erased
1266 _record_code = self.validateCode(_record_code) 1300 _record_code = self.validateCode(_record_code)
1267 _scodes_text = field_list[1] 1301 _scodes_text = field_list[1]
1268 if _scodes_text == u"": 1302 if _scodes_text == u"":
1269 # TODO: rtf and html files 1303 # TODO: rtf and html files
1270 print("Html and rtf files not yet implemented in ~L record" ) 1304 _str = "Html and rtf files not yet implemented in ~L record"
1305 print(_str.encode("utf-8") )
1271 else: 1306 else:
1272 # _____Section-code_Section-text_____ 1307 # _____Section-code_Section-text_____
1273 # last \ is erased 1308 # last \ is erased
1274 if len(_scodes_text) and _scodes_text[-1] == u"\\": 1309 if len(_scodes_text) and _scodes_text[-1] == u"\\":
1275 _scodes_text = _scodes_text[:-1] 1310 _scodes_text = _scodes_text[:-1]
1286 _section_code = self.delete_control_space(_section_code) 1321 _section_code = self.delete_control_space(_section_code)
1287 # _____section_text_____ 1322 # _____section_text_____
1288 if _section_code != u"" and _section_text != u"": 1323 if _section_code != u"" and _section_text != u"":
1289 #-# paragraph #-# 1324 #-# paragraph #-#
1290 _paragraph_code = _record_code + _section_code + u"*" 1325 _paragraph_code = _record_code + _section_code + u"*"
1291 _paragraph_dict[ _paragraph_code.encode("utf8") ] = _section_text.encode("utf8") 1326 _e_paragraph_code = _paragraph_code.encode("utf8")
1292 _section_dict[_section_code.encode("utf8")] = _paragraph_code.encode("utf8") 1327 _e_section_text = _section_text.encode("utf8")
1328 _paragraph_dict[_e_paragraph_code] = _e_section_text
1329 _e_section_code = _section_code.encode("utf8")
1330 _section_dict[_e_section_code] = _e_paragraph_code
1293 _section_index = _section_index + 2 1331 _section_index = _section_index + 2
1294 self.__budget.setSheetParagraphs(_paragraph_dict) 1332 self.__budget.setSheetParagraphs(_paragraph_dict)
1295 self.__budget.setSheetRecord(_record_code.encode("utf8"), "*", _section_dict) 1333 self.__budget.setSheetRecord(_record_code.encode("utf8"), "*",
1334 _section_dict)
1296 self.__statistics.valid = self.__statistics.valid +1 1335 self.__statistics.valid = self.__statistics.valid +1
1297 1336
1298 def _parseQ(self, field_list): 1337 def _parseQ(self, field_list):
1299 """_parseQ(field_list) 1338 """_parseQ(field_list)
1300 1339
1348 if _field_key in _field_dict: 1387 if _field_key in _field_dict:
1349 _section_dict = _field_dict[_field_key] 1388 _section_dict = _field_dict[_field_key]
1350 else: 1389 else:
1351 _section_dict = {} 1390 _section_dict = {}
1352 _field_dict[_field_key] = _section_dict 1391 _field_dict[_field_key] = _section_dict
1353 _section_dict[_section_code.encode("utf8")] = _paragraph_code.encode("utf8") 1392 _e_section_code = _section_code.encode("utf8")
1393 _e_paragraph_code = _paragraph_code.encode("utf8")
1394 _section_dict[_e_section_code] = _e_paragraph_code
1354 _section_index = _section_index + 3 1395 _section_index = _section_index + 3
1355 for _field, _section_dict in _field_dict.iteritems(): 1396 for _field, _section_dict in _field_dict.iteritems():
1356 self.__budget.setSheetRecord(_record_code.encode("utf8"), _field.encode("utf8"), _section_dict) 1397 self.__budget.setSheetRecord(_record_code.encode("utf8"),
1398 _field.encode("utf8"), _section_dict)
1357 self.__statistics.valid = self.__statistics.valid +1 1399 self.__statistics.valid = self.__statistics.valid +1
1358 1400
1359 def _parseJ(self, field_list): 1401 def _parseJ(self, field_list):
1360 """_parseJ(field_list) 1402 """_parseJ(field_list)
1361 1403
1380 _paragraph_code = self.delete_control_space(field_list[0]) 1422 _paragraph_code = self.delete_control_space(field_list[0])
1381 # _____Paragraph text_____ 1423 # _____Paragraph text_____
1382 _paragraph_text = field_list[1] 1424 _paragraph_text = field_list[1]
1383 if _paragraph_text == u"": 1425 if _paragraph_text == u"":
1384 # TODO: rtf and html files 1426 # TODO: rtf and html files
1385 print("Html and rtf files not yet implemented in ~J record" ) 1427 _str = "Html and rtf files not yet implemented in ~J record"
1428 print(_str.encode("utf-8") )
1386 else: 1429 else:
1387 self.__budget.setSheetParagraph(paragraph_code.encode("utf8"), paragraph_text.encode("utf8")) 1430 self.__budget.setSheetParagraph(paragraph_code.encode("utf8"),
1431 paragraph_text.encode("utf8"))
1388 self.__statistics.valid = self.__statistics.valid +1 1432 self.__statistics.valid = self.__statistics.valid +1
1389 1433
1390 def _parseG(self, field_list): 1434 def _parseG(self, field_list):
1391 """_parseG(field_list) 1435 """_parseG(field_list)
1392 1436
1448 _tested_grafic_file_list.append(_grafic_file_path_lu) 1492 _tested_grafic_file_list.append(_grafic_file_path_lu)
1449 elif os.path.exists(_grafic_file_path_ll): 1493 elif os.path.exists(_grafic_file_path_ll):
1450 _tested_grafic_file_list.append(_grafic_file_path_ll) 1494 _tested_grafic_file_list.append(_grafic_file_path_ll)
1451 else: 1495 else:
1452 print(utils.mapping(_("The file $1 do not exist"), 1496 print(utils.mapping(_("The file $1 do not exist"),
1453 (_grafic_file_path.decode("utf8"),)) ) 1497 (_grafic_file_path.decode("utf8"),)).encode("utf-8") )
1454 if len(_grafic_file_list) > 0: 1498 if len(_grafic_file_list) > 0:
1455 for _grafic_file in _tested_grafic_file_list: 1499 for _grafic_file in _tested_grafic_file_list:
1456 self.__budget.addFile(_record_code.encode("utf8"), _grafic_file, "img", "") 1500 self.__budget.addFile(_record_code.encode("utf8"),
1501 _grafic_file, "img", "")
1457 self.__statistics.valid = self.__statistics.valid +1 1502 self.__statistics.valid = self.__statistics.valid +1
1458 1503
1459 def _parseE(self, field_list): 1504 def _parseE(self, field_list):
1460 """_parseE(field_list) 1505 """_parseE(field_list)
1461 1506
1528 _contact_person = _local_offices_list[_local_offices_index+9] 1573 _contact_person = _local_offices_list[_local_offices_index+9]
1529 if _type != u"" or _subname != u"" or _address != u"" or \ 1574 if _type != u"" or _subname != u"" or _address != u"" or \
1530 _postal_code != u"" or _town != u"" or _province != u"" or \ 1575 _postal_code != u"" or _town != u"" or _province != u"" or \
1531 _country != u"" or _phone != u"" or _fax != u"" or \ 1576 _country != u"" or _phone != u"" or _fax != u"" or \
1532 _contact_person != u"": 1577 _contact_person != u"":
1533 _local_offices.append([_type.encode("utf8"), _subname.encode("utf8"), 1578 _local_offices.append([_type.encode("utf8"),
1534 _address.encode("utf8"), _postal_code.encode("utf8"), 1579 _subname.encode("utf8"),
1535 _town.encode("utf8"), _province.encode("utf8"), 1580 _address.encode("utf8"),
1536 _country.encode("utf8"), _phone_list, 1581 _postal_code.encode("utf8"),
1537 _fax_list, _contact_person.encode("utf8")]) 1582 _town.encode("utf8"),
1583 _province.encode("utf8"),
1584 _country.encode("utf8"),
1585 _phone_list,
1586 _fax_list,
1587 _contact_person.encode("utf8")])
1538 _local_offices_index = _local_offices_index + 10 1588 _local_offices_index = _local_offices_index + 10
1539 # _____cif web email_____ 1589 # _____cif web email_____
1540 _c_w_e = self.delete_control_space(field_list[4]) 1590 _c_w_e = self.delete_control_space(field_list[4])
1541 # last \ is erased 1591 # last \ is erased
1542 if len(_c_w_e) and _c_w_e[-1] == u"\\": 1592 if len(_c_w_e) and _c_w_e[-1] == u"\\":
1588 while _ti_index < len(_field_2_list)-3: 1638 while _ti_index < len(_field_2_list)-3:
1589 _ti_code = _field_2_list[_ti_index] 1639 _ti_code = _field_2_list[_ti_index]
1590 _ti_description = _field_2_list[_ti_index+1] 1640 _ti_description = _field_2_list[_ti_index+1]
1591 _ti_unit = _field_2_list[_ti_index+2] 1641 _ti_unit = _field_2_list[_ti_index+2]
1592 if _ti_code != "": 1642 if _ti_code != "":
1593 self.__budget.addTecInfo(_ti_code.encode("utf8"), _ti_description.encode("utf8"), 1643 self.__budget.addTecInfo(_ti_code.encode("utf8"),
1644 _ti_description.encode("utf8"),
1594 _ti_unit.encode("utf8")) 1645 _ti_unit.encode("utf8"))
1595 _ti_index = _ti_index + 3 1646 _ti_index = _ti_index + 3
1596 else: 1647 else:
1597 # B) 1648 # B)
1598 # "#" and "##" characters at the end of the code are erased 1649 # "#" and "##" characters at the end of the code are erased
1605 _ti_code = _field_2_list[_ti_index] 1656 _ti_code = _field_2_list[_ti_index]
1606 _ti_value = _field_2_list[_ti_index+1] 1657 _ti_value = _field_2_list[_ti_index+1]
1607 if _ti_code != u"" and _ti_value != u"": 1658 if _ti_code != u"" and _ti_value != u"":
1608 _ti_dict[_ti_code.encode("utf8")] = _ti_value.encode("utf8") 1659 _ti_dict[_ti_code.encode("utf8")] = _ti_value.encode("utf8")
1609 _ti_index = _ti_index + 2 1660 _ti_index = _ti_index + 2
1610 self.__budget.setTecnicalInformation(_record_code.encode("utf8"), _ti_dict) 1661 self.__budget.setTecnicalInformation(_record_code.encode("utf8"),
1662 _ti_dict)
1611 self.__statistics.valid = self.__statistics.valid +1 1663 self.__statistics.valid = self.__statistics.valid +1
1612 1664
1613 def _parseF(self, field_list): 1665 def _parseF(self, field_list):
1614 """_parseF(field_list) 1666 """_parseF(field_list)
1615 1667
1616 field_list: field list of the record 1668 field_list: field list of the record
1617 0- F: Files 1669 0- F: Files
1618 1- Record code 1670 1- Record code
1619 2- { Type \ { Filenames; } \ [Description] } 1671 2- { Type \ { Filenames; } \ [Description] }
1620 """ 1672 """
1621 print("parseF")
1622 print(field_list)
1623 # _____Number of fields_____ 1673 # _____Number of fields_____
1624 # The record must have at least 3 fields 1674 # The record must have at least 3 fields
1625 if len(field_list) < 3: 1675 if len(field_list) < 3:
1626 return 1676 return
1627 # Any INFORMATION after last field separator is ignored 1677 # Any INFORMATION after last field separator is ignored
1645 # adding empty subfiels if necesary 1695 # adding empty subfiels if necesary
1646 if len(_files_list)%3 > 0: 1696 if len(_files_list)%3 > 0:
1647 _files_list.extend[u""]*(3 - len(_files_list)%3) 1697 _files_list.extend[u""]*(3 - len(_files_list)%3)
1648 _file_index = 0 1698 _file_index = 0
1649 _tested_files_list = [] 1699 _tested_files_list = []
1650 print(_files_list)
1651 while _file_index < len(_files_list)-3: 1700 while _file_index < len(_files_list)-3:
1652 _type = _files_list[_file_index].replace(u" ",u"") 1701 _type = _files_list[_file_index].replace(u" ",u"")
1653 ## _types = { 1702 ## _types = {
1654 ## "0": _("others"), 1703 ## "0": _("others"),
1655 ## "1": _("características técnicas y de fabricación"), 1704 ## "1": _("características técnicas y de fabricación"),
1663 ## "9": _("cálculo de elementos y sistemas"), 1712 ## "9": _("cálculo de elementos y sistemas"),
1664 ## "10": _("presentación, datos generales, objetivos, " \ 1713 ## "10": _("presentación, datos generales, objetivos, " \
1665 ## "etc. de empresa"), 1714 ## "etc. de empresa"),
1666 ## "11": _("certificado/s de empresa"), 1715 ## "11": _("certificado/s de empresa"),
1667 ## "12": _("obras realizadas")} 1716 ## "12": _("obras realizadas")}
1668 _types = [u"0", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"10", 1717 _types = [u"0", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8",
1669 u"11", u"12"] 1718 u"9", u"10", u"11", u"12"]
1670 if not _type in _types: 1719 if not _type in _types:
1671 _type = u"0" 1720 _type = u"0"
1672 _filenames = _files_list[_file_index + 1] 1721 _filenames = _files_list[_file_index + 1]
1673 _description = _files_list[_file_index + 2] 1722 _description = _files_list[_file_index + 2]
1674 _file_index += 3 1723 _file_index += 3
1675 print(u"type: " + _type)
1676 print(u"filenames: " + _filenames)
1677 print(u"_description: " + _description)
1678 if len(_filenames) and _filenames[-1] == u";": 1724 if len(_filenames) and _filenames[-1] == u";":
1679 _files = _files[:-1] 1725 _files = _files[:-1]
1680 _filenames_list = _filenames.split(u";") 1726 _filenames_list = _filenames.split(u";")
1681 1727
1682 _path = os.path.dirname(self.__filename) 1728 _path = os.path.dirname(self.__filename)
1700 _file_path_uu = os.path.join(_path, _uu) 1746 _file_path_uu = os.path.join(_path, _uu)
1701 _file_path_ul = os.path.join(_path, _ul) 1747 _file_path_ul = os.path.join(_path, _ul)
1702 _file_path_lu = os.path.join(_path, _lu) 1748 _file_path_lu = os.path.join(_path, _lu)
1703 _file_path_ll = os.path.join(_path, _ll) 1749 _file_path_ll = os.path.join(_path, _ll)
1704 if os.path.exists(_file_path_uu): 1750 if os.path.exists(_file_path_uu):
1705 _tested_files_list.append([_file_path_uu, _type.encode("utf8"), 1751 _tested_files_list.append([_file_path_uu,
1752 _type.encode("utf8"),
1706 _description.encode("utf8")]) 1753 _description.encode("utf8")])
1707 elif os.path.exists(_grafic_file_path_ul): 1754 elif os.path.exists(_grafic_file_path_ul):
1708 _tested_files_list.append([_file_path_ul, _type.encode("utf8"), 1755 _tested_files_list.append([_file_path_ul,
1756 _type.encode("utf8"),
1709 _description.encode("utf8")]) 1757 _description.encode("utf8")])
1710 elif os.path.exists(_grafic_file_path_lu): 1758 elif os.path.exists(_grafic_file_path_lu):
1711 _tested_files_list.append([_file_path_lu, _type.encode("utf8"), 1759 _tested_files_list.append([_file_path_lu,
1760 _type.encode("utf8"),
1712 _description.encode("utf8")]) 1761 _description.encode("utf8")])
1713 elif os.path.exists(_grafic_file_path_ll): 1762 elif os.path.exists(_grafic_file_path_ll):
1714 _tested_files_list.append([_file_path_ll, _type.encode("utf8"), 1763 _tested_files_list.append([_file_path_ll,
1764 _type.encode("utf8"),
1715 _description.encode("utf8")]) 1765 _description.encode("utf8")])
1716 else: 1766 else:
1717 print(utils.mapping(_("The file $1 do not exist"), 1767 print(utils.mapping(_("The file $1 do not exist"),
1718 (_file_path,)) ) 1768 (_file_path,)).encode("utf-8") )
1719 if len(_tested_files_list) > 0: 1769 if len(_tested_files_list) > 0:
1720 for _file in _tested_files_list: 1770 for _file in _tested_files_list:
1721 self.__budget.addFile(_record_code.encode("utf8"), _file[0], _file[1], _file[2]) 1771 self.__budget.addFile(_record_code.encode("utf8"), _file[0],
1772 _file[1], _file[2])
1722 self.__statistics.valid = self.__statistics.valid +1 1773 self.__statistics.valid = self.__statistics.valid +1
1723 1774
1724 def _parseB(self, field_list): 1775 def _parseB(self, field_list):
1725 """_parseB(field_list) 1776 """_parseB(field_list)
1726 1777
1818 # The record must have 3 fields 1869 # The record must have 3 fields
1819 if len(field_list) > 3: 1870 if len(field_list) > 3:
1820 field_list = field_list[0:3] 1871 field_list = field_list[0:3]
1821 field_list = field_list[1:] 1872 field_list = field_list[1:]
1822 if len(field_list) != 2: 1873 if len(field_list) != 2:
1823 print(_("PyArq hates parametric DLLs") ) 1874 print(_("PyArq hates parametric DLLs").encode("utf-8") )
1824 return 1875 return
1825 else: 1876 else:
1826 return 1877 return
1827 # _____Description_____ 1878 # _____Description_____
1828 _description = field_list[1] 1879 _description = field_list[1]
1829 if _description == u"": 1880 if _description == u"":
1830 print(_("PyArq hates parametric DLLs") ) 1881 print(_("PyArq hates parametric DLLs").encode("utf-8") )
1831 return 1882 return
1832 # Adding last end of line 1883 # Adding last end of line
1833 _description = _description + u"\r\n" 1884 _description = _description + u"\r\n"
1834 # Delete comments 1885 # Delete comments
1835 # "comment" : "#.*\r\n" 1886 # "comment" : "#.*\r\n"
1883 _final_line = u"" 1934 _final_line = u""
1884 for index1 in range(len(_list)): 1935 for index1 in range(len(_list)):
1885 if index1 % 2 != 0: 1936 if index1 % 2 != 0:
1886 _parcial_line = u'"' + _list[index1] 1937 _parcial_line = u'"' + _list[index1]
1887 else: 1938 else:
1888 _parcial_line = u'"' + _list[index1].replace(u" ",u"") 1939 _parcial_line = _list[index1].replace(u" ",u"")
1940 _parcial_line = u'"' + _parcial_line
1889 _final_line = _final_line + _parcial_line 1941 _final_line = _final_line + _parcial_line
1890 _line = _final_line[1:] 1942 _line = _final_line[1:]
1891 _lines[index] = _line 1943 _lines[index] = _line
1892 # parse data 1944 # parse data
1893 if len(_line) > 2 and _line[:2] == u"::": 1945 if len(_line) > 2 and _line[:2] == u"::":
1909 index + _pass_line + 1 < len(_lines) -1: 1961 index + _pass_line + 1 < len(_lines) -1:
1910 _line = _line + _lines[index + _pass_line + 1] 1962 _line = _line + _lines[index + _pass_line + 1]
1911 _pass_line = _pass_line + 1 1963 _pass_line = _pass_line + 1
1912 _search = self.__pattern["var"].search(_line) 1964 _search = self.__pattern["var"].search(_line)
1913 if _search is not None: 1965 if _search is not None:
1914 _var = _search.groups()[0] + u" = " + _search.groups()[1] 1966 _var0 = _search.groups()[0]
1967 _var1 = _search.groups()[1]
1968 _var = _var0 + u" = " + _var1
1915 #print("__VAR__" + str(_var) ) 1969 #print("__VAR__" + str(_var) )
1916 pass 1970 pass
1917 else: 1971 else:
1918 #print( "no __VAR__", _line ) 1972 #print( "no __VAR__", _line )
1919 pass 1973 pass
1920 elif self.__pattern["descomposition"].search(_line): 1974 elif self.__pattern["descomposition"].search(_line):
1921 # Delete spaces out " delimiter 1975 # Delete spaces out " delimiter
1922 #_patern = "(^[^:]*):(.*)$" 1976 #_patern = "(^[^:]*):(.*)$"
1923 _search = self.__pattern["descomposition"].search(_line) 1977 _search = self.__pattern["descomposition"].search(_line)
1924 if _search is not None: 1978 if _search is not None:
1925 _var = _search.groups()[0] + u":" + _search.groups()[1] 1979 _var0 = _search.groups()[0]
1980 _var1 = _search.groups()[1]
1981 _var = _var0 + u":" + _var1
1926 #print( "__Descomposición__" + str(_var) ) 1982 #print( "__Descomposición__" + str(_var) )
1927 pass 1983 pass
1928 else: 1984 else:
1929 #print("no __Descomposición__", _line ) 1985 #print("no __Descomposición__", _line )
1930 pass 1986 pass
1931 else: 1987 else:
1932 print("Parametric: code: " + _family_code.encode("utf8") ) 1988 _str = "Parametric: code: " + \
1933 print("******* Desconocido *** : " + _line ) 1989 _family_code.encode("utf8")
1934 if index-10 > 0: print("-11 : " + _lines[index-11].encode("utf8") ) 1990 print(_str.encode("utf-8") )
1935 if index-10 > 0: print("-10 : " + _lines[index-10].encode("utf8") ) 1991 _str = "******* Desconocido *** : " + _line
1936 if index-9 > 0: print("-9 : " + _lines[index-9].encode("utf8") ) 1992 print(_str.encode("utf-8") )
1937 if index-8 > 0: print("-8 : " + _lines[index-8].encode("utf8") ) 1993 if index-10 > 0:
1938 if index-7 > 0: print("-7 : " + _lines[index-7].encode("utf8") ) 1994 print("-11 : " + _lines[index-11].encode("utf8") )
1939 if index-6 > 0: print("-6 : " + _lines[index-6].encode("utf8") ) 1995 if index-10 > 0:
1940 if index-5 > 0: print("-5 : " + _lines[index-5].encode("utf8") ) 1996 print("-10 : " + _lines[index-10].encode("utf8") )
1941 if index-4 > 0: print("-4 : " + _lines[index-4].encode("utf8") ) 1997 if index-9 > 0:
1942 if index-3 > 0: print("-3 : " + _lines[index-3].encode("utf8") ) 1998 print("-9 : " + _lines[index-9].encode("utf8") )
1943 if index-2 > 0: print("-2 : " + _lines[index-2].encode("utf8") ) 1999 if index-8 > 0:
1944 if index-1 > 0: print("-1 : " + _lines[index-1].encode("utf8") ) 2000 print("-8 : " + _lines[index-8].encode("utf8") )
1945 print("-0 :" + _lines[index-0] ) 2001 if index-7 > 0:
2002 print("-7 : " + _lines[index-7].encode("utf8") )
2003 if index-6 > 0:
2004 print("-6 : " + _lines[index-6].encode("utf8") )
2005 if index-5 > 0:
2006 print("-5 : " + _lines[index-5].encode("utf8") )
2007 if index-4 > 0:
2008 print("-4 : " + _lines[index-4].encode("utf8") )
2009 if index-3 > 0:
2010 print("-3 : " + _lines[index-3].encode("utf8") )
2011 if index-2 > 0:
2012 print("-2 : " + _lines[index-2].encode("utf8") )
2013 if index-1 > 0:
2014 print("-1 : " + _lines[index-1].encode("utf8") )
2015 print(("-0 :" + _lines[index-0]).encode("utf-8") )
1946 pass 2016 pass
1947 else: 2017 else:
1948 _parameter_list = _line.split(u"\\")[1:-1] 2018 _parameter_list = _line.split(u"\\")[1:-1]
1949 if len(_parameter_list) >= 2: 2019 if len(_parameter_list) >= 2:
1950 if _parameter_list[0] == u"C" or \ 2020 if _parameter_list[0] == u"C" or \
1951 _parameter_list[0] == u"COMENTARIO": 2021 _parameter_list[0] == u"COMENTARIO":
1952 #print( "__COMENTARIO__" + _parameter_list[1]) 2022 #print( "__COMENTARIO__" + _parameter_list[1])
1953 self.__budget.setParametricSelectComment( 2023 self.__budget.setParametricSelectComment(
1954 _family_code.encode("utf8"), _parameter_list[1].encode("utf8")) 2024 _family_code.encode("utf8"),
2025 _parameter_list[1].encode("utf8"))
1955 elif _parameter_list[0] == u"R" or \ 2026 elif _parameter_list[0] == u"R" or \
1956 _parameter_list[0] == u"RESUMEN": 2027 _parameter_list[0] == u"RESUMEN":
1957 #print( "__RESUMEN__" + _parameter_list[1]) 2028 #print( "__RESUMEN__" + _parameter_list[1])
1958 self.__budget.setParametricSummary(_family_code.encode("utf8"), 2029 self.__budget.setParametricSummary(
2030 _family_code.encode("utf8"),
1959 _parameter_list[1].encode("utf8")) 2031 _parameter_list[1].encode("utf8"))
1960 elif _parameter_list[0] == u"T" or \ 2032 elif _parameter_list[0] == u"T" or \
1961 _parameter_list[0] == u"TEXTO": 2033 _parameter_list[0] == u"TEXTO":
1962 #print( "__TEXTO__" + _parameter_list[1]) 2034 #print( "__TEXTO__" + _parameter_list[1])
1963 self.__budget.setParametricText(_family_code.encode("utf8"), 2035 self.__budget.setParametricText(
2036 _family_code.encode("utf8"),
1964 _parameter_list[1].encode("utf8")) 2037 _parameter_list[1].encode("utf8"))
1965 elif _parameter_list[0] == u"P" or \ 2038 elif _parameter_list[0] == u"P" or \
1966 _parameter_list[0] == u"PLIEGO": 2039 _parameter_list[0] == u"PLIEGO":
1967 #print( "__PLIEGO__" + str(_parameter_list[1:]) ) 2040 #print( "__PLIEGO__" + str(_parameter_list[1:]) )
1968 pass 2041 pass
2015 interface.readFile_set_statistics(self.__statistics) 2088 interface.readFile_set_statistics(self.__statistics)
2016 _time = time.time() 2089 _time = time.time()
2017 try: 2090 try:
2018 _file = open(self.__filename, 'r') 2091 _file = open(self.__filename, 'r')
2019 except IOError: 2092 except IOError:
2020 print( utils.mapping("IOError: $1", (self.__filename,)) ) 2093 _str = utils.mapping("IOError: $1", (self.__filename,))
2094 print( _str.encode("utf-8") )
2021 return None 2095 return None
2022 _filesize = float(os.path.getsize(self.__filename)) 2096 _filesize = float(os.path.getsize(self.__filename))
2023 if _filesize == 0.0: 2097 if _filesize == 0.0:
2024 print( utils.mapping("Empty File: $1", (self.__filename,)) ) 2098 _str = utils.mapping("Empty File: $1", (self.__filename,))
2099 print( _str.encode("utf-8") )
2025 # Todo: Create empty budget 2100 # Todo: Create empty budget
2026 return None 2101 return None
2027 self.__budget.filename = self.__filename 2102 self.__budget.filename = self.__filename
2028 interface.readFile_send_message(utils.mapping(_("Loading file $1"), 2103 interface.readFile_send_message(utils.mapping(_("Loading file $1"),
2029 (self.__filename,))) 2104 (self.__filename,)).encode("utf-8"))
2030 interface.readFile_progress(_file.tell() / _filesize) 2105 interface.readFile_progress(_file.tell() / _filesize)
2031 _buffer = _file.read(1000) 2106 _buffer = _file.read(1000)
2032 interface.updateGui() 2107 interface.updateGui()
2033 # set codepage from V record 2108 # set codepage from V record
2034 _record_list = _buffer.split("~") 2109 _record_list = _buffer.split("~")
2045 # remove leading spaces 2120 # remove leading spaces
2046 if _version in self.__character_sets_dict: 2121 if _version in self.__character_sets_dict:
2047 self.__character_set = self.__character_sets_dict[_version] 2122 self.__character_set = self.__character_sets_dict[_version]
2048 interface.readFile_send_message(utils.mapping( 2123 interface.readFile_send_message(utils.mapping(
2049 _("FIEBDC character encoding: $1"), 2124 _("FIEBDC character encoding: $1"),
2050 (self.__character_set,))) 2125 (self.__character_set,)).encode("utf8"))
2051 else: 2126 else:
2052 interface.readFile_send_message(utils.mapping( 2127 interface.readFile_send_message(utils.mapping(
2053 _("This Character encoding do not exist in "\ 2128 _("This Character encoding do not exist in "\
2054 "FIEBDC3! Default Character encoding: $1"), 2129 "FIEBDC3! Default Character encoding: $1"),
2055 (self.__character_set,))) 2130 (self.__character_set,)).encode("utf-8"))
2056 else: 2131 else:
2057 interface.readFile_send_message(utils.mapping(_( 2132 interface.readFile_send_message(utils.mapping(_(
2058 "This V record dot have a character encoding! "\ 2133 "This V record dot have a character encoding! "\
2059 "Default character encoding: $1"), 2134 "Default character encoding: $1"),
2060 (self.__character_set,))) 2135 (self.__character_set,)).encode("utf-8"))
2061 else: 2136 else:
2062 interface.readFile_send_message(utils.mapping(_( 2137 interface.readFile_send_message(utils.mapping(_(
2063 "Not 'V' record in File! Default character encoding: "\ 2138 "Not 'V' record in File! Default character encoding: "\
2064 "$1"), (self.__character_set,))) 2139 "$1"), (self.__character_set,)).encode("utf-8"))
2065 _buffer = unicode(_buffer, self.__character_set) 2140 _buffer = unicode(_buffer, self.__character_set)
2066 interface.updateGui() 2141 interface.updateGui()
2067 # Any INFORMATION between the beginning of the file and the 2142 # Any INFORMATION between the beginning of the file and the
2068 # beginning of the first registry “~” is ignored 2143 # beginning of the first registry “~” is ignored
2069 #"after_first_tilde" : "^[^~]*~" 2144 #"after_first_tilde" : "^[^~]*~"
2105 interface.readFile_cancel() 2180 interface.readFile_cancel()
2106 return None 2181 return None
2107 else: 2182 else:
2108 self.__statistics.time = time.time()-_time 2183 self.__statistics.time = time.time()-_time
2109 if self.__statistics.O > 0: 2184 if self.__statistics.O > 0:
2110 interface.readFile_send_message( 2185 _str = utils.mapping(
2111 utils.mapping(_("$1 unsuported record type O: "\ 2186 _("$1 unsuported record type O: Comercial Relationship"),
2112 "Comercial Relationship"), (str(self.__statistics.O,)))) 2187 (str(self.__statistics.O,)))
2188 interface.readFile_send_message(_str.encode("utf-8"))
2113 if self.__statistics.valid == 0: 2189 if self.__statistics.valid == 0:
2114 interface.readFile_send_message(_("This file is not a valid FIBDC3 file")) 2190 _str = _("This file is not a valid FIBDC3 file")
2191 interface.readFile_send_message(_str.encode("utf-8"))
2115 return None 2192 return None
2116 interface.readFile_end() 2193 interface.readFile_end()
2117 self._testBudget(self.__budget, interface) 2194 self._testBudget(self.__budget, interface)
2118 return None 2195 return None
2119 2196
2122 2199
2123 budget: base.obra object 2200 budget: base.obra object
2124 Test and repair budget object after read it from bc3 file 2201 Test and repair budget object after read it from bc3 file
2125 """ 2202 """
2126 # TODO: more to do here 2203 # TODO: more to do here
2127 print( _("Testing budget ...") ) 2204 print( _("Testing budget ...").encode("utf-8") )
2128 # Add price to records without price 2205 # Add price to records without price
2129 _iter = budget.iter() 2206 _iter = budget.iter()
2130 _titlelist = budget.getTitleList()[1] 2207 _titlelist = budget.getTitleList()[1]
2131 if len(_titlelist) == 0: 2208 if len(_titlelist) == 0:
2132 _titlenum = 1 2209 _titlenum = 1
2141 for _index in range(0,_leftprices): 2218 for _index in range(0,_leftprices):
2142 _root = budget.getRecord(budget.getRoot()) 2219 _root = budget.getRecord(budget.getRoot())
2143 _price = [0.0, _root.getDate(_len_prices + _index)] 2220 _price = [0.0, _root.getDate(_len_prices + _index)]
2144 budget.addPriceToRecord(_price,_record) 2221 budget.addPriceToRecord(_price,_record)
2145 interface.updateGui() 2222 interface.updateGui()
2146 print( _("End Test") ) 2223 print(_("End Test").encode("utf-8"))
2147 2224
2148 def delete_control_space(self, text): 2225 def delete_control_space(self, text):
2149 text = self.delete_control(text) 2226 text = self.delete_control(text)
2150 text = text.replace(u" ", u"") 2227 text = text.replace(u" ", u"")
2151 return text 2228 return text
2199 2276
2200 message: mesage from readFile method 2277 message: mesage from readFile method
2201 2278
2202 print( message ) 2279 print( message )
2203 """ 2280 """
2204 print( message ) 2281 print( message.encode("utf-8") )
2205 2282
2206 def readFile_progress(self, percent): 2283 def readFile_progress(self, percent):
2207 """progress(percent) 2284 """progress(percent)
2208 2285
2209 percent: Percentage executed. 2286 percent: Percentage executed.
2216 """readFile_end() 2293 """readFile_end()
2217 2294
2218 The readFile method end successfully 2295 The readFile method end successfully
2219 """ 2296 """
2220 self.endSuccessfully == True 2297 self.endSuccessfully == True
2221 print(self.__statistics) 2298 print(self.__statistics.encode("utf-8"))
2222 print("progreso = " + str(self.__progress)) 2299 print(("progreso = " + str(self.__progress)).encode("utf-8"))
2223 2300
2224 def readFile_cancel(self): 2301 def readFile_cancel(self):
2225 """readFile_cancel() 2302 """readFile_cancel()
2226 2303
2227 The readFile method is canceled 2304 The readFile method is canceled
2228 """ 2305 """
2229 self.endSuccessfully == False 2306 self.endSuccessfully == False
2230 print( _("Process terminated") ) 2307 print( _("Process terminated").encode("utf-8") )
2231 print("progreso = " + str(self.__progress)) 2308 print(("progreso = " + str(self.__progress)).encode("utf-8"))
2232 2309
2233 def updateGui(self): 2310 def updateGui(self):
2234 """updateGui(self) 2311 """updateGui(self)
2235 2312
2236 Some interfaces need update gui while doing some time intensive 2313 Some interfaces need update gui while doing some time intensive
2303 self.A = 0 2380 self.A = 0
2304 self.unknow = 0 2381 self.unknow = 0
2305 self.time = 0.0 2382 self.time = 0.0
2306 2383
2307 def __str__(self): 2384 def __str__(self):
2308 return self.str().encode("utf8") 2385 return self.str()
2309 2386
2310 def str(self): 2387 def str(self):
2311 2388 _str = utils.mapping(_("Time to load: $1 seconds"),
2312 return utils.mapping(_("Time to load: $1 seconds"),
2313 (("%.2f" %(self.time)),)) + "\n" + \ 2389 (("%.2f" %(self.time)),)) + "\n" + \
2314 utils.mapping(_("Records/Valid Records: $1/$2"), 2390 utils.mapping(_("Records/Valid Records: $1/$2"),
2315 (str(self.records), str(self.valid))) + "\n" +\ 2391 (str(self.records), str(self.valid))) + "\n" +\
2316 "V: %s\n" %(self.V,) + \ 2392 "V: %s\n" %(self.V,) + \
2317 "C: %s\n" %(self.C,) + \ 2393 "C: %s\n" %(self.C,) + \
2332 "X: %s\n" %(self.X,) + \ 2408 "X: %s\n" %(self.X,) + \
2333 "B: %s\n" %(self.B,) + \ 2409 "B: %s\n" %(self.B,) + \
2334 "F: %s\n" %(self.F,) + \ 2410 "F: %s\n" %(self.F,) + \
2335 "A: %s\n" %(self.A,) + \ 2411 "A: %s\n" %(self.A,) + \
2336 "?: %s\n" %(self.unknow,) 2412 "?: %s\n" %(self.unknow,)
2337 2413 return _str.encode("utf8")
2414