class SChTask( models.Model): class Meta: verbose_name = _("SChTask") verbose_name_plural = _("SChTask") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=255) code = models.TextField('Code', null=True, blank=True, editable=True, ) doc = models.TextField('Doc', null=True, blank=True, editable=True, ) def transform_template_name(self, request, template_name): if '/code/py/editor' in request.path: if template_name == 'schsys/db_field_edt.html': return 'schbuilder/db_field_edt_task.html' return template_name
class EtapProjektuInw( models.Model): class Meta: verbose_name = _("Etap ") verbose_name_plural = _("Etapy projektu") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'projekty' ordering = ['id'] parent = ext_models.HiddenForeignKey(ProjektInw, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) projektant = ext_models.ForeignKey(User, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Projektant', limit_choices_to = limit_users_change_etapprojektuinw) opis = models.CharField('Opis', null=False, blank=False, editable=True, max_length=64) status = models.CharField('Status', null=False, blank=False, editable=True, default='0',choices=StatusEtapu,max_length=64) data_od = models.DateField('Od', null=False, blank=False, editable=True, default=datetime.now,) data_do = models.DateField('Do', null=False, blank=False, editable=True, default=datetime.now,) def transform_form(self, request, form, is_new_form=False): if is_new_form: form.initial['projektant']=self.parent.projektant
class SChChannelConsumer( models.Model): class Meta: verbose_name = _("Channel consumer") verbose_name_plural = _("Channel consumers") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=255) consumer_type = models.CharField('Consumer type', null=False, blank=False, editable=True, choices=Consumer_CHOICES,max_length=64) url = models.CharField('Url', null=True, blank=True, editable=True, max_length=255) consumer_code = models.TextField('Consumer code', null=True, blank=True, editable=False, ) doc = models.TextField('Doc', null=True, blank=True, editable=False, ) def init_new(self, request, view, param=None): if param: self.view_type=param defaults={} defaults['consumer_type'] = param return defaults else: return None
class SChAppMenu( models.Model): class Meta: verbose_name = _("SChAppMenu") verbose_name_plural = _("SChAppMenu") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=255) url = models.CharField('Url', null=False, blank=False, editable=True, max_length=255) url_type = models.CharField('Url type', null=True, blank=True, editable=True, default='-',choices=Url_CHOICES,max_length=16) perms = models.CharField('Perms', null=True, blank=True, editable=True, max_length=255) icon = models.CharField('Icon', null=False, blank=False, editable=True, max_length=255) icon_size = models.CharField('Icon size', null=False, blank=False, editable=True, default='1',choices=IconSize_CHOICES,max_length=1) def not_standard_icon_size(self): if self.icon_size=='1': return False else: return True def get_perms(self): if self.perms and self.perms!=" ": return "'%s'" % self.perms else: return "None" def get_main_urls(self): return self.parent.get_urls(main=True) def get_urls(self): return self.parent.get_urls(main=False) def get_url_type_ext(self): if self.url_type in [None, '-']: return "?schtml=desktop" elif self.url_type == 'browser': return '' else: return '?schtml='+self.url_type def clean_url(self): return self.url.replace('$', '') def __str__(self): return self.name
class SChLocale( models.Model): class Meta: verbose_name = _("Locale") verbose_name_plural = _("Locales") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChAppSet, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=16)
class bookmarks( models.Model): class Meta: verbose_name = _("Bookmarks") verbose_name_plural = _("Bookmarks") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbrowser' ordering = ['id'] parent = ext_models.HiddenForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=64) url = models.CharField('url', null=True, blank=True, editable=True, max_length=256)
class SChTranslate( models.Model): class Meta: verbose_name = _("Translate") verbose_name_plural = _("Translate") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChLocale, on_delete=models.CASCADE, null=False, blank=False, editable=False, verbose_name='Parent', ) description = models.CharField('Description', null=False, blank=False, editable=True, max_length=1024) translation = models.CharField('Translation', null=True, blank=True, editable=True, max_length=1024) status = models.CharField('Status', null=True, blank=True, editable=False, max_length=16)
class SChFiles( models.Model): class Meta: verbose_name = _("SChFiles") verbose_name_plural = _("SChFiles") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) file_type = models.CharField('File type', null=False, blank=False, editable=True, choices=FileType_CHOICES,max_length=3) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=256) content = models.TextField('Content', null=True, blank=True, editable=False, )
class Akcja( models.Model): class Meta: verbose_name = _("Akcja") verbose_name_plural = _("Akcje") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'projekty' ordering = ['id'] parent = ext_models.HiddenForeignKey(EtapProjektuInw, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) typ_akcji = models.CharField('Typ akcji', null=False, blank=False, editable=True, choices=TypAkcji,max_length=64) opis = models.CharField('Opis', null=False, blank=False, editable=True, max_length=64) data = models.DateField('Data', null=False, blank=False, editable=True, default=datetime.now,) alert = models.BooleanField('Czy przypomnieć?', null=False, blank=False, editable=True, default=False,)
class SChChoiceItem( models.Model): class Meta: verbose_name = _("SChChoiceItem") verbose_name_plural = _("SChChoiceItem") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChChoice, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=255) value = models.CharField('Value', null=False, blank=False, editable=True, max_length=255) def __str__(self): return self.name
class SChForm( models.Model): class Meta: verbose_name = _("Form") verbose_name_plural = _("Form") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=64) module = models.CharField('Module', null=True, blank=True, editable=True, max_length=64) process_code = models.TextField('Process code', null=True, blank=True, editable=True, ) end_class_code = models.TextField('End class code', null=True, blank=True, editable=True, ) end_code = models.TextField('End code', null=True, blank=True, editable=True, ) doc = models.TextField('Doc', null=True, blank=True, editable=True, )
class SChTable( models.Model): class Meta: verbose_name = _("SChTable") verbose_name_plural = _("SChTable") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) base_table = models.CharField('Base table', null=True, blank=True, editable=True, max_length=255) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=255) verbose_name = models.CharField('Verbose name', null=False, blank=False, editable=True, max_length=255) verbose_name_plural = models.CharField('Verbose name plural', null=False, blank=False, editable=True, max_length=255) metaclass_code = models.TextField('Metaclass code', null=True, blank=True, editable=False, ) table_code = models.TextField('Table code', null=True, blank=True, editable=False, ) ordering = models.CharField('Ordering', null=True, blank=True, editable=True, default="['id']",max_length=255) doc = models.TextField('Doc', null=True, blank=True, editable=False, ) generic = models.BooleanField('Generic', null=False, blank=False, editable=True, default=False,) url_params = models.CharField('Url params', null=True, blank=True, editable=True, max_length=255) proxy_model = models.CharField('Proxy model', null=True, blank=True, editable=True, max_length=255) def get_models(self): return self.parent.get_models() def get_base_table(self): l = self.base_table.split('.') if len(l)>1 and l[-2]!='models': return l[-1] else: return self.base_table def __str__(self): return self.name
class Audyt( models.Model): class Meta: verbose_name = _("Audyt") verbose_name_plural = _("Audyty") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'audyty' ordering = ['id'] parent = ext_models.HiddenForeignKey(TypAudytu, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) data = models.DateField('Data', null=False, blank=False, editable=True, ) data_sporz = models.DateTimeField('Data sporządzenia', null=True, blank=True, editable=True, ) data_zatw = models.DateTimeField('Data zatwierdzenia', null=True, blank=True, editable=True, ) status = models.CharField('Staus', null=True, blank=True, editable=True, default='0',choices=StatusChoices,max_length=1) opis1 = models.TextField('Opis 1', null=True, blank=True, editable=True, ) opis2 = models.TextField('Opis 2', null=True, blank=True, editable=True, ) opis3 = models.TextField('Opis 3', null=True, blank=True, editable=True, )
class DocHeadStatus(JSONModel): class Meta: verbose_name = _("Document head status") verbose_name_plural = _("Documents head status") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schelements' ordering = ['id'] parent = ext_models.HiddenForeignKey( DocHead, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) date = models.DateTimeField( 'Date', null=False, blank=False, editable=True, ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=16) description = models.CharField('Description', null=True, blank=True, editable=False, max_length=64) operator = models.CharField('Operator', null=True, blank=True, editable=True, max_length=32)
class SChStatic( models.Model): class Meta: verbose_name = _("Static file") verbose_name_plural = _("Static files") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChAppSet, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) type = models.CharField('Type', null=False, blank=False, editable=True, choices=Static_CHOICES,max_length=1) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=64) code = models.TextField('Code', null=True, blank=True, editable=False, ) doc = models.TextField('Doc', null=True, blank=True, editable=False, ) def __str__(self): return self.get_type_display() + "/" + self.name
class SChTemplate( models.Model): class Meta: verbose_name = _("SChTemplate") verbose_name_plural = _("SChTemplate") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=255) direct_to_template = ext_models.NullBooleanField('Direct to template', null=True, blank=True, editable=True, ) url = models.CharField('Url', null=True, blank=True, editable=True, max_length=64) url_parm = models.CharField('Parameters passed to the template', null=True, blank=True, editable=True, max_length=128) template_code = models.TextField('Template code', null=True, blank=True, editable=False, ) static_files = models.ManyToManyField(SChStatic, null=True, blank=True, editable=True, verbose_name='Static files', ) tags_mount = models.CharField('Mount component tags', null=True, blank=True, editable=True, max_length=256) def get_url_name(self): if self.url and self.url!="": return self.url else: return self.name def get_url(self): if self.direct_to_template: url_name = self.get_url_name() app_name = self.parent.name template_name = self.name.lower().replace(' ','_')+".html" if self.url_parm: param = self.url_parm else: param = "" return "url(r'^%s', TemplateView.as_view(template_name='%s/%s'), {%s})" % (url_name, app_name, template_name, param ) else: return None def _get_table_fields(self, tables): ret=[] if len(tables)==1: table = tables[0] for pos in table.schfield_set.all(): ret.append(pos.name) if table.base_table and table.base_table != None: ret2 = self._get_table_fields(SChTable.objects.filter(name=table.base_table)) for pos in ret2: ret.append(pos) return ret def get_table_fields(self): return self._get_table_fields(self.parent.schtable_set.filter(parent=self.parent).filter(name=self.name)) def get_table_methods(self): ret=[] tables = self.parent.schtable_set.filter(parent=self.parent).filter(name=self.name) if len(tables)==1: table = tables[0] if table.table_code: for line in table.table_code.split('\n'): if line.startswith('def'): ret.append(line[4:]) return ret def get_django_filters(self): ret = [] django_engine = engines['django'].engine for pos in django_engine.template_builtins: for f in pos.filters: ret.append(f) return ret def get_django_tags(self): ret = [] django_engine = engines['django'].engine for pos in django_engine.template_builtins: for f in pos.tags: ret.append(f) return ret def get_blocks(self): ret=[] form_path = os.path.join(os.path.dirname(__file__)+"/../../../templates_src/form.ihtml") f = open(form_path, "rt") buf = f.read() f.close() for line in buf.split('\n'): if "%%" in line: ret.append(superstrip(line).replace(' ','')) return ret def get_template_widgets(self): return widgets def transform_template_name(self, request, template_name): if 'template_code/py/editor' in request.path: if template_name == 'schsys/db_field_edt.html': return 'schbuilder/db_field_edt_template.html' return template_name def __str__(self): return self.name
class DocRegStatus(models.Model): class Meta: verbose_name = _("Document status") verbose_name_plural = _("Document status") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schelements' ordering = ['id'] parent = ext_models.HiddenForeignKey( DocReg, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) order = models.IntegerField( 'Order', null=False, blank=False, editable=True, ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=16) description = models.CharField('Description', null=True, blank=True, editable=True, max_length=64) icon = models.CharField('Icon', null=True, blank=True, editable=True, max_length=64) accept_proc = models.TextField( 'Accept status procedure', null=True, blank=True, editable=False, ) undo_proc = models.TextField( 'Undo status procedure', null=True, blank=True, editable=False, ) can_set_proc = models.TextField( 'Check if status can be set', null=True, blank=True, editable=False, ) can_undo_proc = models.TextField( 'Check if status can be removed', null=True, blank=True, editable=False, )
class DocItem(JSONModel): class Meta: verbose_name = _("Document item") verbose_name_plural = _("Document items") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schelements' ordering = ['id'] parent = ext_models.HiddenForeignKey( DocHead, on_delete=models.CASCADE, null=False, blank=False, editable=False, verbose_name='Parent', ) parent_item = ext_models.HiddenForeignKey( 'self', on_delete=models.CASCADE, null=True, blank=True, editable=False, verbose_name='Parent item', ) order = models.IntegerField( 'Order', null=False, blank=False, editable=False, default=1, ) date = models.DateField( 'Date', null=False, blank=False, editable=False, ) description = models.CharField('Description', null=True, blank=True, editable=True, max_length=255) amount = models.DecimalField('Amount', null=True, blank=True, editable=True, max_digits=16, decimal_places=2) element = models.ForeignKey( Element, on_delete=models.CASCADE, null=True, blank=True, editable=True, verbose_name='Element', ) level = models.IntegerField( 'Level', null=False, blank=False, editable=False, default=0, ) param1 = models.CharField('Parameter 1', null=True, blank=True, editable=False, max_length=16) param2 = models.CharField('Parameter 2', null=True, blank=True, editable=False, max_length=16) param3 = models.CharField('Parameter 3', null=True, blank=True, editable=False, max_length=16) @staticmethod def template_for_list(context, doc_type): if doc_type in ('html', 'json'): if 'parent_pk' in context['view'].kwargs: parent_pk = int(context['view'].kwargs['parent_pk']) dochead = DocHead.objects.get(pk=parent_pk) reg = dochead.doc_type_parent.parent names = [] names.append((reg.app + "/" + dochead.doc_type_parent.name + "_docitem_list.html").lower()) names.append((reg.app + "/" + reg.name.replace('/', '_') + "_docitem_list.html").lower()) x = reg.get_parent() while x: names.append(x.app + "/" + x.name.replace('/', '_') + "_docitem_list.html") x = x.get_parent() template = select_template(names) if template: return template return None def template_for_object(self, context, doc_type): if doc_type in ('html', 'json'): try: obj = DocItem.objects.get(pk=self.id) dochead = obj.parent reg = dochead.doc_type_parent.parent names = [] names.append((reg.app + "/" + dochead.doc_type_parent.name + "_docitem_edit.html").lower()) names.append((reg.app + "/" + reg.name.replace('/', '_') + "_docitem_edit.html").lower()) x = reg.get_parent() while x: names.append(x.app + "/" + x.name.replace('/', '_') + "_docitem_edit.html") x = x.get_parent() template = select_template(names) if template: return template except: return None return None def get_form_source(self): #obj = DocItem.objects.get(pk=self.id) obj = self if obj.parent.doc_type_parent.item_form: return obj.parent.doc_type_parent.item_form x = obj.parent.doc_type_parent.parent while x: if x.item_form: return x.item_form x = x.get_parent() return None def init_new(self, request, view, param=None): if 'parent_pk' in view.kwargs: parent_pk = view.kwargs['parent_pk'] parent = DocHead.objects.get(pk=parent_pk) items = DocItem.objects.filter(parent=parent).order_by('-order') if len(items) > 0: max_nr = int(items[0].order) + 1 else: max_nr = 1 if request.POST: return { 'parent': str(parent.id), 'order': max_nr, 'date': datetime.datetime.now(), 'level': 0 } return None def save(self, *args, **kwargs): if self.id: obj = DocItem.objects.get(pk=self.id).parent save_fun_src = None if obj.doc_type_parent.save_head_fun: save_fun_src = obj.doc_type_parent.save_item_fun else: x = obj.doc_type_parent.parent while x: if x.save_head_fun: save_fun_src = x.save_item_fun break x = x.get_parent() if save_fun_src: exec(save_fun_src) super().save(*args, **kwargs)
class DocHead(JSONModel): class Meta: verbose_name = _("Document header") verbose_name_plural = _("Document headers") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schelements' ordering = ['id'] parents = models.ManyToManyField( 'self', null=False, blank=False, editable=False, verbose_name='Parents', ) doc_type_parent = ext_models.HiddenForeignKey( DocType, on_delete=models.CASCADE, null=False, blank=False, editable=False, verbose_name='Document type parent', ) org_chart_parent = ext_models.HiddenForeignKey( OrgChartElem, on_delete=models.CASCADE, null=True, blank=True, editable=False, verbose_name='Organization chart parent', ) number = models.CharField('Document number', null=True, blank=True, editable=True, max_length=32) description = models.CharField('Description', null=True, blank=True, editable=True, max_length=64) date = models.DateTimeField( 'Date', null=False, blank=False, editable=False, ) status = models.CharField('Status', null=True, blank=True, editable=False, max_length=16) operator = models.CharField('Operator', null=True, blank=True, editable=False, max_length=32) param1 = models.CharField('Parameter 1', null=True, blank=True, editable=True, max_length=16) param2 = models.CharField('Parameter 2', null=True, blank=True, editable=True, max_length=16) param3 = models.CharField('Parameter 3', null=True, blank=True, editable=True, max_length=16) @classmethod def get_documents_for_reg(cls, value): reg = DocReg.objects.filter(name=value.replace('_', '/')) ret = [] if len(reg) == 1: docs = DocType.objects.filter(parent=reg[0]) for doc in docs: ret.append(doc) return ret @classmethod def filter(cls, value): if value: rej = value.replace('_', '/') return cls.objects.filter(doc_type_parent__parent__name=rej) else: return cls.objects.all() def init_new(self, request, view, add_param=None): if add_param: docs = DocType.objects.filter(name=add_param) if len(docs) == 1: self.doc_type_parent = docs[0] self.date = datetime.datetime.now() self.status = 'edit' self.operator = request.user.username return None @staticmethod def template_for_list(context, doc_type): if doc_type in ('html', 'json') and 'filter' in context: tmp = DocReg.objects.filter( name=context['filter'].replace('_', '/')) if len(tmp) == 1: names = [] x = tmp[0] while x: names.append((x.app + "/" + x.name.replace('/', '_') + "_dochead_list.html").lower()) x = x.get_parent() template = select_template(names) if template: return template return None def template_for_object(self, context, doc_type): if self.id and doc_type in ('html', 'json'): try: obj = DocHead.objects.get(pk=self.id) reg = obj.doc_type_parent.parent names = [] names.append((reg.app + "/" + obj.doc_type_parent.name + "_dochead_edit.html").lower()) names.append((reg.app + "/" + reg.name.replace('/', '_') + "_dochead_edit.html").lower()) x = reg.get_parent() while x: names.append((x.app + "/" + x.name.replace('/', '_') + "_dochead_edit.html").lower()) x = x.get_parent() template = select_template(names) if template: return template except: return None return None def get_form_source(self): if self.id: obj = DocHead.objects.get(pk=self.id) if obj.doc_type_parent.head_form: return obj.doc_type_parent.head_form x = obj.doc_type_parent.parent while x: if x.head_form: return x.head_form x = x.get_parent() return None def save(self, *args, **kwargs): if self.id: obj = DocHead.objects.get(pk=self.id) save_fun_src = None if obj.doc_type_parent.save_head_fun: save_fun_src = obj.doc_type_parent.save_head_fun else: x = obj.doc_type_parent.parent while x: if x.save_head_fun: save_fun_src = x.save_head_fun break x = x.get_parent() if save_fun_src: exec(save_fun_src) super().save(*args, **kwargs) def get_visible_statuses(self, request=None): if self.id: obj = DocHead.objects.get(pk=self.id) reg = obj.doc_type_parent.parent while reg: statuses = reg.docregstatus_set.all().order_by('order') if len(statuses) > 0: ret = [] for status in statuses: if status.can_set_proc: exec(status.can_set_proc) data = locals()['can_set_proc'](request, self) if data: ret.append(status) else: ret.append(status) return ret reg = reg.get_parent() return [] def status_can_be_undo(self, request=None): if self.id: obj = DocHead.objects.get(pk=self.id) reg = obj.doc_type_parent.parent statuses = reg.docregstatus_set.filter(name=obj.status) if len(statuses) == 1: status = statuses[0] if status.can_undo_proc: exec(status.can_undo_proc) data = locals()['can_undo_proc'](request, self) if data: return True else: return False if obj.status == "" or obj.status == "edit": return False else: return True return False
class DocType(models.Model): class Meta: verbose_name = _("Type of document") verbose_name_plural = _("Types of documents") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schelements' ordering = ['id'] parent = ext_models.HiddenForeignKey( DocReg, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=16) description = models.CharField('Description', null=False, blank=False, editable=True, max_length=64) correction = ext_models.NullBooleanField( 'Correction', null=True, blank=True, editable=True, ) head_form = models.TextField( 'Head form', null=True, blank=True, editable=False, ) item_form = models.TextField( 'Item form', null=True, blank=True, editable=False, ) save_head_fun = models.TextField( 'Save head function', null=True, blank=True, editable=False, ) save_item_fun = models.TextField( 'Save item function', null=True, blank=True, editable=False, ) doctype_status = models.CharField('Status of document type', null=True, blank=True, editable=True, choices=doctype_status, max_length=1)
class AccountOperation(models.Model): class Meta: verbose_name = _("Account operation") verbose_name_plural = _("Account operations") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schelements' ordering = ['id'] parent = ext_models.HiddenForeignKey( DocItem, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) date = models.DateTimeField( 'Date', null=False, blank=False, editable=False, default=datetime.datetime.now, ) description = models.CharField('Description', null=False, blank=False, editable=True, max_length=255) payment = models.CharField('Name of payment', null=True, blank=True, editable=True, max_length=64) account_state = ext_models.ForeignKey(AccountState, on_delete=models.CASCADE, null=True, blank=True, editable=True, verbose_name='Account state', related_name='accountoper_set') sign = models.IntegerField( 'Sign - debit or credit', null=False, blank=False, editable=True, ) amount = models.DecimalField('Amount', null=False, blank=False, editable=True, max_digits=16, decimal_places=2) enabled = ext_models.NullBooleanField( 'Enabled', null=True, blank=True, editable=False, default=False, ) def get_account_state(self, account, element, period, target, classifier1=None, classifier2=None, classifier3=None, subcode="", aggregate=False): if type(account) == str: _account = Account.objects.filter(name=account)[0] else: _account = account if type(element) == str: _element = Element.objects.filter(name=element)[0] else: _element = element if type(target) == str: _target = OrgChartElem.objects.filter(code=target)[0] else: _target = target objs = AccountState.objects.filter(parent=_account, target=_target, classifier1value=classifier1, classifier2value=classifier2, classifier3value=classifier3, period=period, subcode=subcode, element=_element) if objs.count() > 0: return objs[0] else: obj = AccountState() obj.parent = _account obj.target = _target obj.classifier1value = classifier1 obj.classifier2value = classifier2 obj.classifier3value = classifier3 obj.period = period obj.subcode = subcode obj.element = _element obj.aggregate = aggregate obj.debit = 0 obj.credit = 0 obj.save() return obj def update_account_state(self, debit, credit): s = self.account_state account = s.parent for period in [s.period, '*']: for target in [s.target, None]: for subcode in [s.subcode, "*"]: state = self.get_account_state(account, s.element, period, target, subcode=subcode, aggregate=True) state.debit += debit state.credit += credit state.save() account = account.parent subcode = "*" while account: for period in [s.period, '*']: for target in [s.target, None]: state = self.get_account_state(account, s.element, period, target, subcode=subcode, aggregate=True) state.debit += debit state.credit += credit state.save() account = account.parent def confirm(self): ret = False with transaction.atomic(): self.refresh_from_db() if not self.enabled: self.enabled = True if self.sign > 0: self.update_account_state(0, self.amount) else: self.update_account_state(self.amount, 0) self.save() ret = True return ret def cancel_confirmation(self): ret = False with transaction.atomic(): self.refresh_from_db() if self.enabled: self.enabled = False if self.sign > 0: self.update_account_state(0, -1 * self.amount) else: self.update_account_state(-1 * self.amount, 0) self.save() ret = True return ret
class SChField( models.Model): class Meta: verbose_name = _("SChField") verbose_name_plural = _("SChField") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChTable, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=True, blank=True, editable=True, max_length=255) description = models.CharField('Description', null=True, blank=True, editable=True, max_length=255) type = models.CharField('Type', null=False, blank=False, editable=True, choices=Field_CHOICES,max_length=64) null = models.BooleanField('Null', null=False, blank=False, editable=True, default=False,) blank = models.BooleanField('Blank', null=False, blank=False, editable=True, default=False,) editable = models.BooleanField('Editable', null=False, blank=False, editable=True, default=False,) unique = models.BooleanField('Unique', null=False, blank=False, editable=True, default=False,) db_index = models.BooleanField('DB index', null=False, blank=False, editable=True, default=False,) default = models.CharField('Default', null=True, blank=True, editable=True, max_length=255) help_text = models.CharField('Help text', null=True, blank=True, editable=True, max_length=255) choices = models.CharField('Choices', null=True, blank=True, editable=True, max_length=255) rel_to = models.CharField('Relation to', null=True, blank=True, editable=True, max_length=255) param = models.CharField('Param', null=True, blank=True, editable=True, max_length=255) url_params = models.CharField('Url params', null=True, blank=True, editable=True, max_length=255) def init_new(self, request, view, param=None): if param: self.type=param defaults=self.get_field_defaults() defaults['type'] = param for key in defaults: value = getattr(self, key) if not value: setattr(self, key, defaults[key]) return defaults else: return None def save(self, force_insert=False, force_update=False): super(SChField, self).save(force_insert, force_update) def __str__(self): return self.name def is_rel(self): if 'Key' in self.type or 'Many' in self.type: return True else: return False def is_generic_rel(self): if self.is_rel() and self.type[0]=='G': return True else: return False def has_choices(self): if self.type in ('CharField',): return True else: return False def get_models(self): return self.parent.get_models() def as_declaration(self): #if 'TreeForeignKey' in self.type: # if not self.parent.base_table in ("", "models.Model"): # return "" if self.type == 'UserField': return self.param type_desc = dict(Field_CHOICES)[self.type] if type_desc.endswith('!'): module = "ext_models." else: module = 'models.' if self.is_rel(): rel_model =self.rel_to.split('.')[-1] if self.type[0]=='G': if 'ForeignKey' in self.type: ret = "%s = %s%s(%s, on_delete=models.CASCADE, null=%s, blank=%s, editable=%s, verbose_name='%s', " % \ (self.name, module, self.type[1:], rel_model, self.null, self.blank, self.editable, self.description) else: ret = "%s = %s%s(%s, null=%s, blank=%s, editable=%s, verbose_name='%s', " % \ (self.name, module, self.type[1:], rel_model, self.null, self.blank, self.editable, self.description) else: if 'ForeignKey' in self.type: ret = "%s = %s%s(%s, on_delete=models.CASCADE, null=%s, blank=%s, editable=%s, verbose_name='%s', " % \ (self.name, module, self.type, rel_model, self.null, self.blank, self.editable, self.description) else: ret = "%s = %s%s(%s, null=%s, blank=%s, editable=%s, verbose_name='%s', " % \ (self.name, module, self.type, rel_model, self.null, self.blank, self.editable, self.description) else: ret = "%s = %s%s('%s', null=%s, blank=%s, editable=%s, " % \ (self.name, module, self.type, self.description, self.null, self.blank, self.editable) if self.unique: ret+= "unique=%s," % self.unique if self.default and len(self.default)>0: ret+= "default=%s," % self.default if self.help_text and len(self.help_text)>0: ret+= "help_text=%s," % self.help_text if self.choices: ret+="choices=%s," % self.choices if self.param and len(self.param)>0: ret+= self.param #.replace(':','=') ret += ")" return ret def get_field_defaults(self): ret = field_default.copy() if self.type in field_defaults: for key, value in field_defaults[self.type].items(): ret[key]=value return ret def get_rel_to(self): if self.rel_to == "'self'": return self.parent.name else: return self.rel_to def get_relate_set_name(self): if self.param and 'related_name' in self.param: for pos in self.param.split(','): rec=pos.split('=') if rec[0].strip()=='related_name': return rec[1].replace("'","").replace("\"","").strip() return self.parent.name.lower()+'_set' @classmethod def table_action(cls, list_view, request, data): return standard_table_action(cls, list_view, request, data, ['copy', 'paste'])
class SChView( models.Model): class Meta: verbose_name = _("SChView") verbose_name_plural = _("SChView") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChApp, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=255) view_type = models.CharField('View type', null=False, blank=False, editable=True, choices=View_CHOICES,max_length=1) param = models.CharField('Param', null=True, blank=True, editable=True, max_length=255) url = models.CharField('Url', null=True, blank=True, editable=True, max_length=255) view_code = models.TextField('View code', null=True, blank=True, editable=False, ) doc = models.TextField('Doc', null=True, blank=True, editable=False, ) url_params = models.CharField('Url params', null=True, blank=True, editable=True, max_length=255) ret_type = models.CharField('Return value type', null=False, blank=False, editable=True, default='U',choices=ViewRetType_CHOICES,max_length=1) def init_new(self, request, view, param=None): if param: self.view_type=param defaults={} defaults['view_type'] = param if param=='r': self.param = 'pk' defaults['param'] = self.param if param=='t': pass if param=='u': defaults['param'] = '**argv' defaults['url_params'] = '{}' defaults['url'] = 'fun/(?P<parm>\d+)/$' return defaults else: return None def get_name(self): if '/' in self.name: return self.name.split('/')[-1] else: return self.name def get_url(self): name = self.get_name() if self.view_type == 'u': if self.url_params and self.url_params!="": return "url('%s', views.%s, %s)" % (self.url, name, self.url_params) else: return "url('%s', views.%s)" % (self.url, name) else: if self.view_type == 'r': bname='gen_row_action' else: bname='gen_tab_action' if self.url_params and self.url_params!="": if '#' in self.name: x = self.name.split('#') return "%s('%s', '%s', views.%s, %s)" % (bname, self.url, x[0], x[1], self.url_params) else: return "%s('%s', '%s', views.%s, %s)" % (bname, self.url, self.name, name,self.url_params) else: if '#' in self.name: x = self.name.split('#') return "%s('%s', '%s', views.%s)" % (bname, self.url, x[0], x[1]) else: return "%s('%s', '%s', views.%s)" % (bname, self.url, self.name, name) def __str__(self): return self.name def transform_template_name(self, request, template_name): if '/view_code/py/editor' in request.path: if template_name == 'schsys/db_field_edt.html': return 'schbuilder/db_field_edt_mod.html' return template_name def get_models(self): return self.parent.get_models() def clean_url(self): return self.url.replace('$', '')
class SChFormField( models.Model): class Meta: verbose_name = _("Form field") verbose_name_plural = _("Form field") default_permissions = ('add', 'change', 'delete', 'list') app_label = 'schbuilder' ordering = ['id'] parent = ext_models.HiddenForeignKey(SChForm, on_delete=models.CASCADE, null=False, blank=False, editable=True, verbose_name='Parent', ) name = models.CharField('Name', null=False, blank=False, editable=True, max_length=64) type = models.CharField('Type', null=False, blank=False, editable=True, choices=FormField_CHOICES,max_length=64) required = ext_models.NullBooleanField('Required', null=True, blank=True, editable=True, ) label = models.CharField('Label', null=False, blank=False, editable=True, max_length=64) initial = models.CharField('Initial', null=True, blank=True, editable=True, max_length=256) widget = models.CharField('Widget', null=True, blank=True, editable=True, max_length=64) help_text = models.CharField('Help text', null=True, blank=True, editable=True, max_length=256) error_messages = models.CharField('Error messages', null=True, blank=True, editable=True, max_length=64) param = models.CharField('Param', null=True, blank=True, editable=True, max_length=64) def init_new(self, request, view, param=None): if param: self.type=param defaults=self.get_field_defaults() defaults['type'] = param for key in defaults: setattr(self, key, defaults[key]) return defaults else: return None def as_declaration(self): if self.type == 'UserField': return self.param ret = "%s = forms.%s(label=_('%s'), required=%s, " % \ (self.name, self.type, self.label, self.required) if self.initial: ret+= "initial=%s," % self.initial if self.widget and len(self.widget)>0: ret+= "widget=%s," % self.widget if self.help_text and len(self.help_text)>0: ret+= "help_text=%s," % self.help_text if self.error_messages: ret+="error_messages=%s," % self.error_messages if self.param and len(self.param)>0: ret+= self.param ret += ")" return ret def get_field_defaults(self): ret = formfield_default.copy() if self.type in formfield_defaults: for key, value in formfield_defaults[self.type].items(): ret[key]=value return ret