comparison Generic/base.py @ 26:16f91684686b default tip

Upgrade to python 3. Keep python 2/3 compatibility
author Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es>
date Tue, 18 Jun 2019 17:50:23 +0200
parents 189f8274aecd
children
comparison
equal deleted inserted replaced
25:189f8274aecd 26:16f91684686b
261 +-- __labels": Label dictionary { "label": [ "code", ], } 261 +-- __labels": Label dictionary { "label": [ "code", ], }
262 """ 262 """
263 263
264 # Modules 264 # Modules
265 # python 2/3 compatibility 265 # python 2/3 compatibility
266 #from __future__ import absolute_import, division, print_function, unicode_literals 266 from __future__ import absolute_import, division, print_function, unicode_literals
267 from builtins import str as text
268 from six import text_type
267 269
268 import re 270 import re
269 import datetime 271 import datetime
270 import os 272 import os
271 273
275 277
276 278
277 # Translatable global Vars 279 # Translatable global Vars
278 280
279 authors = ["Miguel Ángel Bárcena Rodríguez"] 281 authors = ["Miguel Ángel Bárcena Rodríguez"]
280 copyright = "Copyright \xc2\xa9 2019 Autoras de Pyarq Presupuestos" 282 copyright = "Copyright © 2019 Autoras de Pyarq Presupuestos"
281 website = "http://pyarq.obraencurso.es/pyarq-Presupuestos" 283 website = "http://pyarq.obraencurso.es/pyarq-Presupuestos"
282 website_label = "pyarq Presupuestos Web" 284 website_label = "pyarq Presupuestos Web"
283 comments = _(""" 285 comments = _("""
284 A free program of measurements, budgets and control of construction sites. 286 A free program of measurements, budgets and control of construction sites.
285 In beta development, still there is not a fully functional version. 287 In beta development, still there is not a fully functional version.
416 """setCode(code) 418 """setCode(code)
417 419
418 Sets the code, must be a valid code 420 Sets the code, must be a valid code
419 """ 421 """
420 if not utils.is_valid_code(code)[0]: 422 if not utils.is_valid_code(code)[0]:
421 raise ValueError(utils.mapping(_("Invalid code: $1"),(str(code),))) 423 _uni = utils.mapping(_("Invalid code: $1"),(code,))
424 _str = _uni.encode("utf-8")
425 raise ValueError(_str)
422 self.__code = code 426 self.__code = code
423 427
424 def getSynonyms(self): 428 def getSynonyms(self):
425 return self.__synonyms 429 return self.__synonyms
426 430
431 synonyms must fulfill: 435 synonyms must fulfill:
432 - must be a list 436 - must be a list
433 - the items must be valid codes 437 - the items must be valid codes
434 """ 438 """
435 if not isinstance(synonyms, list): 439 if not isinstance(synonyms, list):
436 raise TypeError( utils.mapping(_("Synonyms ($1) must be a list, " \ 440 _tuni = _("Synonyms ($1) must be a list, code: $2")
437 "code: $2"), (str(synonyms), str(self.__code))) ) 441 _uni = utils.mapping(_tuni, (synonyms, self.__code))
442 _str = _uni.encode("utf-8")
443 raise TypeError(_str)
438 for code in synonyms: 444 for code in synonyms:
439 if not utils.is_valid_code(code)[0]: 445 if not utils.is_valid_code(code)[0]:
440 raise ValueError( utils.mapping(_("Invalid Code in synomyms "\ 446 _tuni = _("Invalid Code in synomyms list ($1) code: $2")
441 "list ($1) code: $2"), (str(code), str(self.__code))) ) 447 _uni = utils.mapping(_tuni, (code, self.__code))
448 _str = _uni.encode("utf-8")
449 raise ValueError(_str)
442 self.__synonyms = synonyms 450 self.__synonyms = synonyms
443 451
444 def getRecordType(self): 452 def getRecordType(self):
445 return self.__recordType 453 return self.__recordType
446 454
465 """setUnit(unit) 473 """setUnit(unit)
466 474
467 Set the unit of measure 475 Set the unit of measure
468 The unit must be a string. 476 The unit must be a string.
469 """ 477 """
470 if not isinstance(unit, str): 478 if not isinstance(unit, text_type):
471 raise TypeError( utils.mapping(_("Unit ($1) must be a string: $2"), 479 _tuni = _("Unit ($1) must be a text string: $2")
472 (str(unit), str(self.__code))) ) 480 _uni = utils.mapping(_tuni, (unit, self.__code))
481 _str = _uni.encode("utf-8")
482 raise TypeError(_str)
473 self.__unit = unit 483 self.__unit = unit
474 484
475 def getSummary(self): 485 def getSummary(self):
476 return self.__summary 486 return self.__summary
477 487
479 """setSummary(summary) 489 """setSummary(summary)
480 490
481 Set the summary of a record 491 Set the summary of a record
482 The summary must be a string. 492 The summary must be a string.
483 """ 493 """
484 if not isinstance(summary, str): 494 if not isinstance(summary, text_type):
485 raise TypeError( utils.mapping(_("Summary ($1) must be a string: "\ 495 _tuni = _("Summary ($1) must be a text string: $1")
486 "$1"), (str(summary), str(self.__code))) ) 496 _uni = utils.mapping(_tuni, (summary, self.__code))
497 _str = _uni.encode("utf-8")
498 raise TypeError(_str)
487 self.__summary = summary 499 self.__summary = summary
488 500
489 def getPrices(self): 501 def getPrices(self):
490 return self.__prices 502 return self.__prices
491 503
497 - it must be a list 509 - it must be a list
498 - the items must be a list with two items 510 - the items must be a list with two items
499 - the first item: price must be a float 511 - the first item: price must be a float
500 """ 512 """
501 if not isinstance(prices, list): 513 if not isinstance(prices, list):
502 raise TypeError( utils.mapping(_("Prices ($1) must be a list: $2"), 514 _tuni = _("Prices ($1) must be a list: $2")
503 (str(prices), str(self.__code))) ) 515 _uni = utils.mapping(_tuni, (text(prices), self.__code))
516 _str = _uni.encode("utf-8")
517 raise TypeError(_str)
504 for index in range(len(prices)): 518 for index in range(len(prices)):
505 _price_date = prices[index] 519 _price_date = prices[index]
506 _price_date = self._validate_price_date(_price_date, decimals) 520 _price_date = self._validate_price_date(_price_date, decimals)
507 prices[index] = _price_date 521 prices[index] = _price_date
508 self.__prices = prices 522 self.__prices = prices
518 price_date = self._validate_price_date(price_date, decimals) 532 price_date = self._validate_price_date(price_date, decimals)
519 self.__prices.append(price_date) 533 self.__prices.append(price_date)
520 534
521 def _validate_price_date(self, price_date, decimals): 535 def _validate_price_date(self, price_date, decimals):
522 if not isinstance(price_date, list) and len(price_date) == 2: 536 if not isinstance(price_date, list) and len(price_date) == 2:
523 raise ValueError( utils.mapping(_("Price ($1) must be a list"\ 537 _tuni = _("Price ($1) must be a list with two items: $2")
524 " with two items: $2"), (str(price_date), str(self.__code))) ) 538 _uni = utils.mapping(_tuni, (text(price_date), self.__code))
539 _str = _uni.encode("utf-8")
540 raise ValueError(_str)
525 _price = price_date[0] 541 _price = price_date[0]
526 _date = price_date[1] 542 _date = price_date[1]
527 if not isinstance(_price, float): 543 if not isinstance(_price, float):
528 raise TypeError( utils.mapping(_("Price must be a float "\ 544 _tuni = ("Price must be a float number: $1")
529 "number: $1"), (str(_price),)) ) 545 _uni = utils.mapping(_tuni, (text(_price),))
546 _str = _uni.encode("utf-8")
547 raise TypeError(_str)
530 _D = abs(decimals.getD(self.recordType)) 548 _D = abs(decimals.getD(self.recordType))
531 _price = round(_price, _D) 549 _price = round(_price, _D)
532 price_date[0] = _price 550 price_date[0] = _price
533 # TODO: validate date 551 # TODO: validate date
534 return price_date 552 return price_date
535 553
536 def getPrice(self, index_price): 554 def getPrice(self, index_price):
537 if len(self.__prices) <= index_price: 555 if len(self.__prices) <= index_price:
538 raise IndexError( _("The record do not have this Price. Code: %s" 556 _tuni = _("The record do not have this Price. Code: $1")
539 % self.__code) ) 557 _uni = utils.mapping(_tuni, (self.__code,))
558 _str = _uni.encode("utf-8")
559 raise IndexError(_str)
540 return self.__prices[index_price][0] 560 return self.__prices[index_price][0]
541 561
542 def getDate(self, index_price): 562 def getDate(self, index_price):
543 if len(self.__prices) <= index_price: 563 if len(self.__prices) <= index_price:
544 raise IndexError( _("The record do not have this Price") ) 564 _tuni = _("The record do not have this Price")
565 _str = _tuni.encode("utf-8")
566 raise IndexError(_str)
545 return self.__prices[index_price][1] 567 return self.__prices[index_price][1]
546 568
547 def getParents(self): 569 def getParents(self):
548 return self.__parents 570 return self.__parents
549 571
550 def setParents(self,parents): 572 def setParents(self, parents):
551 """setParents(parents) 573 """setParents(parents)
552 574
553 Sets the list of parents codes of the record. 575 Sets the list of parents codes of the record.
554 parents must fulfill 576 parents must fulfill
555 - it must be a list 577 - it must be a list
556 - the items must be valid codes 578 - the items must be valid codes
557 """ 579 """
558 if not isinstance(parents, list): 580 if not isinstance(parents, list):
559 raise TypeError( utils.mapping(_("Parents ($1) must be a list: $2"), 581 _tuni = _("Parents ($1) must be a list: $2")
560 (str(parents), str(self.__code))) ) 582 _uni = utils.mapping(_tuni, (text(parents), self.__code))
583 _str = _uni.encode("utf-8")
584 raise TypeError(_str)
561 for parent in parents: 585 for parent in parents:
562 if not utils.is_valid_code(parent)[0]: 586 if not utils.is_valid_code(parent)[0]:
563 raise ValueError(utils.mapping(_("Invalid parent code ($1) " \ 587 _tuni = _("Invalid parent code ($1) in the record: $2")
564 "in the record: $2"), (str(padre), str(self.__code))) ) 588 _uni = utils.mapping(_tuni, (padre, self.__code))
589 _str = _uni.encode("utf-8")
590 raise ValueError(_str)
565 self.__parents = parents 591 self.__parents = parents
566 592
567 def appendParent(self, parent): 593 def appendParent(self, parent):
568 """appendParent(parent) 594 """appendParent(parent)
569 595
570 parent must be a valid code 596 parent must be a valid code
571 Append a parent to the list of parents codes of the record. 597 Append a parent to the list of parents codes of the record.
572 598
573 """ 599 """
574 if not utils.is_valid_code(parent)[0]: 600 if not utils.is_valid_code(parent)[0]:
575 raise ValueError( utils.mapping(_("Invalid parent code ($1) " \ 601 _tuni = _("Invalid parent code ($1) in the record: $2")
576 "in the record: $2"), (str(parent), str(self.__code))) ) 602 _uni = utils.mapping(_tuni, (parent, self.__code))
603 _str = _uni.encode("utf-8")
604 raise ValueError(_str)
577 self.__parents.append(parent) 605 self.__parents.append(parent)
578 606
579 def getchildren(self): 607 def getchildren(self):
580 return self.__children 608 return self.__children
581 609
586 children must fulfill 614 children must fulfill
587 - it must be a list 615 - it must be a list
588 - the items must be instances of Decomposition class 616 - the items must be instances of Decomposition class
589 """ 617 """
590 if not isinstance(children, list): 618 if not isinstance(children, list):
591 raise TypeError( utils.mapping(_("children ($1) must be a list, "\ 619 _tuni = _("children ($1) must be a list, record: $2")
592 "record: $2"), (str(children), str(self.__code))) ) 620 _uni = utils.mapping(_tuni, (text(children), self.__code))
621 _str = _uni.encode("utf-8")
622 raise TypeError(_str)
593 for _child in children: 623 for _child in children:
594 if not isinstance(_child, Decomposition): 624 if not isinstance(_child, Decomposition):
595 raise ValueError( utils.mapping(_("child ($1) must be a "\ 625 _tuni = _("child ($1) must be a Decomposition object, record: $2")
596 "Decomposition object, record: $2"), 626 _uni = utils.mapping(_tuni, (text(_child), self.__code))
597 (str(_child), str(self.__code))) ) 627 _str = _uni.encode("utf-8")
628 raise ValueError(_str)
598 _record_code = self.code 629 _record_code = self.code
599 for _measure_list in [_child.budgetMeasures, _child.certification, 630 for _measure_list in [_child.budgetMeasures, _child.certification,
600 _child.real_cost, _child.cost_goals, 631 _child.real_cost, _child.cost_goals,
601 _child.cost_planned]: 632 _child.cost_planned]:
602 if isinstance(_measure_list, list): 633 if isinstance(_measure_list, list):
643 """setText(text) 674 """setText(text)
644 675
645 Sets the text of the record 676 Sets the text of the record
646 It must be a string 677 It must be a string
647 """ 678 """
648 if not isinstance(text, str): 679 if not isinstance(text, text_type):
649 raise TypeError( utils.mapping(_("Text ($1) must be a string, "\ 680 _tuni = _("Text ($1) must be a text string, record: $2")
650 "record: $2"), (str(text), str(self.__code))) ) 681 _uni = utils.mapping(_tuni, (text, self.__code))
682 _str = _uni.encode("utf-8")
683 raise TypeError(_str)
651 self.__text = text 684 self.__text = text
652 685
653 def getSheet(self): 686 def getSheet(self):
654 return self.__sheet 687 return self.__sheet
655 688
657 """setSheet(sheet) 690 """setSheet(sheet)
658 691
659 Sets the sheet of condition object 692 Sets the sheet of condition object
660 """ 693 """
661 if not isinstance(sheet, Sheet): 694 if not isinstance(sheet, Sheet):
662 raise ValueError( _("sheet must be a Sheet instance") ) 695 _tuni = _("sheet must be a Sheet instance")
696 _str = _tuni.encode("utf-8")
697 raise ValueError(_str)
663 self.__sheet = sheet 698 self.__sheet = sheet
664 699
665 def getFiles(self): 700 def getFiles(self):
666 return self.__files 701 return self.__files
667 702
669 """setFiles(files) 704 """setFiles(files)
670 705
671 Sets the files list 706 Sets the files list
672 """ 707 """
673 if not isinstance(files, list): 708 if not isinstance(files, list):
674 raise ValueError( utils.mapping(_("files must be a list: $1"), 709 _tuni = _("files must be a list: $1")
675 str(files)) ) 710 _uni = utils.mapping(_tuni, text(files))
711 _str = _uni.encode("utf-8")
712 raise ValueError(_str)
676 _files = [] 713 _files = []
677 for file in files: 714 for file in files:
678 if isinstance(file, File): 715 if isinstance(file, File):
679 _files.append(file) 716 _files.append(file)
680 elif isinstance(file, list): 717 elif isinstance(file, list):
681 _file_path = file[0] 718 _file_path = file[0]
682 _type = file[1] 719 _type = file[1]
683 _description = file[2] 720 _description = file[2]
684 if not os.path.exists(file[0]): 721 if not os.path.exists(file[0]):
685 raise ValueError( _("Incorrect path") ) 722 _tuni = _("Incorrect path")
723 _str = _tuni.encode("utf-8")
724 raise ValueError(_str)
686 _file = File(file_path, type_, description) 725 _file = File(file_path, type_, description)
687 _files.append(_file) 726 _files.append(_file)
688 else: 727 else:
689 raise ValueError( utils.mapping(_( 728 _tuni = _("file must be a list or a File object: $1")
690 "file must be a list or a File object: $1"),str(file)) ) 729 _uni = utils.mapping(_tuni, file)
730 _str = _uni.encode("utf-8")
731 raise ValueError(_str)
691 self.__files = _files 732 self.__files = _files
692 733
693 def addFile(self, file_path, type_, description): 734 def addFile(self, file_path, type_, description):
694 """addFile(file_path, type_, description) 735 """addFile(file_path, type_, description)
695 736
696 Add a file to a record instance 737 Add a file to a record instance
697 """ 738 """
698 if not os.path.exists(file_path): 739 if not os.path.exists(file_path):
699 raise ValueError( _("Incorrect path") ) 740 _tuni = _("Incorrect path")
741 _str = _tuni.encode("utf-8")
742 raise ValueError(_str)
700 _name = os.path.basename(file_path) 743 _name = os.path.basename(file_path)
701 _isin = False 744 _isin = False
702 for _ofile in self.__files: 745 for _ofile in self.__files:
703 if _ofile.name == _name: 746 if _ofile.name == _name:
704 _isin = True 747 _isin = True
713 """setLabels(labels) 756 """setLabels(labels)
714 757
715 Sets the labels list of a record 758 Sets the labels list of a record
716 """ 759 """
717 if not isinstance(labels, list): 760 if not isinstance(labels, list):
718 raise ValueError( _("labels must be a list") ) 761 _tuni = _("labels must be a list")
762 _str = _tuni.encode("utf-8")
763 raise ValueError(_str)
719 _labels = [] 764 _labels = []
720 for _label in labels: 765 for _label in labels:
721 if isinstance(_label, str): 766 if isinstance(_label, text_type):
722 _labels.append(_label) 767 _labels.append(_label)
723 else: 768 else:
724 raise ValueError( _("label must be a string") ) 769 _tuni = _("label must be a text string")
770 _str = _tuni.encode("utf-8")
771 raise ValueError(_str)
725 self.__labels = _labels 772 self.__labels = _labels
726 773
727 def addLabel(self, label): 774 def addLabel(self, label):
728 """addLabel(label) 775 """addLabel(label)
729 776
730 Add a label to a record instance 777 Add a label to a record instance
731 """ 778 """
732 if not isinstance(label, str): 779 if not isinstance(label, text_type):
733 raise ValueError( _("Label must be a string") ) 780 _tuni = _("Label must be a text string")
781 _str = _tuni.encode("utf-8")
782 raise ValueError(_str)
734 if not label in self.__labels: 783 if not label in self.__labels:
735 self.__labels.append(label) 784 self.__labels.append(label)
736 785
737 def getChildPositions(self, child_code): 786 def getChildPositions(self, child_code):
738 """getChildPath(child_code): 787 """getChildPath(child_code):
976 def getPosition(self): 1025 def getPosition(self):
977 return self.__position 1026 return self.__position
978 1027
979 def setPosition(self, position): 1028 def setPosition(self, position):
980 if not isinstance(position, int): 1029 if not isinstance(position, int):
981 raise ValueError( _("Position must be a integer") ) 1030 _tuni = _("Position must be a integer")
1031 _str = _tuni.encode("utf-8")
1032 raise ValueError(_str)
982 self.__position = position 1033 self.__position = position
983 1034
984 def getCode(self): 1035 def getCode(self):
985 return self.__code 1036 return self.__code
986 1037
990 def getBudgetMeasures(self): 1041 def getBudgetMeasures(self):
991 return self.__budgetMeasures 1042 return self.__budgetMeasures
992 1043
993 def setBudgetMeasures(self, budgetMeasures): 1044 def setBudgetMeasures(self, budgetMeasures):
994 if not isinstance(budgetMeasures, list): 1045 if not isinstance(budgetMeasures, list):
995 raise ValueError( _("BudgetMeasures atribute must be a list") ) 1046 _tuni = _("BudgetMeasures atribute must be a list")
1047 _str = _tuni.encode("utf-8")
1048 raise ValueError(_str)
996 for _measure in budgetMeasures: 1049 for _measure in budgetMeasures:
997 if not isinstance(_measure, Measure): 1050 if not isinstance(_measure, Measure):
998 raise ValueError( _("BudgetMeasures item must be a Measure "/ 1051 _tuni = _("BudgetMeasures item must be a Measure object")
999 "object") ) 1052 _str = _tuni.encode("utf-8")
1053 raise ValueError(_str)
1000 self.__budgetMeasures = budgetMeasures 1054 self.__budgetMeasures = budgetMeasures
1001 1055
1002 def getCertification(self): 1056 def getCertification(self):
1003 return self.__certification 1057 return self.__certification
1004 1058
1005 def setCertification(self, certification): 1059 def setCertification(self, certification):
1006 if not (certification is None or isinstance(certification, list)): 1060 if not (certification is None or isinstance(certification, list)):
1007 raise ValueError(_("Certification atribute must be a list or None")) 1061 _tuni = _("Certification atribute must be a list or None")
1062 _str = _tuni.encode("utf-8")
1063 raise ValueError(_str)
1008 self.__certification = certification 1064 self.__certification = certification
1009 1065
1010 def getRealCost(self): 1066 def getRealCost(self):
1011 return self.__real_cost 1067 return self.__real_cost
1012 1068
1013 def setRealCost(self, real_cost): 1069 def setRealCost(self, real_cost):
1014 if not (real_cost is None or isinstance(real_cost, list)): 1070 if not (real_cost is None or isinstance(real_cost, list)):
1015 raise ValueError( _("Real cost atribute must be a list or None") ) 1071 _tuni =_("Real cost atribute must be a list or None")
1072 _str = _tuni.encode("utf-8")
1073 raise ValueError(_str)
1016 self.__real_cost = real_cost 1074 self.__real_cost = real_cost
1017 1075
1018 def getCostGoals(self): 1076 def getCostGoals(self):
1019 return self.__cost_goals 1077 return self.__cost_goals
1020 1078
1021 def setCostGoals(self, cost_goals): 1079 def setCostGoals(self, cost_goals):
1022 if not (cost_goals is None or isinstance(cost_goals, list)): 1080 if not (cost_goals is None or isinstance(cost_goals, list)):
1023 raise ValueError( _("Cost goals atribute must be a list or None") ) 1081 _tuni = _("Cost goals atribute must be a list or None")
1082 _str = _tuni.encode("utf-8")
1083 raise ValueError(_str)
1024 self.__cost_goals = cost_goals 1084 self.__cost_goals = cost_goals
1025 1085
1026 def getCostPlanned(self): 1086 def getCostPlanned(self):
1027 return self.__cost_planned 1087 return self.__cost_planned
1028 1088
1029 def setCostPlanned(self, cost_planned): 1089 def setCostPlanned(self, cost_planned):
1030 if not (cost_planned is None or isinstance(cost_planned, list)): 1090 if not (cost_planned is None or isinstance(cost_planned, list)):
1031 raise ValueError(_("Cost Planned atribute must be a list or None")) 1091 _tuni = _("Cost Planned atribute must be a list or None")
1092 _str = _tuni.encode("utf-8")
1093 raise ValueError(_str)
1032 self.__cost_planned = cost_planned 1094 self.__cost_planned = cost_planned
1033 1095
1034 position = property(getPosition, setPosition, None, 1096 position = property(getPosition, setPosition, None,
1035 """Postion of the record in the budget 1097 """Postion of the record in the budget
1036 """) 1098 """)
1119 def getMeasure(self): 1181 def getMeasure(self):
1120 return self.__measure 1182 return self.__measure
1121 1183
1122 def setMeasure(self, measure, decimals): 1184 def setMeasure(self, measure, decimals):
1123 if not isinstance(measure, float): 1185 if not isinstance(measure, float):
1124 raise ValueError( utils.mapping(_("Measure must be a float "\ 1186 _tuni = _("Measure must be a float number. Type: $1")
1125 "number. Type: $1"), (type(measure),)) ) 1187 _uni = utils.mapping(_tuni, (type(measure),))
1188 _str = _uni.encode("utf-8")
1189 raise ValueError(_str)
1126 # TODO: test after 1190 # TODO: test after
1127 _DS = abs(decimals.DS) 1191 _DS = abs(decimals.DS)
1128 measure = round(measure, _DS) 1192 measure = round(measure, _DS)
1129 self.__measure = measure 1193 self.__measure = measure
1130 1194
1131 def getLines(self): 1195 def getLines(self):
1132 return self.__lines 1196 return self.__lines
1133 1197
1134 def setLines(self, lines): 1198 def setLines(self, lines):
1135 if not isinstance(lines, list): 1199 if not isinstance(lines, list):
1136 raise ValueError( _("Lines must be a list") ) 1200 _tuni = _("Lines must be a list")
1201 _str = _tuni.encode("utf-8")
1202 raise ValueError(_str)
1137 for _line in lines: 1203 for _line in lines:
1138 if not isinstance(_line, MeasureLine): 1204 if not isinstance(_line, MeasureLine):
1139 raise ValueError( _("Line must be a MeasureLine objetc") ) 1205 _tuni = _("Line must be a MeasureLine objetc")
1206 _str = _tuni.encode("utf-8")
1207 raise ValueError(_str)
1140 self.__lines = lines 1208 self.__lines = lines
1141 1209
1142 def getLabel(self): 1210 def getLabel(self):
1143 return self.__label 1211 return self.__label
1144 1212
1145 def setLabel(self, label): 1213 def setLabel(self, label):
1146 self.__label = label 1214 self.__label = label
1147 1215
1148 def setFactor(self, factor, decimals, recordType): 1216 def setFactor(self, factor, decimals, recordType):
1149 if not isinstance(factor, float): 1217 if not isinstance(factor, float):
1150 raise ValueError( utils.mapping(_("Factor must be a float number "\ 1218 _tuni = _("Factor must be a float number |$1|")
1151 "|$1|"), (str(factor),)) ) 1219 _uni = utils.mapping(_tuni, (text(factor),))
1220 _str = _uni.encode("utf-8")
1221 raise ValueError(_str)
1152 # TODO: test after 1222 # TODO: test after
1153 _DF = abs(decimals.getDF(recordType)) 1223 _DF = abs(decimals.getDF(recordType))
1154 factor = round(factor, _DF) 1224 factor = round(factor, _DF)
1155 self.__factor = factor 1225 self.__factor = factor
1156 1226
1157 def getFactor(self): 1227 def getFactor(self):
1158 return self.__factor 1228 return self.__factor
1159 1229
1160 def setYield(self, yield_, decimals, recordType): 1230 def setYield(self, yield_, decimals, recordType):
1161 if not isinstance(yield_, float): 1231 if not isinstance(yield_, float):
1162 raise ValueError( _("Yield must be a float number") ) 1232 _tuni = _("Yield must be a float number")
1233 _str = _tuni.encode("utf-8")
1234 raise ValueError(_str)
1163 # TODO: test after 1235 # TODO: test after
1164 _DR = abs(decimals.getDR(recordType)) 1236 _DR = abs(decimals.getDR(recordType))
1165 yield_ = round(yield_, _DR) 1237 yield_ = round(yield_, _DR)
1166 self.__yield_ = yield_ 1238 self.__yield_ = yield_
1167 1239
1168 def getYield(self): 1240 def getYield(self):
1169 return self.__yield_ 1241 return self.__yield_
1170 1242
1171 def setFixed(self, fixed, decimals): 1243 def setFixed(self, fixed, decimals):
1172 if not isinstance(fixed, bool): 1244 if not isinstance(fixed, bool):
1173 raise ValueError( _("Fixed must be boolean object") ) 1245 _tuni = _("Fixed must be boolean object")
1246 _str = _tuni.encode("utf-8")
1247 raise ValueError(_str)
1174 self.__fixed = fixed 1248 self.__fixed = fixed
1175 self.updateYield(decimals) 1249 self.updateYield(decimals)
1176 1250
1177 def getFixed(self): 1251 def getFixed(self):
1178 return self.__fixed 1252 return self.__fixed
1238 if type_ == "M": 1312 if type_ == "M":
1239 self.lines = _lines 1313 self.lines = _lines
1240 elif type_ == "A": 1314 elif type_ == "A":
1241 self.lines.extend(_lines) 1315 self.lines.extend(_lines)
1242 else: 1316 else:
1243 raise ValueError( utils.mapping(_("Type must be M or A. Type: $1"), 1317 _tuni = _("Type must be M or A. Type: $1")
1244 (str(type_),)) ) 1318 _uni = utils.mapping(_tuni, (type_,))
1319 _str = _uni.encode("utf-8")
1320 raise ValueError(_str)
1245 self.calculateMeasure(decimals, recordType) 1321 self.calculateMeasure(decimals, recordType)
1246 1322
1247 def calculateMeasure(self, decimals, recordType): 1323 def calculateMeasure(self, decimals, recordType):
1248 #TODO: round acumulated_subtotal and parcial_subtotal 1324 #TODO: round acumulated_subtotal and parcial_subtotal
1249 if len(self.lines) > 0: 1325 if len(self.lines) > 0:
1382 def getAcumulatedSubtotal(self): 1458 def getAcumulatedSubtotal(self):
1383 return self.__acumulated_subtotal 1459 return self.__acumulated_subtotal
1384 1460
1385 def setParcialSubtotal(self, parcial_subtotal, decimals): 1461 def setParcialSubtotal(self, parcial_subtotal, decimals):
1386 if not isinstance(parcial_subtotal, float): 1462 if not isinstance(parcial_subtotal, float):
1387 raise ValueError( utils.mapping(_(" Parcial Subtotal must be a "\ 1463 _tuni = _("Parcial Subtotal must be a float number. Parcial: $1")
1388 "float number. Parcial: $1"), (str(parcial_subtotal),)) ) 1464 _uni = utils.mapping(_tuni, (text(parcial_subtotal),))
1465 _str = _uni.encode("utf-8")
1466 raise ValueError(_str)
1389 _DS = abs(decimals.DS) 1467 _DS = abs(decimals.DS)
1390 parcial_subtotal = round(parcial_subtotal, _DS) 1468 parcial_subtotal = round(parcial_subtotal, _DS)
1391 self.__parcial_subtotal = parcial_subtotal 1469 self.__parcial_subtotal = parcial_subtotal
1392 1470
1393 def setAcumulatedSubtotal(self, acumulated_subtotal, decimals): 1471 def setAcumulatedSubtotal(self, acumulated_subtotal, decimals):
1394 if not isinstance(acumulated_subtotal, float): 1472 if not isinstance(acumulated_subtotal, float):
1395 raise ValueError( utils.mapping(_(" Acumulated Subtotal must be "\ 1473 _tuni = _("Acumulated Subtotal must be a float number. Parcial: $1")
1396 "a float number. Parcial: $1"), 1474 _uni = utils.mapping(_tuni, (text(acumulated_subtotal),))
1397 (str(acumulated_subtotal),)) ) 1475 _str = _uni.encode("utf-8")
1476 raise ValueError(_str)
1398 _DS = abs(decimals.DS) 1477 _DS = abs(decimals.DS)
1399 acumulated_subtotal = round(acumulated_subtotal, _DS) 1478 acumulated_subtotal = round(acumulated_subtotal, _DS)
1400 self.__acumulated_subtotal = acumulated_subtotal 1479 self.__acumulated_subtotal = acumulated_subtotal
1401 1480
1402 def calculateParcial(self, decimals): 1481 def calculateParcial(self, decimals):
1426 _parcial = round(_parcial, _DS) 1505 _parcial = round(_parcial, _DS)
1427 self.__parcial = _parcial 1506 self.__parcial = _parcial
1428 1507
1429 def setLineType(self, type_): 1508 def setLineType(self, type_):
1430 if not type_ in [0, 1, 2, 3]: 1509 if not type_ in [0, 1, 2, 3]:
1431 raise ValueError( utils.mapping(_("Invalid measure line type ($1)"), 1510 _tuni = _("Invalid measure line type ($1)")
1432 (str(type_),)) ) 1511 _uni = utils.mapping(_tuni, (type_,))
1512 _str = _uni.encode("utf-8")
1513 raise ValueError(_str)
1433 self.__lineType = type_ 1514 self.__lineType = type_
1434 1515
1435 def setComment(self, comment): 1516 def setComment(self, comment):
1436 if not isinstance(comment, str): 1517 if not isinstance(comment, text_type):
1437 raise ValueError( utils.mapping(_("Measure Comment must be a "\ 1518 _tuni = ("Measure Comment must be a text string ($1)")
1438 "string ($1)"), (str(comment),)) ) 1519 _uni = utils.mapping(_tuni, (comment,))
1520 _str = _uni.encode("utf-8")
1521 raise ValueError(_str)
1439 self.__comment = comment 1522 self.__comment = comment
1440 1523
1441 def setUnits(self, units, decimals): 1524 def setUnits(self, units, decimals):
1442 if units != "": 1525 if units != "":
1443 if not isinstance(units, float): 1526 if not isinstance(units, float):
1444 raise ValueError( utils.mapping(_("Invalid Measure Units ($1)"), 1527 _tuni = _("Invalid Measure Units ($1)")
1445 (str(units),)) ) 1528 _uni = utils.mapping(_tuni, (text(units),))
1529 _str = _uni.encode("utf-8")
1530 raise ValueError(_str)
1446 _DN = abs(decimals.DN) 1531 _DN = abs(decimals.DN)
1447 units = round(units, _DN) 1532 units = round(units, _DN)
1448 self.__units = units 1533 self.__units = units
1449 try: 1534 try:
1450 self.calculateParcial(decimals) 1535 self.calculateParcial(decimals)
1452 pass 1537 pass
1453 1538
1454 def setLength(self, length, decimals): 1539 def setLength(self, length, decimals):
1455 if length != "": 1540 if length != "":
1456 if not isinstance(length, float): 1541 if not isinstance(length, float):
1457 raise ValueError( utils.mapping(_("Invalid Measure length ($1)"), 1542 _tuni = _("Invalid Measure length ($1)")
1458 (str(units),)) ) 1543 _uni = utils.mapping(_tuni, (text(length),))
1544 _str = _uni.encode("utf-8")
1545 raise ValueError(_str)
1459 _DD = abs(decimals.DD) 1546 _DD = abs(decimals.DD)
1460 length = round(length, _DD) 1547 length = round(length, _DD)
1461 self.__length = length 1548 self.__length = length
1462 try: 1549 try:
1463 self.calculateParcial(decimals) 1550 self.calculateParcial(decimals)
1465 pass 1552 pass
1466 1553
1467 def setWidth(self, width, decimals): 1554 def setWidth(self, width, decimals):
1468 if width != "": 1555 if width != "":
1469 if not isinstance(width, float): 1556 if not isinstance(width, float):
1470 raise ValueError( utils.mapping(_("Invalid Measure Width ($1)"), 1557 _tuni = _("Invalid Measure Width ($1)")
1471 (str(units),)) ) 1558 _uni = utils.mapping(_tuni, (text(units),))
1559 _str = _uni.encode("utf-8")
1560 raise ValueError(_str)
1472 _DD = abs(decimals.DD) 1561 _DD = abs(decimals.DD)
1473 width = round(width, _DD) 1562 width = round(width, _DD)
1474 self.__width = width 1563 self.__width = width
1475 try: 1564 try:
1476 self.calculateParcial(decimals) 1565 self.calculateParcial(decimals)
1478 pass 1567 pass
1479 1568
1480 def setHeight(self, height, decimals): 1569 def setHeight(self, height, decimals):
1481 if height != "": 1570 if height != "":
1482 if not isinstance(height, float): 1571 if not isinstance(height, float):
1483 raise ValueError( utils.mapping(_("Invalid Measure Height ($1)"), 1572 _tuni = _("Invalid Measure Height ($1)")
1484 (str(height),)) ) 1573 _uni = utils.mapping(_tuni, (text(height),))
1574 _str = _uni.encode("utf-8")
1575 raise ValueError(_str)
1485 _DD = abs(decimals.DD) 1576 _DD = abs(decimals.DD)
1486 height = round(height, _DD) 1577 height = round(height, _DD)
1487 self.__height = height 1578 self.__height = height
1488 try: 1579 try:
1489 self.calculateParcial(decimals) 1580 self.calculateParcial(decimals)
1490 except AttributeError: 1581 except AttributeError:
1491 pass 1582 pass
1492 1583
1493 def setFormula(self, formula, decimals): 1584 def setFormula(self, formula, decimals):
1494 if not isinstance(formula, str): 1585 if not isinstance(formula, text_type):
1495 raise ValueError( utils.mapping(_("Formula must be a "\ 1586 _tuni = _("Formula must be a text string ($1)")
1496 "string ($1)"), (str(formula),)) ) 1587 _uni = utils.mapping(_tuni, (formula,))
1588 _str = _uni.encode("utf-8")
1589 raise ValueError(_str)
1497 if re.match(".*[^0123456789\.()\+\-\*/\^abcdp ].*", formula): 1590 if re.match(".*[^0123456789\.()\+\-\*/\^abcdp ].*", formula):
1498 raise ValueError( utils.mapping(_("There is invalid characters"\ 1591 _tuni = _("There is invalid characters in formula ($1)")
1499 "in formula ($1)"), (str(formula),)) ) 1592 _uni = utils.mapping(_tuni, (formula,))
1593 _str = _uni.encode("utf-8")
1594 raise ValueError(_str)
1500 self.__formula = formula 1595 self.__formula = formula
1501 try: 1596 try:
1502 self.calculateParcial(decimals) 1597 self.calculateParcial(decimals)
1503 except AttributeError: 1598 except AttributeError:
1504 pass 1599 pass
1559 if c == "": c = 0.0 1654 if c == "": c = 0.0
1560 if d == "": d = 0.0 1655 if d == "": d = 0.0
1561 try: 1656 try:
1562 a = float(a) 1657 a = float(a)
1563 except: 1658 except:
1564 raise ValueError( _("'a' value must be a float number") ) 1659 _tuni = _("'a' value must be a float number")
1660 _str = _tuni.encode("utf-8")
1661 raise ValueError(_str)
1565 try: 1662 try:
1566 b = float(b) 1663 b = float(b)
1567 except: 1664 except:
1568 raise ValueError( _("'b' value must be a float number") ) 1665 _tuni = _("'b' value must be a float number")
1666 _str = _tuni.encode("utf-8")
1667 raise ValueError(_str)
1569 try: 1668 try:
1570 c = float(c) 1669 c = float(c)
1571 except: 1670 except:
1572 raise ValueError( _("'c' value must be a float number") ) 1671 _tuni = _("'c' value must be a float number")
1672 _str = _tuni.encode("utf-8")
1673 raise ValueError(_str)
1573 try: 1674 try:
1574 d = float(d) 1675 d = float(d)
1575 except: 1676 except:
1576 raise ValueError( _("'d' value must be a float number") ) 1677 _tuni = _("'d' value must be a float number")
1678 _str = _tuni.encode("utf-8")
1679 raise ValueError(_str)
1577 # spaces are erased 1680 # spaces are erased
1578 formula.replace(" ","") 1681 formula.replace(" ","")
1579 # operators and varibles are replaced 1682 # operators and varibles are replaced
1580 formula = formula.replace("+", " + ") 1683 formula = formula.replace("+", " + ")
1581 formula = formula.replace("-", " - ") 1684 formula = formula.replace("-", " - ")
1582 formula = formula.replace("*", " * ") 1685 formula = formula.replace("*", " * ")
1583 formula = formula.replace("/", " / ") 1686 formula = formula.replace("/", " / ")
1584 formula = formula.replace("^", " ** ") 1687 formula = formula.replace("^", " ** ")
1585 formula = formula.replace("(", " ( ") 1688 formula = formula.replace("(", " ( ")
1586 formula = formula.replace(")", " ) ") 1689 formula = formula.replace(")", " ) ")
1587 formula = formula.replace("a", str(a)) 1690 formula = formula.replace("a", text(a))
1588 formula = formula.replace("b", str(b)) 1691 formula = formula.replace("b", text(b))
1589 formula = formula.replace("c", str(c)) 1692 formula = formula.replace("c", text(c))
1590 formula = formula.replace("d", str(d)) 1693 formula = formula.replace("d", text(d))
1591 formula = formula.replace("p", "3.1415926") 1694 formula = formula.replace("p", "3.1415926")
1592 _list_formula = formula.split(" ") 1695 _list_formula = formula.split(" ")
1593 _formula2 = "" 1696 _formula2 = ""
1594 for oper in _list_formula: 1697 for oper in _list_formula:
1595 try: 1698 try:
1596 _float_oper= str(float(oper)) 1699 _float_oper= text(float(oper))
1597 _formula2 = _formula2 + _float_oper 1700 _formula2 = _formula2 + _float_oper
1598 except ValueError: 1701 except ValueError:
1599 _formula2 = _formula2 + oper 1702 _formula2 = _formula2 + oper
1600 _g ={"__builtins__":{}} 1703 _g ={"__builtins__":{}}
1601 try: 1704 try:
1602 return eval(_formula2, _g) 1705 return eval(_formula2, _g)
1603 except: 1706 except:
1604 raise ValueError( _("Invalid formula") ) 1707 _tuni = _("Invalid formula")
1708 _str = _tuni.encode("utf-8")
1709 raise ValueError(_str)
1605 1710
1606 1711
1607 class Decimals(object): 1712 class Decimals(object):
1608 """base.Decimals: 1713 """base.Decimals:
1609 1714
1853 def getSheet_dict(self): 1958 def getSheet_dict(self):
1854 return self.__sheet_dict 1959 return self.__sheet_dict
1855 1960
1856 def setSheet_dict(self, sheet_dict): 1961 def setSheet_dict(self, sheet_dict):
1857 if not isinstance(sheet_dict, dict): 1962 if not isinstance(sheet_dict, dict):
1858 raise ValueError( _("sheet_dict must be a dictionay") ) 1963 _tuni = _("sheet_dict must be a dictionay")
1964 _str = _tuni.encode("utf-8")
1965 raise ValueError(_str)
1859 self.__sheet_dict = sheet_dict 1966 self.__sheet_dict = sheet_dict
1860 1967
1861 def getFields(self): 1968 def getFields(self):
1862 return self.sheet_dict.keys() 1969 return self.sheet_dict.keys()
1863 1970
1873 return self.__sheet_dict[field][section] 1980 return self.__sheet_dict[field][section]
1874 else: 1981 else:
1875 return None 1982 return None
1876 1983
1877 def addField(self, field, section_dict): 1984 def addField(self, field, section_dict):
1878 if not isinstance(field, str): 1985 if not isinstance(field, text_type):
1879 raise ValueError( _("sheet field must be a string") ) 1986 _tuni = _("sheet field must be a text string")
1987 _str = _tuni.encode("utf-8")
1988 raise ValueError(_str)
1880 if not isinstance(section_dict, dict): 1989 if not isinstance(section_dict, dict):
1881 raise ValueError( _("section_dict must be a dictionary") ) 1990 _tuni = _("section_dict must be a dictionary")
1991 _str = _tuni.encode("utf-8")
1992 raise ValueError(_str)
1882 self.__sheet_dict[field] = section_dict 1993 self.__sheet_dict[field] = section_dict
1883 1994
1884 def addSection(self, field, section, paragraph): 1995 def addSection(self, field, section, paragraph):
1885 if not isinstance(field, str): 1996 if not isinstance(field, text_type):
1886 raise ValueError( _("sheet field must be a string") ) 1997 _tuni = _("sheet field must be a text string")
1887 if not isinstance(section, str): 1998 _str = _tuni.encode("utf-8")
1888 raise ValueError( _("sheet section must be a string") ) 1999 raise ValueError(_str)
1889 if not isinstance(paragraph, str): 2000 if not isinstance(section, text_type):
1890 raise ValueError( _("sheet paragraph must be a string") ) 2001 _tuni = _("sheet section must be a text string")
2002 _str = _tuni.encode("utf-8")
2003 raise ValueError(_str)
2004 if not isinstance(paragraph, text_type):
2005 _tuni = _("sheet paragraph must be a text string")
2006 _str = _tuni.encode("utf-8")
2007 raise ValueError(_str)
1891 if not field in self.__sheet_dict: 2008 if not field in self.__sheet_dict:
1892 self.addField(field, { }) 2009 self.addField(field, { })
1893 _field = self.__sheet_dict[field] 2010 _field = self.__sheet_dict[field]
1894 _field[section] = paragraph 2011 _field[section] = paragraph
1895 2012
2170 """setOwner(self, owner) 2287 """setOwner(self, owner)
2171 2288
2172 owner: data owner 2289 owner: data owner
2173 Set the data owner. 2290 Set the data owner.
2174 """ 2291 """
2175 if isinstance(owner, basestring): 2292 if isinstance(owner, text_type):
2176 self.__file_owner = owner 2293 self.__file_owner = owner
2177 else: 2294 else:
2178 raise TypeError( _("Owner must be a string") ) 2295 _tuni = _("Owner must be a text string")
2296 _str = _tuni.encode("utf-8")
2297 raise TypeError(_str)
2179 2298
2180 def setDate(self, date): 2299 def setDate(self, date):
2181 """setOwner(self, date) 2300 """setOwner(self, date)
2182 2301
2183 date (_y, _m, _d) 2302 date (_y, _m, _d)
2189 date[2] in range(32): 2308 date[2] in range(32):
2190 if date[1] != 0 and date[2] != 0: 2309 if date[1] != 0 and date[2] != 0:
2191 datetime.date(*date) 2310 datetime.date(*date)
2192 self.__date = date 2311 self.__date = date
2193 else: 2312 else:
2194 raise TypeError(utils.mapping(_("Invalid Date: $1"),(str(date),))) 2313 _tuni = _("Invalid Date: $1")
2314 _uni = utils.mapping(_tuni,(text(date),))
2315 _str = _uni.encode("utf-8")
2316 raise TypeError(_str)
2195 2317
2196 def setComment(self, comment): 2318 def setComment(self, comment):
2197 """setOwner(self, comment) 2319 """setOwner(self, comment)
2198 2320
2199 comment: text to comment the budged 2321 comment: text to comment the budged
2200 Set the comment. 2322 Set the comment.
2201 """ 2323 """
2202 if isinstance(comment, basestring): 2324 if isinstance(comment, text_type):
2203 self.__comment = comment 2325 self.__comment = comment
2204 else: 2326 else:
2205 raise TypeError( _("Comment must be a string") ) 2327 _tuni = _("Comment must be a text string")
2328 _str = _tuni.encode("utf-8")
2329 raise TypeError(_str)
2206 2330
2207 def setBudgeType(self, budget_type): 2331 def setBudgeType(self, budget_type):
2208 """setOwner(self, budget_type) 2332 """setOwner(self, budget_type)
2209 2333
2210 budget_type: type of data in budget 2334 budget_type: type of data in budget
2216 Set the budget type. 2340 Set the budget type.
2217 """ 2341 """
2218 if budget_type in [1, 2, 3, 4]: 2342 if budget_type in [1, 2, 3, 4]:
2219 self.__budgetType = budget_type 2343 self.__budgetType = budget_type
2220 else: 2344 else:
2221 raise ValueError( _("Budget type must be 1, 2, 3 or 4.") ) 2345 _tuni = _("Budget type must be 1, 2, 3 or 4.")
2346 _str = _tuni.encode("utf-8")
2347 raise ValueError(_str)
2222 2348
2223 def setCertificateOrder(self, certificate_order, certificate_date): 2349 def setCertificateOrder(self, certificate_order, certificate_date):
2224 """setOwner(self, budget_type) 2350 """setOwner(self, budget_type)
2225 2351
2226 certificate_order: certificate number 2352 certificate_order: certificate number
2228 Set the certificate order and date. 2354 Set the certificate order and date.
2229 """ 2355 """
2230 if isinstance(certificate_order, int): 2356 if isinstance(certificate_order, int):
2231 self.__budgetCerficateOrder = certificate_order 2357 self.__budgetCerficateOrder = certificate_order
2232 else: 2358 else:
2233 raise ValueError( _("Certificate order must be a integer.") ) 2359 _tuni = _("Certificate order must be a integer.")
2360 _str = _tuni.encode("utf-8")
2361 raise ValueError(_str)
2234 2362
2235 def setCertificateDater(self, certificate_date): 2363 def setCertificateDater(self, certificate_date):
2236 """setCertidicateDate(self, certificate_date) 2364 """setCertidicateDate(self, certificate_date)
2237 2365
2238 Set the certificate date. 2366 Set the certificate date.
2243 isinstance(certificate_date[1], int) and \ 2371 isinstance(certificate_date[1], int) and \
2244 isinstance(certificate_date[2], int): 2372 isinstance(certificate_date[2], int):
2245 datetime.date(*certificate_date) 2373 datetime.date(*certificate_date)
2246 self.__budgetCerficateDate = certificate_date 2374 self.__budgetCerficateDate = certificate_date
2247 else: 2375 else:
2248 _str = _("Budget certificate Date must be a valid Date.") 2376 _tuni = _("Budget certificate Date must be a valid Date.")
2377 _str = _tuni.encode("utf-8")
2249 raise ValueError(_str) 2378 raise ValueError(_str)
2250 2379
2251 def setTitleList(self, title_list): 2380 def setTitleList(self, title_list):
2252 """setTitleList(self, title_list) 2381 """setTitleList(self, title_list)
2253 2382
2254 title_list: [ "Header", ["Title1", "Title2", ... ] ] 2383 title_list: [ "Header", ["Title1", "Title2", ... ] ]
2255 Set the header and titles for the price groups and decimals. 2384 Set the header and titles for the price groups and decimals.
2256 """ 2385 """
2257 title_list[0] = str(title_list[0]) 2386 title_list[0] = text(title_list[0])
2258 if isinstance(title_list, list) and isinstance(title_list[1], list): 2387 if isinstance(title_list, list) and isinstance(title_list[1], list):
2259 for i in range(len(title_list[1])): 2388 for i in range(len(title_list[1])):
2260 title_list[1][i] = str(title_list[1][i]) 2389 title_list[1][i] = text(title_list[1][i])
2261 self.__title_list = title_list 2390 self.__title_list = title_list
2262 else: 2391 else:
2263 raise TypeError( _("Invalid title list format") ) 2392 _tuni = _("Invalid title list format")
2393 _str = _tuni.encode("utf-8")
2394 raise TypeError(_str)
2264 2395
2265 def getTitleList(self): 2396 def getTitleList(self):
2266 """ getTitleList(self) 2397 """ getTitleList(self)
2267 2398
2268 Returns the header and titles for the price groups and decimals. 2399 Returns the header and titles for the price groups and decimals.
2287 _default_decimals = self.__decimals[0] 2418 _default_decimals = self.__decimals[0]
2288 self.__decimals.append(_default_decimals) 2419 self.__decimals.append(_default_decimals)
2289 elif N < len(self.__decimals): 2420 elif N < len(self.__decimals):
2290 _default_decimals = self.__decimals[N] 2421 _default_decimals = self.__decimals[N]
2291 else: 2422 else:
2292 raise IndexError( _("Invalid Index Title") ) 2423 _tuni = _("Invalid Index Title")
2424 _str = _tuni.encode("utf-8")
2425 raise IndexError(_str)
2293 for _decimal in dictionary: 2426 for _decimal in dictionary:
2294 if dictionary[_decimal] == "": 2427 if dictionary[_decimal] == "":
2295 dictionary[_decimal] = eval("_default_decimals." + _decimal) 2428 dictionary[_decimal] = eval("_default_decimals." + _decimal)
2296 decimals = Decimals(dictionary["DN"], dictionary["DD"], 2429 decimals = Decimals(dictionary["DN"], dictionary["DD"],
2297 dictionary["DSP"], dictionary["DS"], 2430 dictionary["DSP"], dictionary["DS"],
2362 elif key == "keys": 2495 elif key == "keys":
2363 return self.__percentages.keys 2496 return self.__percentages.keys
2364 elif key in self.__percentages: 2497 elif key in self.__percentages:
2365 return self.__percentages[key] 2498 return self.__percentages[key]
2366 else: 2499 else:
2367 raise KeyError( _("Invalid Percentage key") ) 2500 _tuni = _("Invalid Percentage key")
2501 _str = _tuni.encode("utf-8")
2502 raise KeyError(_str)
2368 2503
2369 def getAllParents(self,code): 2504 def getAllParents(self,code):
2370 """getAllParents(self,code) 2505 """getAllParents(self,code)
2371 2506
2372 code: a record code. 2507 code: a record code.
2433 _decomposition = self.getDecomposition(path) 2568 _decomposition = self.getDecomposition(path)
2434 _measure = _decomposition.budgetMeasures[0] 2569 _measure = _decomposition.budgetMeasures[0]
2435 return _measure 2570 return _measure
2436 2571
2437 def getStrYield(self, measure, recordType): 2572 def getStrYield(self, measure, recordType):
2438 #_DR = measure.getDR(self.getDecimals())
2439 _DR = abs(self.getDecimals().getDR(recordType)) 2573 _DR = abs(self.getDecimals().getDR(recordType))
2440 _yield = ("%." + str(_DR) + "f" ) % measure.yield_ 2574 _yield = ("%." + text(_DR) + "f" ) % measure.yield_
2441 return _yield 2575 return _yield
2442 2576
2443 def getStrFactor(self, measure, recorType): 2577 def getStrFactor(self, measure, recorType):
2444 _DF = abs(self.getDecimals().getDF(recordType)) 2578 _DF = abs(self.getDecimals().getDF(recordType))
2445 #_DF = measure.getDF(self.getDecimals()) 2579 _factor = ("%." + text(_DF) + "f" ) % measure.factor
2446 _factor = ("%." + str(_DF) + "f" ) % measure.factor
2447 return _factor 2580 return _factor
2448 2581
2449 def setTree(self, code, child_code, position, factor, yield_, total, 2582 def setTree(self, code, child_code, position, factor, yield_, total,
2450 list_lines, label, type_): 2583 list_lines, label, type_):
2451 """setTree(self, code, child_code, position, factor,yield_, total, 2584 """setTree(self, code, child_code, position, factor,yield_, total,
2479 Sets the decomposition of a record in a child record 2612 Sets the decomposition of a record in a child record
2480 """ 2613 """
2481 if code is None: # No-estructured measures 2614 if code is None: # No-estructured measures
2482 code = self.getRoot() 2615 code = self.getRoot()
2483 if code == None: # No root 2616 if code == None: # No root
2484 print( "No-estructured measures. Adding root record " + 2617 _record = self.setRecord("root", [], 0, "", "", [0.0,],
2485 str(self.setRecord("root", [], 0, "", "", [0.0,], [(1,1,1970)], 2618 [(1,1,1970)], 0, "")
2486 0, "") ).encode("utf8")) 2619 _tuni = _("No-estructured measures. Adding root record")
2620 print(_tuni)
2487 code = self.getRoot() 2621 code = self.getRoot()
2488 2622
2489 if not utils.is_valid_code(code)[0]: 2623 if not utils.is_valid_code(code)[0]:
2490 raise ValueError( utils.mapping(_("Invalid parent code: $1"), 2624 _tuni = _("Invalid parent code: $1")
2491 (str(code),)) ) 2625 _uni = utils.mapping(_tuni, (code,))
2626 _str = _uni.encode("utf-8")
2627 raise ValueError(_str)
2492 if not utils.is_valid_code(child_code)[0]: 2628 if not utils.is_valid_code(child_code)[0]:
2493 raise ValueError( utils.mapping(_("Invalid child code: $1 $2"), 2629 _tuni = _("Invalid child code: $1 $2")
2494 (str(code),str(child_code))) ) 2630 _uni = utils.mapping(_tuni, (code,child_code))
2631 _str = _uni.encode("utf-8")
2632 raise ValueError(_str)
2495 if not isinstance(position, int): 2633 if not isinstance(position, int):
2496 raise ValueError( utils.mapping(_("Invalid position in measure "\ 2634 _tuni = _("Invalid position in measure $1, in code $2 $3")
2497 "$1, in code $2"), (str(parent_code), str(position))) ) 2635 _uni = utils.mapping(_tuni, (text(position), code, child_code))
2636 _str = _uni.encode("utf-8")
2637 raise ValueError(_str)
2498 # Test circular references 2638 # Test circular references
2499 _all_parent_list = self.getAllParents(code) + [ code ] 2639 _all_parent_list = self.getAllParents(code) + [ code ]
2500 _all_child_list = self.getAllchildren(child_code) + [ child_code ] 2640 _all_child_list = self.getAllchildren(child_code) + [ child_code ]
2501 for _parent_code in _all_parent_list: 2641 for _parent_code in _all_parent_list:
2502 if _parent_code in _all_child_list: 2642 if _parent_code in _all_child_list:
2503 # TODO: change return to except 2643 # TODO: change return to except
2504 _str = _("Circular Decomposition, parent code: "\ 2644 _tuni = _("Circular Decomposition, parent code: "\
2505 "$1, child code: $2, repeated code: $3") 2645 "$1, child code: $2, repeated code: $3")
2506 print(utils.mapping(_str, (str(code), str(child_code), 2646 _uni = utils.mapping(_tuni, (code, child_code, _parent_code))
2507 str(_parent_code))).encode("utf8") ) 2647 print(_uni)
2508 return 2648 return
2509 2649
2510 # Creating reference to parent code in child record 2650 # Creating reference to parent code in child record
2511 if child_code in self.__records: 2651 if child_code in self.__records:
2512 _child_record = self.__records[child_code] 2652 _child_record = self.__records[child_code]
2526 # No-estructured measures or empty position (error in FIEBDC file) 2666 # No-estructured measures or empty position (error in FIEBDC file)
2527 if position == -2: 2667 if position == -2:
2528 positions = _record.getChildPositions(child_code) 2668 positions = _record.getChildPositions(child_code)
2529 if len(positions) == 1: 2669 if len(positions) == 1:
2530 position = positions[0] 2670 position = positions[0]
2531 _str = _("No-estructured measure or empty position. " \ 2671 _tuni = _("No-estructured measure or empty position. " \
2532 "Parent Code: $1, Child code: $2, Position: $3") 2672 "Parent Code: $1, Child code: $2, Position: $3")
2533 print(utils.mapping(_str,(str(code), str(child_code), 2673 _uni = utils.mapping(_tuni,(code, child_code,
2534 str(position))).encode("utf8") ) 2674 text(position)))
2675 print(_uni)
2535 else: 2676 else:
2536 position = _child_number 2677 position = _child_number
2537 _str = _("No-estructured measure or empty position. "\ 2678 _tuni = _("No-estructured measure or empty position. "\
2538 "Repeated child in unspecified position. "\ 2679 "Repeated child in unspecified position. "\
2539 "It is impossible to determine the position. "\ 2680 "It is impossible to determine the position. "\
2540 "New child is added in the decomposition. "\ 2681 "New child is added in the decomposition. "\
2541 "Parent code: $1, Child code: $2, Position: $3") 2682 "Parent code: $1, Child code: $2, Position: $3")
2542 print(utils.mapping(_str,(str(code), str(child_code), 2683 _uni = utils.mapping(_tuni,(code, child_code,
2543 str(position))).encode("utf8") ) 2684 text(position)))
2685 print(_uni)
2544 if position == _child_number: 2686 if position == _child_number:
2545 # The record do not have the child 2687 # The record do not have the child
2546 if not isinstance(factor, float): factor = 1.0 2688 if not isinstance(factor, float): factor = 1.0
2547 if not isinstance(yield_, float): yield_ = 1.0 2689 if not isinstance(yield_, float): yield_ = 1.0
2548 if not isinstance(total, float): total = 0.0 2690 if not isinstance(total, float): total = 0.0
2570 yield_ = 0.0 2712 yield_ = 0.0
2571 _measure.setMeasure(total, self.getDecimals()) 2713 _measure.setMeasure(total, self.getDecimals())
2572 if isinstance(list_lines, list) and len(list_lines) > 0: 2714 if isinstance(list_lines, list) and len(list_lines) > 0:
2573 _measure.buildMeasure(list_lines, type_, self.getDecimals(), 2715 _measure.buildMeasure(list_lines, type_, self.getDecimals(),
2574 _record.recordType) 2716 _record.recordType)
2575 if isinstance(label, str) and label != "" : 2717 if isinstance(label, text_type) and label != "" :
2576 _measure.label = label 2718 _measure.label = label
2577 else: 2719 else:
2578 # TODO: change return for except 2720 # TODO: change return for except
2579 _str = _("Error: Invalid child position in " 2721 _tuni = _("Error: Invalid child position in "
2580 "decomposition. Parent code: $1 Child code: $2 "\ 2722 "decomposition. Parent code: $1 Child code: $2 "\
2581 "Position: $3") 2723 "Position: $3")
2582 print(utils.mapping(_str, (str(code), str(child_code), 2724 _uni = utils.mapping(_tuni, (code, child_code,
2583 str(position))).encode("utf8") ) 2725 text(position)))
2726 print(_uni)
2584 return 2727 return
2585 else: 2728 else:
2586 if child_code == "" : 2729 if child_code == "" :
2587 _str = _("Error: Empty child code. Parent code: "\ 2730 _tuni = _("Error: Empty child code. Parent code: "\
2588 "$1 Position: $2") 2731 "$1 Position: $2")
2589 print(utils.mapping(_str, (str(code), 2732 _uni = utils.mapping(_tuni, (code, text(position)))
2590 str(position))).encode("utf8") ) 2733 print(_uni)
2591 return 2734 return
2592 if position == -1: 2735 if position == -1:
2593 position = 0 2736 position = 0
2594 elif position != 0: 2737 elif position != 0:
2595 _str = _("Error: Invalid child position in "\ 2738 _tuni = _("Error: Invalid child position in "\
2596 "decomposition. Parent code: $1 Child code: $2 "\ 2739 "decomposition. Parent code: $1 Child code: $2 "\
2597 "Position: $3") 2740 "Position: $3")
2598 print(utils.mapping(_str, (str(code), str(child_code), 2741 _uni = utils.mapping(_tuni, (code, child_code,
2599 str(position))).encode("utf8") ) 2742 text(position)))
2743 print(_uni)
2600 return 2744 return
2601 if not isinstance(factor, float): 2745 if not isinstance(factor, float):
2602 factor = 1.0 2746 factor = 1.0
2603 if not isinstance(yield_, float): 2747 if not isinstance(yield_, float):
2604 yield_ = 1.0 2748 yield_ = 1.0
2627 if c == "": c = 0.0 2771 if c == "": c = 0.0
2628 if d == "": d = 0.0 2772 if d == "": d = 0.0
2629 try: 2773 try:
2630 a = float(a) 2774 a = float(a)
2631 except: 2775 except:
2632 raise ValueError( _("'a' value must be a float number") ) 2776 _tuni = _("'a' value must be a float number")
2777 _str = _tuni.encode("utf-8")
2778 raise ValueError(_str)
2633 try: 2779 try:
2634 b = float(b) 2780 b = float(b)
2635 except: 2781 except:
2636 raise ValueError( _("'b' value must be a float number") ) 2782 _tuni = _("'b' value must be a float number")
2783 _str = _tuni.encode("utf-8")
2784 raise ValueError(_str)
2637 try: 2785 try:
2638 c = float(c) 2786 c = float(c)
2639 except: 2787 except:
2640 raise ValueError( _("'c' value must be a float number") ) 2788 _tuni = _("'c' value must be a float number")
2789 _str = _tuni.encode("utf-8")
2790 raise ValueError(_str)
2641 try: 2791 try:
2642 d = float(d) 2792 d = float(d)
2643 except: 2793 except:
2644 raise ValueError( _("'d' value must be a float number") ) 2794 _tuni = _("'d' value must be a float number")
2795 _str = _tuni.encode("utf-8")
2796 raise ValueError(_str)
2645 # spaces are erased 2797 # spaces are erased
2646 sre.sub("[ ]","",formula) 2798 sre.sub("[ ]","",formula)
2647 # operators and varibles are replaced 2799 # operators and varibles are replaced
2648 formula = formula.replace("+", " + ") 2800 formula = formula.replace("+", " + ")
2649 formula = formula.replace("-", " - ") 2801 formula = formula.replace("-", " - ")
2650 formula = formula.replace("*", " * ") 2802 formula = formula.replace("*", " * ")
2651 formula = formula.replace("/", " / ") 2803 formula = formula.replace("/", " / ")
2652 formula = formula.replace("^", " ** ") 2804 formula = formula.replace("^", " ** ")
2653 formula = formula.replace("(", " ( ") 2805 formula = formula.replace("(", " ( ")
2654 formula = formula.replace(")", " ) ") 2806 formula = formula.replace(")", " ) ")
2655 formula = formula.replace("a", str(a)) 2807 formula = formula.replace("a", text(a))
2656 formula = formula.replace("b", str(b)) 2808 formula = formula.replace("b", text(b))
2657 formula = formula.replace("c", str(c)) 2809 formula = formula.replace("c", text(c))
2658 formula = formula.replace("d", str(d)) 2810 formula = formula.replace("d", text(d))
2659 formula = formula.replace("p", "3.1415926") 2811 formula = formula.replace("p", "3.1415926")
2660 _list_formula = formula.split(" ") 2812 _list_formula = formula.split(" ")
2661 _formula2 = "" 2813 _formula2 = ""
2662 for oper in _list_formula: 2814 for oper in _list_formula:
2663 try: 2815 try:
2664 _float_oper= str(float(oper)) 2816 _float_oper= text(float(oper))
2665 _formula2 = _formula2 + _float_oper 2817 _formula2 = _formula2 + _float_oper
2666 except ValueError: 2818 except ValueError:
2667 _formula2 = _formula2 + oper 2819 _formula2 = _formula2 + oper
2668 _g = {"__builtins__":{}} 2820 _g = {"__builtins__":{}}
2669 try: 2821 try:
2670 return eval(_formula2, _g) 2822 return eval(_formula2, _g)
2671 except: 2823 except:
2672 raise ValueError( _("Invalid formula") ) 2824 _tuni = _("Invalid formula")
2825 _str = _tuni.encode("utf-8")
2826 raise ValueError(_str)
2673 2827
2674 def getText(self,code): 2828 def getText(self,code):
2675 """getText(self,code) 2829 """getText(self,code)
2676 2830
2677 code: the record code 2831 code: the record code
2678 Returns the description text of a record 2832 Returns the description text of a record
2679 """ 2833 """
2680 if code in self.__records: 2834 if code in self.__records:
2681 return self.__records[code].text 2835 return self.__records[code].text
2682 else: 2836 else:
2683 raise IndexError( _("Invalid code") ) 2837 _tuni = _("Invalid code")
2838 _str = _tuni.encode("utf-8")
2839 raise IndexError(_str)
2684 2840
2685 def setText(self,code,text): 2841 def setText(self,code,text):
2686 """setText(self,code,text) 2842 """setText(self,code,text)
2687 2843
2688 code: the parent record code 2844 code: the parent record code
2689 text: the descripion text 2845 text: the descripion text
2690 Sests the description text of a record 2846 Sests the description text of a record
2691 """ 2847 """
2692 if not utils.is_valid_code(code)[0]: 2848 if not utils.is_valid_code(code)[0]:
2693 _str = _("Invalid record: $1") 2849 _tuni = _("Invalid record: $1")
2694 raise ValueError( utils.mapping(_str, (str(code),)) ) 2850 _uni = utils.mapping(_tuni, (code,))
2851 _str = _uni.encode("utf-8")
2852 raise ValueError(_str)
2695 if not code in self.__records: 2853 if not code in self.__records:
2696 _record = self.setRecord(code, [], "", "", "", [], [], 2854 _record = self.setRecord(code, [], "", "", "", [], [],
2697 "", "") 2855 "", "")
2698 _record.text = text 2856 _record.text = text
2699 else: 2857 else:
2752 if hierarchy == 0 : 2910 if hierarchy == 0 :
2753 # is the root record 2911 # is the root record
2754 if self.__root is None: 2912 if self.__root is None:
2755 self.__root = code 2913 self.__root = code
2756 else: 2914 else:
2757 print(_("Only can be one root record").encode("utf8") ) 2915 _tuni = _("Only can be one root record")
2916 print(_tuni)
2758 return 2917 return
2759 # TODO: If the root is created in settree. 2918 # TODO: If the root is created in settree.
2760 # No-estructured measures 2919 # No-estructured measures
2761 # TODO Rewrite root values 2920 # TODO Rewrite root values
2762 # retake previous values. 2921 # retake previous values.
2843 _amount_sum = _amount_sum + _amount 3002 _amount_sum = _amount_sum + _amount
2844 _price = _amount_sum 3003 _price = _amount_sum
2845 else: 3004 else:
2846 _price = record.getPrice(index_price) 3005 _price = record.getPrice(index_price)
2847 _D = abs(self.getDecimals().getD(record.recordType)) 3006 _D = abs(self.getDecimals().getD(record.recordType))
2848 _price = ("%." + str(_D) + "f" ) % _price 3007 _price = ("%." + text(_D) + "f" ) % _price
2849 return _price 3008 return _price
2850 3009
2851 def getCode(self, path): 3010 def getCode(self, path):
2852 """getCode(self, path) 3011 """getCode(self, path)
2853 3012
2862 _record = self.__records[_code] 3021 _record = self.__records[_code]
2863 _children_list = _record.children 3022 _children_list = _record.children
2864 try: 3023 try:
2865 _child = _children_list[i] 3024 _child = _children_list[i]
2866 except: 3025 except:
2867 raise ValueError( _("This record does not exits") ) 3026 _tuni = _("This record does not exits")
3027 _str = _tuni.encode("utf-8")
3028 raise ValueError(_str)
2868 _code = _child.code 3029 _code = _child.code
2869 else: 3030 else:
2870 raise ValueError( _("Path item must be a integer") ) 3031 _tuni = _("Path item must be a integer")
3032 _str = _tuni.encode("utf-8")
3033 raise ValueError(_str)
2871 return _code 3034 return _code
2872 else: 3035 else:
2873 raise ValueError( _("This record does not exits") ) 3036 _tuni = _("This record does not exits")
3037 _str = _tuni.encode("utf-8")
3038 raise ValueError(_str)
2874 else: 3039 else:
2875 raise ValueError( utils.mapping(_("Path must be a not empty "\ 3040 _tuni = _("Path must be a not empty tuple: $1")
2876 "tuple: $1"), (str(path),)) ) 3041 _uni = utils.mapping(_tuni, (text(path),))
3042 _str = _uni.encode("utf-8")
3043 raise ValueError(_str)
2877 3044
2878 def getAmount(self, path): 3045 def getAmount(self, path):
2879 """def getAmount(self,path) 3046 """def getAmount(self,path)
2880 3047
2881 path: record path 3048 path: record path
2889 return _amount 3056 return _amount
2890 else: 3057 else:
2891 _parent_code = self.getCode(path[:-1]) 3058 _parent_code = self.getCode(path[:-1])
2892 _parent_record = self.getRecord(_parent_code) 3059 _parent_record = self.getRecord(_parent_code)
2893 _child_number = path[-1] 3060 _child_number = path[-1]
2894
2895 _decomposition = _parent_record.children[_child_number] 3061 _decomposition = _parent_record.children[_child_number]
2896 _factor = _decomposition.budgetMeasures[0].factor 3062 _factor = _decomposition.budgetMeasures[0].factor
2897 _yield = _decomposition.budgetMeasures[0].yield_ 3063 _yield = _decomposition.budgetMeasures[0].yield_
2898 _child_code = _decomposition.code 3064 _child_code = _decomposition.code
2899 _child_record = self.getRecord(_child_code) 3065 _child_record = self.getRecord(_child_code)
2932 else: 3098 else:
2933 _parent_code = self.getCode(path[:-1]) 3099 _parent_code = self.getCode(path[:-1])
2934 _parent_record = self.getRecord(_parent_code) 3100 _parent_record = self.getRecord(_parent_code)
2935 _amount = self.getAmount(path) 3101 _amount = self.getAmount(path)
2936 _DI = abs(self.getDecimals().getDI(_parent_record.recordType)) 3102 _DI = abs(self.getDecimals().getDI(_parent_record.recordType))
2937 _amount = ("%." + str(_DI) + "f") % _amount 3103 _amount = ("%." + text(_DI) + "f") % _amount
2938 return _amount 3104 return _amount
2939 3105
2940 def setSheetSection(self,sheet_code,sheet_title): 3106 def setSheetSection(self,sheet_code,sheet_title):
2941 if not isinstance(sheet_code, str): 3107 if not isinstance(sheet_code, text_type):
2942 raise ValueError( _("The sheet code must be a string") ) 3108 _tuni = _("The sheet code must be a text string")
2943 if not isinstance(sheet_title, str): 3109 _str = _tuni.encode("utf-8")
2944 raise ValueError( _("The sheet title must be a string") ) 3110 raise ValueError(_str)
3111 if not isinstance(sheet_title, text_type):
3112 _tuni = _("The sheet title must be a text string")
3113 _str = _tuni.encode("utf-8")
3114 raise ValueError(_str)
2945 self.__sheet_sections[sheet_code] = sheet_title 3115 self.__sheet_sections[sheet_code] = sheet_title
2946 3116
2947 def hasSheetSection(self, section): 3117 def hasSheetSection(self, section):
2948 return section in self.__sheet_sections 3118 return section in self.__sheet_sections
2949 3119
2950 def getSheetSection(self, section): 3120 def getSheetSection(self, section):
2951 return self.__sheet_sections[section] 3121 return self.__sheet_sections[section]
2952 3122
2953 def setSheetSections(self,dictionary): 3123 def setSheetSections(self,dictionary):
2954 if not isinstance(dictionary, dict): 3124 if not isinstance(dictionary, dict):
2955 raise ValueError( _("The sheet sections must be a dictionary") ) 3125 _tuni = _("The sheet sections must be a dictionary")
3126 _str = _tuni.encode("utf-8")
3127 raise ValueError(_str)
2956 for sheet_code in dictionary.keys(): 3128 for sheet_code in dictionary.keys():
2957 self.setSheetSection(sheet_code, dictionary[sheet_code]) 3129 self.setSheetSection(sheet_code, dictionary[sheet_code])
2958 3130
2959 def setSheetField(self, field_code, field_title): 3131 def setSheetField(self, field_code, field_title):
2960 if not isinstance(field_code, str): 3132 if not isinstance(field_code, text_type):
2961 raise ValueError( _("The field code must be a string") ) 3133 _tuni = _("The field code must be a text string")
2962 if not isinstance(field_title, str): 3134 _str = _tuni.encode("utf-8")
2963 raise ValueError( _("The field title must be a string") ) 3135 raise ValueError(_str)
3136 if not isinstance(field_title, text_type):
3137 _tuni = _("The field title must be a text string")
3138 _str = _tuni.encode("utf-8")
3139 raise ValueError(_str)
2964 self.__sheet_fields[field_code] = field_title 3140 self.__sheet_fields[field_code] = field_title
2965 3141
2966 def hasSheetField(self, field): 3142 def hasSheetField(self, field):
2967 return field in self.__sheet_fields 3143 return field in self.__sheet_fields
2968 3144
2969 def getSheetField(self, field): 3145 def getSheetField(self, field):
2970 return self.__sheet_fields[field] 3146 return self.__sheet_fields[field]
2971 3147
2972 def setSheetFields(self, field_dict): 3148 def setSheetFields(self, field_dict):
2973 if not isinstance(field_dict, dict): 3149 if not isinstance(field_dict, dict):
2974 raise ValueError( _("The sheet field must be a dictionary") ) 3150 _tuni = _("The sheet field must be a dictionary")
3151 _str = _tuni.encode("utf-8")
3152 raise ValueError(_str)
2975 for field_code in field_dict.keys(): 3153 for field_code in field_dict.keys():
2976 self.setSheetField( field_code, field_dict[field_code]) 3154 self.setSheetField( field_code, field_dict[field_code])
2977 3155
2978 def setSheetParagraph(self, paragraph_code, paragraph_text): 3156 def setSheetParagraph(self, paragraph_code, paragraph_text):
2979 if not isinstance(paragraph_code, str): 3157 if not isinstance(paragraph_code, text_type):
2980 raise ValueError( _("The paragraph code must be a string") ) 3158 _tuni = _("The paragraph code must be a text string")
2981 if not isinstance(paragraph_text, str): 3159 _str = _tuni.encode("utf-8")
2982 raise ValueError( _("The paragraph text must be a string") ) 3160 raise ValueError(_str)
3161 if not isinstance(paragraph_text, text_type):
3162 _tuni = _("The paragraph text must be a text string")
3163 _str = _tuni.encode("utf-8")
3164 raise ValueError(_str)
2983 self.__sheet_paragraphs[paragraph_code] = paragraph_text 3165 self.__sheet_paragraphs[paragraph_code] = paragraph_text
2984 3166
2985 def hasSheetParagraph(self, paragraph): 3167 def hasSheetParagraph(self, paragraph):
2986 return paragraph in self.__sheet_paragraphs 3168 return paragraph in self.__sheet_paragraphs
2987 3169
2988 def getSheetParagraph(self, paragraph): 3170 def getSheetParagraph(self, paragraph):
2989 return self.__sheet_paragraphs[paragraph] 3171 return self.__sheet_paragraphs[paragraph]
2990 3172
2991 def setSheetParagraphs(self, paragraph_dict): 3173 def setSheetParagraphs(self, paragraph_dict):
2992 if not isinstance(paragraph_dict, dict): 3174 if not isinstance(paragraph_dict, dict):
2993 raise ValueError( _("The paragraph dict must be a dictionary") ) 3175 _tuni = _("The paragraph dict must be a dictionary")
3176 _str = _tuni.encode("utf-8")
3177 raise ValueError(_str)
2994 for paragraph_code in paragraph_dict.keys(): 3178 for paragraph_code in paragraph_dict.keys():
2995 self.setSheetParagraph(paragraph_code, 3179 self.setSheetParagraph(paragraph_code,
2996 paragraph_dict[paragraph_code]) 3180 paragraph_dict[paragraph_code])
2997 3181
2998 def setSheetRecord(self, record_code, field, section_dict): 3182 def setSheetRecord(self, record_code, field, section_dict):
2999 if not isinstance(record_code, str): 3183 if not isinstance(record_code, text_type):
3000 raise ValueError( _("The record_code code must be a string") ) 3184 _tuni = _("The record_code code must be a text string")
3001 if not isinstance(field, str): 3185 _str = _tuni.encode("utf-8")
3002 raise ValueError( _("The field must be a string") ) 3186 raise ValueError(_str)
3187 if not isinstance(field, text_type):
3188 _tuni = _("The field must be a text string")
3189 _str = _tuni.encode("utf-8")
3190 raise ValueError(_str)
3003 if not isinstance(section_dict, dict): 3191 if not isinstance(section_dict, dict):
3004 raise ValueError( _("The section dict must be a dictionary") ) 3192 _tuni = _("The section dict must be a dictionary")
3193 _str = _tuni.encode("utf-8")
3194 raise ValueError(_str)
3005 #-# 3195 #-#
3006 # TODO: Add a empty record? 3196 # TODO: Add a empty record?
3007 if not self.hasRecord(record_code): 3197 if not self.hasRecord(record_code):
3008 _str = _("Error: The budget do not have this record "\ 3198 _tuni = _("Error: The budget do not have this record "\
3009 "code and can not be added the sheet text in the field $1. "\ 3199 "code and can not be added the sheet text in the field $1. "\
3010 "Record Code: $2") 3200 "Record Code: $2")
3011 print(utils.mapping(_str, ( str(field), 3201 _uni = utils.mapping(_tuni, ( text(field), record_code))
3012 str(record_code))).encode("utf8") ) 3202 print(_uni)
3013 return 3203 return
3014 #-# 3204 #-#
3015 if not self.hasSheetField(field): 3205 if not self.hasSheetField(field):
3016 self.setSheetField(field, "") 3206 self.setSheetField(field, "")
3017 for section, paragraph in section_dict.iteritems(): 3207 for (section, paragraph) in section_dict.items():
3018 if not self.hasSheetParagraph(paragraph): 3208 if not self.hasSheetParagraph(paragraph):
3019 self.setSheetParagraph(paragraph,"") 3209 self.setSheetParagraph(paragraph,"")
3020 if not self.hasSheetSection(section): 3210 if not self.hasSheetSection(section):
3021 self.setSheetSection(section, "") 3211 self.setSheetSection(section, "")
3022 _sheet = self.getRecord(record_code).getSheet() 3212 _sheet = self.getRecord(record_code).getSheet()
3023 _sheet.addSection(field, section, paragraph) 3213 _sheet.addSection(field, section, paragraph)
3024 3214
3025 def addFile(self, record_code, filepath, type_, description): 3215 def addFile(self, record_code, filepath, type_, description):
3026 if not isinstance(record_code, str): 3216 if not isinstance(record_code, text_type):
3027 raise ValueError( _("The record_code code must be a string") ) 3217 _tuni = _("The record_code code must be a text string")
3028 #-# str and unicode 3218 _str = _uni.encode("utf-8")
3029 if not isinstance(filepath, str) and not isinstance(filepath, unicode): 3219 raise ValueError(_str)
3030 raise ValueError( _("The filename must be a string") ) 3220 if not isinstance(filepath, text_type):
3031 #-# 3221 _tuni = _("The filename must be a text string")
3222 _str = _uni.encode("utf-8")
3223 raise ValueError(_str)
3032 # TODO: Add a empty record? 3224 # TODO: Add a empty record?
3033 if not self.hasRecord(record_code): 3225 if not self.hasRecord(record_code):
3034 print(utils.mapping(_("Error: The budget do not have the record "\ 3226 _tuni = _("Error: The budget do not have the record "\
3035 "code $1 and can not be added the file: $2"), 3227 "code $1 and can not be added the file: $2")
3036 (str(record_code), str(filepath))).encode("utf8") ) 3228 _uni = utils.mapping(_tuni, (record_code, filepath))
3229 print(_uni)
3037 return 3230 return
3038 #-#
3039 _record = self.getRecord(record_code) 3231 _record = self.getRecord(record_code)
3040 _record.addFile(filepath, type_, description) 3232 _record.addFile(filepath, type_, description)
3041 3233
3042 def setCompany(self, company_code, sumamary, name, offices, 3234 def setCompany(self, company_code, sumamary, name, offices,
3043 cif, web, email): 3235 cif, web, email):
3044 if not isinstance(company_code, str): 3236 if not isinstance(company_code, text_type):
3045 raise ValueError( _("The company code must be a string") ) 3237 _tuni = _("The company code must be a text string")
3046 if not isinstance(sumamary, str): 3238 _str = _tuni.encode("utf-8")
3047 raise ValueError( _("The summary must be a string") ) 3239 raise ValueError(_str)
3048 if not isinstance(name, str): 3240 if not isinstance(sumamary, text_type):
3049 raise ValueError( _("The name must be a string") ) 3241 _tuni = ("The summary must be a text string")
3242 _str = _tuni.encode("utf-8")
3243 raise ValueError(_str)
3244 if not isinstance(name, text_type):
3245 _tuni = _("The name must be a text string")
3246 _str = _tuni.encode("utf-8")
3247 raise ValueError(_str)
3050 if not isinstance(offices, list): 3248 if not isinstance(offices, list):
3051 raise ValueError( _("The name must be a list") ) 3249 _tuni = _("The name must be a list")
3250 _str = _tuni.encode("utf-8")
3251 raise ValueError(_str)
3052 _offices = [] 3252 _offices = []
3053 for _office in offices: 3253 for _office in offices:
3054 if not isinstance(_office, list): 3254 if not isinstance(_office, list):
3055 raise ValueError( _("The office must be a list") ) 3255 _tuni = _("The office must be a list")
3256 _str = _tuni.encode("utf-8")
3257 raise ValueError(_str)
3056 if not len(_office) == 10: 3258 if not len(_office) == 10:
3057 raise ValueError( _("The office must be a 10 items list") ) 3259 _tuni = _("The office must be a 10 items list")
3260 _str = _tuni.encode("utf-8")
3261 raise ValueError(_str)
3058 for _item in _office[:7] + _office[9:10]: 3262 for _item in _office[:7] + _office[9:10]:
3059 if not isinstance(_item, str): 3263 if not isinstance(_item, text_type):
3060 raise ValueError( _("This office item must be a "\ 3264 _tuni = _("This office item must be a text string")
3061 "string") ) 3265 _str = _tuni.encode("utf-8")
3266 raise ValueError(_str)
3062 for _item in _office[7:8]: 3267 for _item in _office[7:8]:
3063 if not isinstance(_item, list): 3268 if not isinstance(_item, list):
3064 raise ValueError( _("This office item must be a "\ 3269 _tuni = _("This office item must be a list")
3065 "list") ) 3270 _str = _tuni.encode("utf-8")
3271 raise ValueError(_str)
3066 _offices.append(Office(_office[0], 3272 _offices.append(Office(_office[0],
3067 _office[1], 3273 _office[1],
3068 _office[2], 3274 _office[2],
3069 _office[3], 3275 _office[3],
3070 _office[4], 3276 _office[4],
3071 _office[5], 3277 _office[5],
3072 _office[6], 3278 _office[6],
3073 _office[7], 3279 _office[7],
3074 _office[8], 3280 _office[8],
3075 _office[9])) 3281 _office[9]))
3076 if not isinstance(cif, str): 3282 if not isinstance(cif, text_type):
3077 raise ValueError( _("The name must be a string") ) 3283 _tuni = _("The name must be a text string")
3078 if not isinstance(web, str): 3284 _str = _tuni.encode("utf-8")
3079 raise ValueError( _("The web must be a string") ) 3285 raise ValueError(_str)
3080 if not isinstance(email, str): 3286 if not isinstance(web, text_type):
3081 raise ValueError( _("The email must be a string") ) 3287 _tuni = _("The web must be a text string")
3288 _str = _tuni.encode("utf-8")
3289 raise ValueError(_str)
3290 if not isinstance(email, text_type):
3291 _tuni = _("The email must be a text string")
3292 _str = _tuni.encode("utf-8")
3293 raise ValueError(_str)
3082 3294
3083 self.__companys[company_code] = Company(company_code, sumamary, name, 3295 self.__companys[company_code] = Company(company_code, sumamary, name,
3084 _offices, cif, web, email) 3296 _offices, cif, web, email)
3085 def getCompany(self, company_code): 3297 def getCompany(self, company_code):
3086 return self.__companys[company_code] 3298 return self.__companys[company_code]
3087 3299
3088 def getCompanyKeys(self): 3300 def getCompanyKeys(self):
3089 return self.__companys.keys() 3301 return self.__companys.keys()
3090 3302
3091 def addTecInfo(self, ti_code, text, unit): 3303 def addTecInfo(self, ti_code, text, unit):
3092 if not isinstance(ti_code, str): 3304 if not isinstance(ti_code, text_type):
3093 raise ValueError( _("The tecnical info code must be a string") ) 3305 _tuni = _("The tecnical info code must be a text string")
3094 if not isinstance(text, str): 3306 _str = _tuni.encode("utf-8")
3095 raise ValueError( _("The tecnical info description must be a "\ 3307 raise ValueError(_str)
3096 "string") ) 3308 if not isinstance(text, text_type):
3097 if not isinstance(unit, str): 3309 _tuni = _("The tecnical info description must be a text string")
3098 raise ValueError( _("The tecnical info unit must be a string") ) 3310 _str = _tuni.encode("utf-8")
3311 raise ValueError(_str)
3312 if not isinstance(unit, text_type):
3313 _tuni = _("The tecnical info unit must be a text string")
3314 _str = _tuni.encode("utf-8")
3315 raise ValueError(_str)
3099 self.__tec_info[ti_code] = [text, unit] 3316 self.__tec_info[ti_code] = [text, unit]
3100 3317
3101 def hasTecInfo(self, ti_code): 3318 def hasTecInfo(self, ti_code):
3102 return ti_code in self.__tec_info 3319 return ti_code in self.__tec_info
3103 3320
3143 def addLabel(self, record_code, label): 3360 def addLabel(self, record_code, label):
3144 """addLabel(self, record_code, label) 3361 """addLabel(self, record_code, label)
3145 3362
3146 Add a label to a record 3363 Add a label to a record
3147 """ 3364 """
3148 if not isinstance(label,str): 3365 if not isinstance(label, text_type):
3149 raise ValueError( _("The label must be a string") ) 3366 _tuni = _("The label must be a text string")
3367 _str = _tuni.encode("utf-8")
3368 raise ValueError(_str)
3150 if self.hasRecord(record_code): 3369 if self.hasRecord(record_code):
3151 _record = self.__records[record_code] 3370 _record = self.__records[record_code]
3152 _record.addLabel(label) 3371 _record.addLabel(label)
3153 if not label in self.__labels: 3372 if not label in self.__labels:
3154 self.__labels[label] = [record_code] 3373 self.__labels[label] = [record_code]
3160 def setParametricSelectComment(self, record_code, comment): 3379 def setParametricSelectComment(self, record_code, comment):
3161 """setParametricSelectComment(self, record_code, comment) 3380 """setParametricSelectComment(self, record_code, comment)
3162 3381
3163 Sets Paramtric Record Select Comment 3382 Sets Paramtric Record Select Comment
3164 """ 3383 """
3165 if not isinstance(record_code, str): 3384 if not isinstance(record_code, text_type):
3166 raise ValueError( _("The record_code code must be a string") ) 3385 _tuni = _("The record_code code must be a text string")
3167 if not isinstance(comment, str): 3386 _str = _tuni.encode("utf-8")
3168 raise ValueError( _("The parametric select comment must be a "\ 3387 raise ValueError(_str)
3169 "string") ) 3388 if not isinstance(comment, text_type):
3389 _tuni = _("The parametric select comment must be a text string")
3390 _str = _tuni.encode("utf-8")
3391 raise ValueError(_str)
3170 if not self.hasRecord(record_code): 3392 if not self.hasRecord(record_code):
3171 print(utils.mapping(_("Error: The budget do not have the record "\ 3393 _tuni = _("Error: The budget do not have the record "\
3172 "code $1 and can not be added the Parametric select comment: "\ 3394 "code $1 and can not be added the Parametric "\
3173 "$2"), 3395 "select comment: $2")
3174 (str(record_code), str(comment))).encode("utf8") ) 3396 _uni = utils.mapping(_tuni, (record_code, comment))
3397 print(_uni)
3175 return 3398 return
3176 _record = self.getRecord(record_code) 3399 _record = self.getRecord(record_code)
3177 if not isinstance(_record, ParametricRecord): 3400 if not isinstance(_record, ParametricRecord):
3178 print(utils.mapping(_("Error: The Record $1 is not a "\ 3401 _tuni = _("Error: The Record $1 is not a "\
3179 "Parametric Record and can not have Parametric comment"), 3402 "Parametric Record and can not have Parametric comment")
3180 (str(record_code),)).encode("utf8") ) 3403 _uni = utils.mapping(_tuni, (record_code,))
3404 print(_uni)
3181 else: 3405 else:
3182 _record.select_comment = comment 3406 _record.select_comment = comment
3183 3407
3184 def setParametricSummary(self, record_code, summary): 3408 def setParametricSummary(self, record_code, summary):
3185 """setParametricSummary(self, record_code, summary) 3409 """setParametricSummary(self, record_code, summary)
3186 3410
3187 Sets parametric record summary 3411 Sets parametric record summary
3188 """ 3412 """
3189 if not isinstance(record_code, str): 3413 if not isinstance(record_code, text_type):
3190 raise ValueError( _("The record_code code must be a string") ) 3414 _tuni = _("The record_code code must be a text string")
3191 if not isinstance(summary, str): 3415 _str = _uni.encode("utf-8")
3192 raise ValueError( _("The summary record must be a string") ) 3416 raise ValueError(_str)
3417 if not isinstance(summary, text_type):
3418 _tuni = _("The summary record must be a text string")
3419 _str = _uni.encode("utf-8")
3420 raise ValueError(_str)
3193 if not self.hasRecord(record_code): 3421 if not self.hasRecord(record_code):
3194 print(utils.mapping(_("Error: The budget do not have the record "\ 3422 _tuni = _("Error: The budget do not have the record "\
3195 "code $1 and can not be seted the summary: $2"), 3423 "code $1 and can not be seted the summary: $2")
3196 (str(record_code), str(summary))).encode("utf8") ) 3424 _uni = utils.mapping(_tuni, (record_code, summary))
3425 print(_uni)
3197 return 3426 return
3198 _record = self.getRecord(record_code) 3427 _record = self.getRecord(record_code)
3199 if not isinstance(_record, ParametricRecord): 3428 if not isinstance(_record, ParametricRecord):
3200 print(utils.mapping(_("Error: The Record $1 is not a "\ 3429 _tuni = _("Error: The Record $1 is not a "\
3201 "Parametric Record and can not have Parametric summary"), 3430 "Parametric Record and can not have Parametric summary")
3202 (str(record_code),)).encode("utf8") ) 3431 _uni = utils.mapping(_tuni, (record_code,))
3432 print(_uni)
3203 else: 3433 else:
3204 self.getRecord(record_code).parametric_summary = summary 3434 self.getRecord(record_code).parametric_summary = summary
3205 3435
3206 def setParametricText(self, record_code, text): 3436 def setParametricText(self, record_code, text):
3207 """setParametricText(self, record_code, text) 3437 """setParametricText(self, record_code, text)
3208 3438
3209 Sets parametric record text 3439 Sets parametric record text
3210 """ 3440 """
3211 if not isinstance(record_code, str): 3441 if not isinstance(record_code, text_type):
3212 raise ValueError( _("The record_code code must be a string") ) 3442 _tuni = _("The record_code code must be a text string")
3213 if not isinstance(text, str): 3443 _str = _uni.encode("utf-8")
3214 raise ValueError( _("The text record must be a string") ) 3444 raise ValueError(_str)
3445 if not isinstance(text, text_type):
3446 _tuni = _("The text record must be a text string")
3447 _str = _uni.encode("utf-8")
3448 raise ValueError(_str)
3215 if not self.hasRecord(record_code): 3449 if not self.hasRecord(record_code):
3216 print(utils.mapping(_("Error: The budget do not have the record "\ 3450 _tuni = _("Error: The budget do not have the record "\
3217 "code $1 and can not be seted the text: $2"), 3451 "code $1 and can not be seted the text: $2")
3218 (str(record_code), str(text))).encode("utf8") ) 3452 _uni = utils.mapping(_tuni, (record_code, text))
3453 print(_uni)
3219 return 3454 return
3220 _record = self.getRecord(record_code) 3455 _record = self.getRecord(record_code)
3221 if not isinstance(_record, ParametricRecord): 3456 if not isinstance(_record, ParametricRecord):
3222 print(utils.mapping(_("Error: The Record $1 is not a "\ 3457 _tuni = _("Error: The Record $1 is not a "\
3223 "Parametric Record and can not have Parametric text"), 3458 "Parametric Record and can not have Parametric text")
3224 (str(record_code),)).encode("utf8") ) 3459 _uni = utils.mapping(_tuni, (record_code,))
3460 print(_uni)
3225 else: 3461 else:
3226 self.getRecord(record_code).parametric_text = text 3462 self.getRecord(record_code).parametric_text = text
3227 3463
3228 3464
3229 class Office(object): 3465 class Office(object):
3740 def getHierarchy(self): 3976 def getHierarchy(self):
3741 return self.__hierarchy 3977 return self.__hierarchy
3742 3978
3743 def setHierarchy(self, hierarchy): 3979 def setHierarchy(self, hierarchy):
3744 if not hierarchy in [-1, 0 , 1 ,2, ""]: 3980 if not hierarchy in [-1, 0 , 1 ,2, ""]:
3745 raise ValueError( utils.mapping(_("Invalid Hierarchy ($1) "\ 3981 _tuni = _("Invalid Hierarchy ($1) "\
3746 "The hierarchy must be -1, 0, 1, 2"), (str(hierarchy),)) ) 3982 "The hierarchy must be -1, 0, 1, 2")
3983 _uni = utils.mapping(_tuni, (text(hierarchy),))
3984 _str = _uni.encode("utf-8")
3985 raise ValueError(_str)
3747 elif hierarchy == "": 3986 elif hierarchy == "":
3748 print("Hierarchy temporarily set to an empty string".encode("utf8")) 3987 _tuni = _("Hierarchy temporarily set to an empty string")
3988 print(_tuni)
3749 #TODO Check empty Hierarchy in Generic.fiebdc.Read._testBudget 3989 #TODO Check empty Hierarchy in Generic.fiebdc.Read._testBudget
3750 self.__hierarchy = hierarchy 3990 self.__hierarchy = hierarchy
3751 3991
3752 def getType(self): 3992 def getType(self):
3753 return self.__type 3993 return self.__type
3754 3994
3755 def setType(self, type_): 3995 def setType(self, type_):
3756 if not type_ in ["", 0, 1, 2, 3] : 3996 if not type_ in ["", 0, 1, 2, 3]:
3757 raise ValueError( utils.mapping(_("Invalid type ($1),"\ 3997 _tuni = _("Invalid type ($1),"\
3758 "the type must be (empty string,0,1,2,3)"),(str(type_)),) ) 3998 "the type must be (empty string,0,1,2,3)")
3999 _uni = utils.mapping(_tuni ,(text(type_),))
4000 _str = _uni.encode("utf-8")
4001 raise ValueError(_str)
3759 self.__type = type_ 4002 self.__type = type_
3760 4003
3761 def getSubtype(self): 4004 def getSubtype(self):
3762 return self.__subtype 4005 return self.__subtype
3763 4006
3764 def setSubtype(self, subtype): 4007 def setSubtype(self, subtype):
3765 if not subtype in ["", "OB", "PU", "EA", "EU", "EC", "EF", "PA", "H", 4008 if not subtype in ["", "OB", "PU", "EA", "EU", "EC", "EF", "PA", "H",
3766 "Q", "%", "MC", "MCr", "MM", "MS", "ME", "MCu", 4009 "Q", "%", "MC", "MCr", "MM", "MS", "ME", "MCu",
3767 "Mal","ML","M"]: 4010 "Mal","ML","M"]:
3768 raise ValueError( utils.mapping(_("Invalid subtype ($1), The "\ 4011 _tuni = _("Invalid subtype ($1), The "\
3769 "subtype must one in (empty string, EA, "\ 4012 "subtype must one in (empty string, EA, "\
3770 "EU, EC, EF, OB, PA, PU, H, Q, %, MC, MCr, "\ 4013 "EU, EC, EF, OB, PA, PU, H, Q, %, MC, MCr, "\
3771 "MM, MS, ME, MCu, MAl, ML, M)"), (str(subtype),)) ) 4014 "MM, MS, ME, MCu, MAl, ML, M)")
4015 _uni = utils.mapping(_tuni, (text(subtype),))
4016 _str = _uni.encode("utf-8")
4017 raise ValueError(_str)
3772 self.__subtype = subtype 4018 self.__subtype = subtype
3773 4019
3774 hierarchy = property(getHierarchy, setHierarchy, None, 4020 hierarchy = property(getHierarchy, setHierarchy, None,
3775 """Record Hierarchy 4021 """Record Hierarchy
3776 -1 -> temporarily unfixed 4022 -1 -> temporarily unfixed