def leadSignalHandler(sender, **kwargs): """Signal handler for new/updated leads""" lead = kwargs["instance"] targetUser = None client = lead.client # If this was the last active mission of its client and not more active lead, flag client as inactive if len(client.getActiveMissions()) == 0 and len( client.getActiveLeads().exclude(state="WON")) == 0: client.active = False client.save() if lead.responsible: targetUser = lead.responsible.getUser() if not targetUser: # Default to admin targetUser = User.objects.filter(is_superuser=True)[0] if kwargs.get("created", False): # New Lead launchTrigger("NEW_LEAD", [ targetUser, ], lead) createProjectTree(lead) client.active = True client.save() if lead.state == "WON": # Ensure actionset has not already be fired for this lead and this user if not ActionState.objects.filter( user=targetUser, target_id=lead.id, target_type=ContentType.objects.get_for_model(Lead)).exists(): launchTrigger("WON_LEAD", [ targetUser, ], lead)
def leadSignalHandler(sender, **kwargs): """Signal handler for new/updated leads""" lead = kwargs["instance"] targetUser = None client = lead.client # If this was the last active mission of its client and not more active lead, flag client as inactive if len(client.getActiveMissions()) == 0 and len(client.getActiveLeads().exclude(state="WON")) == 0: client.active = False client.save() if lead.responsible: targetUser = lead.responsible.getUser() if not targetUser: # Default to admin targetUser = User.objects.filter(is_superuser=True)[0] if kwargs.get("created", False): # New Lead launchTrigger("NEW_LEAD", [targetUser, ], lead) createProjectTree(lead) client.active = True client.save() if lead.state == "WON": # Ensure actionset has not already be fired for this lead and this user if not ActionState.objects.filter(user=targetUser, target_id=lead.id, target_type=ContentType.objects.get_for_model(Lead) ).exists(): launchTrigger("WON_LEAD", [targetUser, ], lead)
def lead_documents(request, lead_id): """Gather documents relative to this lead as a fragment page for an ajax call""" lead = Lead.objects.get(id=lead_id) documents = [] # List of name/url docs grouped by type clientDir, leadDir, businessDir, inputDir, deliveryDir = getLeadDirs(lead) lead_url_dir = settings.DOCUMENT_PROJECT_URL_DIR + leadDir[len(settings.DOCUMENT_PROJECT_PATH):] lead_url_file = settings.DOCUMENT_PROJECT_URL_FILE + leadDir[len(settings.DOCUMENT_PROJECT_PATH):] for directory in (businessDir, inputDir, deliveryDir): # Create project tree if at least one directory is missing if not os.path.exists(directory): createProjectTree(lead) break for directory in (businessDir, inputDir, deliveryDir): directoryName = directory.split("/")[-1] dirs = [] files = [] for fileName in os.listdir(directory): filePath = os.path.join(directory, fileName) fileName = fileName.encode('utf-8', 'surrogateescape').decode('utf-8', 'replace') # fs encoding mixup if os.path.isdir(filePath): dirs.append((fileName + "/", lead_url_dir + "/" + directoryName + "/" + fileName + "/")) else: files.append((fileName, lead_url_file + "/" + directoryName + "/" + fileName)) dirs.sort(key=lambda x: x[0]) files.sort(key=lambda x: x[0]) documents.append([directoryName, dirs + files]) return render(request, "leads/lead_documents.html", {"documents": documents, "lead_doc_url": lead_url_dir, "user": request.user})
def lead_documents(request, lead_id): """Gather documents relative to this lead as a fragment page for an ajax call""" lead = Lead.objects.get(id=lead_id) documents = [] # List of name/url docs grouped by type clientDir, leadDir, businessDir, inputDir, deliveryDir = getLeadDirs(lead) lead_url_dir = pydici.settings.DOCUMENT_PROJECT_URL_DIR + leadDir[len(pydici.settings.DOCUMENT_PROJECT_PATH):] lead_url_file = pydici.settings.DOCUMENT_PROJECT_URL_FILE + leadDir[len(pydici.settings.DOCUMENT_PROJECT_PATH):] for directory in (businessDir, inputDir, deliveryDir): # Create project tree if at least one directory is missing if not os.path.exists(directory): createProjectTree(lead) break for directory in (businessDir, inputDir, deliveryDir): directoryName = directory.split(u"/")[-1] dirs = [] files = [] for fileName in os.listdir(directory): filePath = os.path.join(directory.encode(sys.getfilesystemencoding()), fileName) if isinstance(fileName, str): # Corner case, files are not encoded with filesystem encoding but another... fileName = fileName.decode("utf8", "ignore") if os.path.isdir(filePath): dirs.append((fileName + u"/", lead_url_dir + u"/" + directoryName + u"/" + fileName + u"/")) else: files.append((fileName, lead_url_file + u"/" + directoryName + u"/" + fileName)) dirs.sort(key=lambda x: x[0]) files.sort(key=lambda x: x[0]) documents.append([directoryName, dirs + files]) return render(request, "leads/lead_documents.html", {"documents": documents, "lead_doc_url": lead_url_dir, "user": request.user})
def lead_documents(request, lead_id): """Gather documents relative to this lead as a fragment page for an ajax call""" lead = Lead.objects.get(id=lead_id) documents = [] # List of name/url docs grouped by type clientDir, leadDir, businessDir, inputDir, deliveryDir = getLeadDirs(lead) leadDocURL = lead.getDocURL() for directory in (businessDir, inputDir, deliveryDir): # Create project tree if at least one directory is missing if not os.path.exists(directory): createProjectTree(lead) break for directory in (businessDir, inputDir, deliveryDir): directoryName = directory.split(u"/")[-1] dirs = [] files = [] for fileName in os.listdir(directory): filePath = os.path.join(directory.encode(sys.getfilesystemencoding()), fileName) if isinstance(fileName, str): # Corner case, files are not encoded with filesystem encoding but another... fileName = fileName.decode("utf8", "ignore") if os.path.isdir(filePath): dirs.append((fileName + u"/", leadDocURL + directoryName + u"/" + fileName + u"/")) else: files.append((fileName, leadDocURL + directoryName + u"/" + fileName)) dirs.sort(key=lambda x: x[0]) files.sort(key=lambda x: x[0]) documents.append([directoryName, dirs + files]) return render(request, "leads/lead_documents.html", {"documents": documents, "lead_doc_url": leadDocURL, "user": request.user})