def item_create(request, task_id): task = get_task(task_id) workflow = WorkFlow.get(task.workflow_id) form = ExecWFItemForm() item_t = task.get_item() item = workflow.get_item() new_item = True form_url = '/couchflow/save_new_item/%s/' % task._id context = {'workflow': workflow, 'task': task, 'item': item, 'form': form, 'new_item': new_item, 'form_url': form_url, 'is_popup': True, } if task.html_tpl: context["html_tpl"] = parse_wysiwyg_fields(task) return render_to_response('couchflow/item_form.html', context, context_instance=RequestContext(request) )
def item_create(request, task_id): task = get_task(task_id) workflow = WorkFlow.get(task.workflow_id) form = ExecWFItemForm() item_t = task.get_item() item = workflow.get_item() new_item = True form_url = '/couchflow/save_new_item/%s/' % task._id context = { 'workflow': workflow, 'task': task, 'item': item, 'form': form, 'new_item': new_item, 'form_url': form_url, 'is_popup': True, } if task.html_tpl: context["html_tpl"] = parse_wysiwyg_fields(task) return render_to_response('couchflow/item_form.html', context, context_instance=RequestContext(request))
def edit_item(request, item_id, existence=False): item = WFItem.get(item_id) if not item: return HttpResponseNotFound() wf_name = "%s_editor" % item.item_type if existence: wf_name = "%s_editor_existencia" % item.item_type workflow = WorkFlow.view("couchflow/orig_workflows", include_docs=True)[wf_name].one() if not workflow: return HttpResponseNotFound() workflow = clone_this_wf(workflow._id, request.user._id) workflow.nro_pedido = get_nro_pedido() workflow.visible = False workflow.set_enabled() try: workflow.save() except ResourceConflict: pass task = Task.view("couchflow/activetask", include_docs=True)[workflow._id].one() if not existence: task.wfitems_ids = [item_id] else: task.base_item = item_id task.visible = False task.save() return HttpResponseRedirect("/couchflow/execute_task/%s/" % task._id)
def execute_task(request, task_id): task = get_task(task_id) html_file = 'couchflow/task.html' if not task or not task.active: return HttpResponseRedirect('/') if task.doc_type == "DecisionTask": form = ExecDecisionForm(instance=task) elif task.doc_type == "DynamicDataTask": form = ExecDynamicForm(instance=task) form.add_dynamic_fields(task) elif task.doc_type == "WFItemsLoader": form = ExecWFItemsLoader(instance=task) html_file = 'couchflow/items_loader.html' elif task.doc_type == "FilterWFItems": form = FilterWFItemsForm(instance=task) html_file = 'couchflow/filter_items.html' filter_url = "/couchflow/get_items/%s/" % task._id elif task.doc_type == "MarcImport": form = ExecMarcImportForm(instance=task) html_file = 'couchflow/marcimport_form.html' form_url = "/couchflow/save_task/%s/%s/" form_url = form_url % (task.doc_type, task._id) workflow = WorkFlow.get(task.workflow_id) item = task.get_item() context = { 'workflow': workflow, 'task': task, 'form': form, 'form_url': form_url, 'item': item, } if task.html_tpl: context["html_tpl"] = parse_wysiwyg_fields(task) #import IPython #embedshell = IPython.Shell.IPShellEmbed(argv=[]) #embedshell() if task.doc_type == 'FilterWFItems': context['filter_url'] = filter_url return render_to_response(html_file, context, context_instance=RequestContext(request))
def execute_task(request, task_id): task = get_task(task_id) html_file = 'couchflow/task.html' if not task or not task.active: return HttpResponseRedirect('/') if task.doc_type == "DecisionTask": form = ExecDecisionForm(instance=task) elif task.doc_type == "DynamicDataTask": form = ExecDynamicForm(instance=task) form.add_dynamic_fields(task) elif task.doc_type == "WFItemsLoader": form = ExecWFItemsLoader(instance=task) html_file = 'couchflow/items_loader.html' elif task.doc_type == "FilterWFItems": form = FilterWFItemsForm(instance=task) html_file = 'couchflow/filter_items.html' filter_url = "/couchflow/get_items/%s/" % task._id elif task.doc_type == "MarcImport": form = ExecMarcImportForm(instance=task) html_file = 'couchflow/marcimport_form.html' form_url = "/couchflow/save_task/%s/%s/" form_url = form_url % (task.doc_type, task._id) workflow = WorkFlow.get(task.workflow_id) item = task.get_item() context = {'workflow': workflow, 'task': task, 'form': form, 'form_url': form_url, 'item': item, } if task.html_tpl: context["html_tpl"] = parse_wysiwyg_fields(task) #import IPython #embedshell = IPython.Shell.IPShellEmbed(argv=[]) #embedshell() if task.doc_type == 'FilterWFItems': context['filter_url'] = filter_url return render_to_response(html_file, context, context_instance=RequestContext(request) )
def validate_task(request, task_id): if request.method == 'POST': task = Task.get(task_id) workflow = WorkFlow.get(task.workflow_id) item = task.get_item() item_validation_errors = item.check_form(request.POST, task) for err in item_validation_errors: if err[1] == "int": err[1] = "Numero" response_dict = {} response_dict['response'] = (len(item_validation_errors) == 0) response_dict['errors'] = item_validation_errors return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript') return HttpResponseNotFound()
def exec_url(request, url_name): workflow = WorkFlow.view("couchflow/orig_workflows", include_docs=True)[url_name].one() if not workflow: return HttpResponseNotFound() workflow = clone_this_wf(workflow._id, request.user._id) workflow.nro_pedido = get_nro_pedido() workflow.set_enabled() try: workflow.save() except ResourceConflict: pass task = Task.view("couchflow/activetask", include_docs=True)[workflow._id].one() return HttpResponseRedirect("/couchflow/execute_task/%s/" % task._id)
def save_task(request, task_type, task_id): try: if task_type == "DecisionTask": task = DecisionTask.get(task_id) form = DecisionTaskForm(request.POST) elif task_type == "DynamicDataTask": task = DynamicDataTask.get(task_id) form = ExecDynamicForm(request.POST) elif task_type == "WFItemsLoader": task = WFItemsLoader.get(task_id) form = ExecWFItemsLoader(request.POST) elif task_type == "FilterWFItems": task = FilterWFItems.get(task_id) form = ExecFilterWFItemsForm(request.POST) elif task_type == "MarcImport": task = MarcImport.get(task_id) form = ExecMarcImportForm(request.POST) except ResourceNotFound: return HttpResponseRedirect('/') workflow = WorkFlow.get(task.workflow_id) if 'cancelar' in request.POST and \ task.doc_type != 'FilterWFItems': if task.node_type == 'start': workflow.remove_relations() workflow.delete() return HttpResponseRedirect('/') elif 'cancelar' in request.POST and \ task.doc_type == 'FilterWFItems': response_dict = {} response_dict['response'] = False response_dict['url'] = '/' return HttpResponse(simplejson.dumps(response_dict),\ mimetype='application/javascript') item = task.get_item() response_dict = {} item_validation_errors = [] if task_type not in ('WFItemsLoader', ): item_validation_errors = item.check_form(request.POST, task) if form.is_valid() and not item_validation_errors: user = request.user task.saved_by = user._id if item.is_clone: item.comments = form.cleaned_data['comments'] item.save() if task.doc_type == "DecisionTask" or \ task.doc_type == "DynamicDataTask": if item.is_clone: images = save_task_item(request, item, task) item.save() save_images(item, images) more_items = [] if len(task.wfitems_ids) > 1: more_items = [WFItem.get(x) for x in task.wfitems_ids] elif task.group_by_urn: more_items = WFItem.view( "couchflow/by_urn", include_docs=True)[item.urn].all() if more_items: for new_item in more_items: if new_item._id != item._id: # TODO: don't replace all the properties new_item.fields_properties = item.fields_properties new_item.comments = item.comments try: new_item.save() except ResourceConflict: pass if task.doc_type == "DynamicDataTask": for field in task.extra_fields: field_data = request.POST.getlist(field) if field_data == "": field_data = None task.extra_fields[field]['exec_value'] = field_data task.save() task.active_conector() try: task.save() except ResourceConflict: pass elif task.doc_type == "WFItemsLoader": task.save() task.active_conector() elif task.doc_type == "DecisionTask": if 'aceptar' in request.POST: task.confirmation = True else: task.confirmation = False task.save() task.active_conector() elif task.doc_type == "FilterWFItems": selected_items = request.POST.getlist('selected_items') task.wfitems_ids = selected_items task.save() task.active_conector() response_dict['response'] = True return HttpResponse(simplejson.dumps(response_dict),\ mimetype='application/javascript') elif task.doc_type == "MarcImport": task.active_conector() groups = user.groups new_tasks = workflow.get_active_tasks() url_redirect = '/' for task in new_tasks: if task.group_id in groups or user.is_superuser: url_redirect = '/couchflow/execute_task/%s' % task._id break return HttpResponseRedirect(url_redirect) if task.doc_type == 'FilterWFItems': response_dict['response'] = True response_dict['status'] = "Campos mal cargados" return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript') else: context = { 'form': form, 'task': task, 'item_errors': item_validation_errors } return render_to_response('couchflow/save_task_error.html', context, context_instance=RequestContext(request))
def save_new_item(request, task_id, edit_item_id=None): # if edit_item_id is provided, edit it response_dict = {} if request.method == 'POST': task = get_task(task_id) workflow = WorkFlow.get(task.workflow_id) if edit_item_id: item = WFItem.get(edit_item_id) else: item = task.get_item() item_validation_errors = item.check_form(request.POST, task) for err in item_validation_errors: if err[1] == "int": err[1] = "Numero" if item_validation_errors: response_dict = {} response_dict['response'] = False status = "No se puede crear el item, campos mal cargados" response_dict['status'] = status response_dict['errors'] = item_validation_errors return HttpResponse(simplejson.dumps(response_dict),\ mimetype='application/javascript') # TODO: set uid by hand # Clone the item if not edit_item_id: item = item.really_clone(save=True) item.is_clone = True # set no the item the order number to can keep track of an order order_nbr = task.order_nbr if not order_nbr: order_nbr = task.order_nbr = get_nro_pedido() item.order_nbr = order_nbr images = save_task_item(request, item, task) item.save() #response_dict['item_name'] = item.name + ": " + get_item_name(item) response_dict['item_name'] = get_item_name(item) save_images(item, images) if not edit_item_id: task.wfitems_ids.append(item._id) task.save() response_dict['response'] = True response_dict['status'] = "Bien" response_dict['item_id'] = item._id return HttpResponse(simplejson.dumps(response_dict),\ mimetype='application/javascript') response_dict['response'] = False response_dict['status'] = "Mal" return HttpResponse(simplejson.dumps(response_dict),\ mimetype='application/javascript')
def save_task(request, task_type, task_id): try: if task_type == "DecisionTask": task = DecisionTask.get(task_id) form = DecisionTaskForm(request.POST) elif task_type == "DynamicDataTask": task = DynamicDataTask.get(task_id) form = ExecDynamicForm(request.POST) elif task_type == "WFItemsLoader": task = WFItemsLoader.get(task_id) form = ExecWFItemsLoader(request.POST) elif task_type == "FilterWFItems": task = FilterWFItems.get(task_id) form = ExecFilterWFItemsForm(request.POST) elif task_type == "MarcImport": task = MarcImport.get(task_id) form = ExecMarcImportForm(request.POST) except ResourceNotFound: return HttpResponseRedirect('/') workflow = WorkFlow.get(task.workflow_id) if 'cancelar' in request.POST and \ task.doc_type != 'FilterWFItems': if task.node_type == 'start': workflow.remove_relations() workflow.delete() return HttpResponseRedirect('/') elif 'cancelar' in request.POST and \ task.doc_type == 'FilterWFItems': response_dict = {} response_dict['response'] = False response_dict['url'] = '/' return HttpResponse(simplejson.dumps(response_dict),\ mimetype='application/javascript') item = task.get_item() response_dict = {} item_validation_errors = [] if task_type not in ('WFItemsLoader',): item_validation_errors = item.check_form(request.POST, task) if form.is_valid() and not item_validation_errors: user = request.user task.saved_by = user._id if item.is_clone: item.comments = form.cleaned_data['comments'] item.save() if task.doc_type == "DecisionTask" or \ task.doc_type == "DynamicDataTask": if item.is_clone: images = save_task_item(request, item, task) item.save() save_images(item, images) more_items = [] if len(task.wfitems_ids) > 1: more_items = [WFItem.get(x) for x in task.wfitems_ids] elif task.group_by_urn: more_items = WFItem.view("couchflow/by_urn", include_docs=True)[item.urn].all() if more_items: for new_item in more_items: if new_item._id != item._id: # TODO: don't replace all the properties new_item.fields_properties = item.fields_properties new_item.comments = item.comments try: new_item.save() except ResourceConflict: pass if task.doc_type == "DynamicDataTask": for field in task.extra_fields: field_data = request.POST.getlist(field) if field_data == "": field_data = None task.extra_fields[field]['exec_value'] = field_data task.save() task.active_conector() try: task.save() except ResourceConflict: pass elif task.doc_type == "WFItemsLoader": task.save() task.active_conector() elif task.doc_type == "DecisionTask": if 'aceptar' in request.POST: task.confirmation = True else: task.confirmation = False task.save() task.active_conector() elif task.doc_type == "FilterWFItems": selected_items = request.POST.getlist('selected_items') task.wfitems_ids = selected_items task.save() task.active_conector() response_dict['response'] = True return HttpResponse(simplejson.dumps(response_dict),\ mimetype='application/javascript') elif task.doc_type == "MarcImport": task.active_conector() groups = user.groups new_tasks = workflow.get_active_tasks() url_redirect = '/' for task in new_tasks: if task.group_id in groups or user.is_superuser: url_redirect = '/couchflow/execute_task/%s' % task._id break return HttpResponseRedirect(url_redirect) if task.doc_type == 'FilterWFItems': response_dict['response'] = True response_dict['status'] = "Campos mal cargados" return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript') else: context = { 'form': form, 'task': task, 'item_errors': item_validation_errors } return render_to_response('couchflow/save_task_error.html', context, context_instance=RequestContext(request))