Esempio n. 1
0
    def run(self, request, context):
        if context.report_id:
            mutex = CreadocMutex(context.report_id)

            if not mutex.is_free():
                mutex.release()

        return OperationResult()
Esempio n. 2
0
 def drag_node(self, id, dest_id):
     node = self.get_node(id)
     # Если id узла на который кидаем <1, значит это корень справочника
     if dest_id < 1:
         node.parent_id = None
     else:
         node.parent_id = dest_id
     node.save()
     return OperationResult()
Esempio n. 3
0
    def run(self, request, context):
        template = request.FILES.get('file_template')
        if not template:
            raise ApplicationLogicException(
                u'Не удалось загрузить шаблон')

        load_template(template, request.user)

        return OperationResult()
Esempio n. 4
0
    def run(self, request, context):
        CreadocReportDataSource.objects.filter(
            report__id=context.report_id
        ).delete()

        for row in context.rows:
            record = CreadocReportDataSource()
            record.report_id = context.report_id
            record.source_uid = row
            record.save()

        return OperationResult()
Esempio n. 5
0
    def drag_item(self, ids, dest_id):
        # В корень нельзя кидать простые элементы
        if dest_id < 1:
            return OperationResult.by_message(
                u'Нельзя перемещать элементы в корень справочника!')

        # Из грида в дерево одновременно
        # могут быть перенесены несколько элементов
        # Их id разделены запятыми
        for id in ids:
            row = self.get_row(id)
            row.parent_id = dest_id
            row.save()
        return OperationResult()
Esempio n. 6
0
    def run(self, request, context):
        deleted = 0
        protected = 0

        for row_id in context.row_id:
            mutex = CreadocMutex(row_id)

            if not mutex.is_free():
                protected += 1
                continue

            try:
                report = CreadocReport.objects.get(pk=row_id)
            except CreadocReport.DoesNotExist:
                raise ApplicationLogicException((
                    u'Шаблон с id={} отсутствует!'
                ).format(row_id))

            # Пробуем удалить шаблон. Если отсутствует, то пропускаем.
            try:
                os.remove(report.path)
            except OSError:
                pass

            report.delete()

            deleted += 1

        if protected:
            result = OperationResult(message=(
                u'Удалено записей: {}<br>'
                u'Используется другими пользователями: {}'
            ).format(deleted, protected))
        else:
            result = OperationResult()

        return result
Esempio n. 7
0
    def run(self, request, context):
        try:
            report = CreadocReport.objects.get(pk=context.report_id)
        except CreadocReport.DoesNotExist:
            raise ApplicationLogicException((
                u'Шаблон с id={} отсутствует!'
            ).format(context.report_id))

        # Извлекаем все подключенные к шаблону источники данных
        report_sources = CreadocReportDataSource.objects.filter(report=report)
        sources = map(attrgetter('source_uid'), report_sources.iterator())

        name = '{}.creadoc'.format(report.guid)
        zip_path = os.path.join(settings.CREADOC_REPORTS_ROOT, name)

        # Формирование архива с шаблоном
        with ZipFile(zip_path, 'w') as f:
            # Сохранение шаблона
            f.write(report.path, 'report.json')
            # Сохранение списка используемых источников данных
            f.writestr('sources.json', json.dumps(sources))
            # Сохранение мета-информации о шаблоне
            f.writestr('META.json', json.dumps({
                'name': report.name,
                'guid': report.guid,
                'datetime': datetime.datetime.now().strftime(
                    '%Y-%m-%d %H:%M:%S'),
            }))

        file_url = settings.CREADOC_REPORTS_URL + name

        safe_js_handler = '''function() {
            var iframe = document.createElement("iframe");
            iframe.src = '%s';
            iframe.style.display = "none";
            document.body.appendChild(iframe);
        }''' % file_url

        return OperationResult(code=safe_js_handler)
Esempio n. 8
0
 def save_node(self, obj):
     obj.save()
     return OperationResult(success=True)