Exemplo n.º 1
0
def get_events(request):
    "Return a list of EventRenderers from available Tasks and Milestones"
    events = []
    
    query = (Q(start_date__isnull=False)|Q(end_date__isnull=False)) & Q(status__hidden=False)
    tasks = Object.filter_by_request(request, manager=Task.objects.filter(query))
    for task in tasks:
        if task.end_date:
            event = EventRenderer(task.name, task.start_date, task.end_date, task.get_absolute_url())
        else:
            event = EventRenderer(task.name, None, task.start_date, task.get_absolute_url())
        event.css_class += " projects-calendar-task"
        events.append(event)
    
    query = (Q(start_date__isnull=False)|Q(end_date__isnull=False)) & Q(status__hidden=False)
    milestones = Object.filter_by_request(request, manager=Milestone.objects.filter(query))
    for milestone in milestones:
        name = "    " + milestone.name 
        if milestone.end_date:
            event = EventRenderer(name, milestone.start_date, milestone.end_date, 
                                  milestone.get_absolute_url())
        else:
            event = EventRenderer(name, None, milestone.start_date, milestone.get_absolute_url())
        event.css_class += " projects-calendar-milestone"
        events.append(event)
        
    return events
Exemplo n.º 2
0
 def __init__(self, user, *args, **kwargs):
     super(EquityForm, self ).__init__(*args, **kwargs)
 
     self.fields['equity_type'].label = _("Equity type")
     self.fields['issue_price'].label = _("Issue price")
     self.fields['sell_price'].label = _("Sell price")
     self.fields['issuer'].label = _("Issuer")
     self.fields['owner'].label = _("Owner")
     self.fields['amount'].label = _("Quantity")
     self.fields['purchase_date'].label = _("Purchase date")
     self.fields['details'].label = _("Details")
     
     self.fields['owner'].queryset = Object.filter_permitted(user, Contact.objects)
     self.fields['owner'].widget.attrs.update({'class': 'autocomplete', 
                                               'callback': reverse('identities_ajax_contact_lookup')})
     self.fields['owner'].widget.attrs.update({'popuplink': reverse('identities_contact_add')})
     self.fields['issuer'].queryset = Object.filter_permitted(user, Contact.objects)
     self.fields['issuer'].widget.attrs.update({'class': 'autocomplete', 
                                                'callback': reverse('identities_ajax_contact_lookup')})
     self.fields['issuer'].widget.attrs.update({'popuplink': reverse('identities_contact_add')})
     try:
         conf = ModuleSetting.get_for_module('maker.finance', 'my_company')[0]
         self.fields['issuer'].initial = long(conf.value)
     except Exception:
         pass
     
     self.fields['purchase_date'].widget.attrs.update({'class': 'datepicker'})
Exemplo n.º 3
0
    def __init__(self, user, project_id, *args, **kwargs):
        super(MilestoneForm, self ).__init__(*args, **kwargs)

        self.fields['name'].label = _("Name")

        self.fields['project'].label = _("Project")
        self.fields['project'].queryset = Object.filter_permitted(user, Project.objects, mode='x')
        if project_id:
            self.fields['project'].initial = project_id

        self.fields['status'].label = _("Status")
        self.fields['status'].queryset = Object.filter_permitted(user, TaskStatus.objects, mode='x')
        try:
            conf = ModuleSetting.get_for_module('maker.projects', 'default_task_status')[0]
            self.fields['status'].initial = long(conf.value)
        except Exception:
            pass

        # Set datepicker
        self.fields['start_date'].label = _("Start date")
        self.fields['start_date'].widget.attrs.update({'class': 'datetimepicker'})
        self.fields['end_date'].label = _("End date")
        self.fields['end_date'].widget.attrs.update({'class': 'datetimepicker'})

        if 'instance' in kwargs:
            instance = kwargs['instance']
            if instance.start_date:
                self.fields['start_date'].widget.attrs.update({'initial': instance.start_date.strftime('%s')})
            if instance.end_date:
                self.fields['end_date'].widget.attrs.update({'initial': instance.end_date.strftime('%s')})

        self.fields['details'].label = _("Details")
Exemplo n.º 4
0
def folder_view(request, folder_id, response_format='html'):
    "Single folder view page"
    
    folder = get_object_or_404(Folder, pk=folder_id)
    
    if not request.user.get_profile().has_permission(folder):
        return user_denied(request, message="You don't have access to this Folder")
    
    query = Q(
              object_type='maker.documents.models.Document') | Q(
              object_type='maker.documents.models.File') | Q(
              object_type='maker.documents.models.WebLink')
    query = query & (Q(document__folder=folder) | Q(file__folder=folder) | Q(weblink__folder=folder))    
        
    if request.GET:
        query = query & _get_filter_query(request.GET)
        objects = Object.filter_by_request(request, Object.objects.filter(query).order_by('-last_updated'))
    #    objects = objects.order_by('-last_updated')
    else:        
        objects = Object.filter_by_request(request, Object.objects.filter(query).order_by('-last_updated'))
    #    objects = objects.order_by('-last_updated')
        
    subfolders = Folder.objects.filter(parent=folder)
    filters = FilterForm(request.user.get_profile(), 'title', request.GET)
    
    context = _get_default_context(request)
    context.update({'folder': folder,
                    'objects':objects,
                    'subfolders':subfolders,
                    'filters':filters})
        
    return render_to_response('documents/folder_view', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
Exemplo n.º 5
0
def queue_delete(request, queue_id, response_format='html'):
    "Queue delete"
    
    queue = get_object_or_404(TicketQueue, pk=queue_id)
    if not request.user.get_profile().has_permission(queue, mode='w'):
        return user_denied(request, message="You don't have access to this Queue")
    
    if request.POST:
        if 'delete' in request.POST:
            if 'trash' in request.POST:
                queue.trash = True
                queue.save()
            else:
                queue.delete()
            return HttpResponseRedirect(reverse('services_settings_view'))
        elif 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('services_queue_view', args=[queue.id]))
    
    query = Q(queue=queue) & Q(status__hidden=False)
    tickets = Object.filter_by_request(request, Ticket.objects.filter(query))
    subqueues = Object.filter_by_request(request, TicketQueue.objects.filter(parent=queue))
    
    context = _get_default_context(request)
    context.update({'queue': queue, 
                    'subqueues': subqueues, 
                    'tickets': tickets})
    
    return render_to_response('services/queue_delete', context,
                              context_instance=RequestContext(request), response_format=response_format)
Exemplo n.º 6
0
    def __init__(self, user, *args, **kwargs):
        super(LiabilityForm, self ).__init__(*args, **kwargs)
        
        self.fields['name'].label = _("Name")
        self.fields['category'].label = _("Category")
        self.fields['source'].label = _("Source")
        self.fields['target'].label = _("Target")
        self.fields['account'].label = _("Bank Account")
        self.fields['due_date'].label = _("Due date")
        self.fields['value_currency'].label = _("Currency")
        self.fields['value_currency'].widget.attrs.update({'popuplink': reverse('finance_currency_add')})
        self.fields['value_currency'].initial = Currency.objects.get(is_default=True)
        self.fields['value_display'].label = _("Value")
        self.fields['details'].label = _("Details")
    
        self.fields['target'].queryset = Object.filter_permitted(user, Contact.objects)
        self.fields['target'].widget.attrs.update({'class': 'autocomplete', 
                                                   'callback': reverse('identities_ajax_contact_lookup')})
        self.fields['target'].widget.attrs.update({'popuplink': reverse('identities_contact_add')})

        self.fields['account'].queryset = Object.filter_permitted(user, Account.objects)  
        
        try:
            conf = ModuleSetting.get_for_module('maker.finance', 'default_account')[0]
            self.fields['account'].initial = long(conf.value)
        except Exception:
            pass
        
        self.fields['due_date'].widget.attrs.update({'class': 'datepicker'})
    
        del self.fields['source']  
Exemplo n.º 7
0
 def __init__(self, user, *args, **kwargs):
     "Sets allowed values"
     super(QueueForm, self).__init__(*args, **kwargs)
     
     manager = TicketQueue.objects
     if 'instance' in kwargs:
         instance = kwargs['instance']
         manager = manager.exclude(Q(parent=instance) & Q(pk=instance.id))
     self.fields['parent'].queryset = Object.filter_permitted(user, manager, mode='x')
     
     self.fields['default_service'].queryset = Object.filter_permitted(user, Service.objects, mode='x')
     
     self.fields['waiting_time'].help_text = "seconds"
     
     self.fields['name'].label = _("Name")
     self.fields['active'].label = _("Active")
     self.fields['parent'].label = _("Parent")
     self.fields['default_ticket_status'].label = _("Default ticket status")
     self.fields['default_ticket_priority'].label = _("Default ticket priority")
     self.fields['default_service'].label = _("Default service")
     self.fields['waiting_time'].label = _("Waiting time")
     self.fields['next_queue'].queryset = Object.filter_permitted(user, TicketQueue.objects, mode='x')
     self.fields['next_queue'].label = _("Next queue")
     self.fields['ticket_code'].label = _("Ticket code")
     self.fields['message_stream'].label = _("Message stream")
     self.fields['message_stream'].widget.attrs.update({'popuplink': reverse('messaging_stream_add')})
     self.fields['details'].label = _("Details")
Exemplo n.º 8
0
def task_time_slot_add(request, task_id, response_format='html'):
    "Time slot add to preselected task"
    
    task = get_object_or_404(Task, pk=task_id)
    if not request.user.get_profile().has_permission(task, mode='x'):
        return user_denied(request, message="You don't have access to this Task")
    
    if request.POST:
        task_time_slot = TaskTimeSlot(task=task, time_to=datetime.now(), user=request.user.get_profile())
        form = TaskTimeSlotForm(request.user.get_profile(), task_id, request.POST, instance=task_time_slot)
        if 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('projects_task_view', args=[task.id]))
        elif form.is_valid():
            task_time_slot = form.save()
            task_time_slot.set_user_from_request(request)
            return HttpResponseRedirect(reverse('projects_task_view', args=[task.id]))
    else:
        form = TaskTimeSlotForm(request.user.get_profile(), task_id)
    
    subtasks = Object.filter_by_request(request, Task.objects.filter(parent=task))
    time_slots = Object.filter_by_request(request, TaskTimeSlot.objects.filter(task=task))

    context = _get_default_context(request)
    context.update({'form': form,
                    'task': task,
                    'subtasks': subtasks,
                    'time_slots': time_slots})
    
    return render_to_response('projects/task_time_add', context,
                               context_instance=RequestContext(request), response_format=response_format)  
Exemplo n.º 9
0
def task_delete(request, task_id, response_format='html'):
    "Task delete"

    task = get_object_or_404(Task, pk=task_id)
    if not request.user.get_profile().has_permission(task, mode='w'):
        return user_denied(request, message="You don't have access to this Task")

    if request.POST:
        if 'delete' in request.POST:
            if 'trash' in request.POST:
                task.trash = True
                task.save()
            else:
                task.delete()
            return HttpResponseRedirect(reverse('projects_index'))
        elif 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('projects_task_view', args=[task.id]))

    subtasks = Object.filter_by_request(request, Task.objects.filter(parent=task))
    time_slots = Object.filter_by_request(request, TaskTimeSlot.objects.filter(task=task))

    context = _get_default_context(request)
    context.update({'task': task, 
                    'subtasks': subtasks,
                    'time_slots': time_slots})
    
    return render_to_response('projects/task_delete', context,
                               context_instance=RequestContext(request), response_format=response_format)
Exemplo n.º 10
0
 def __init__(self, user, skip=[], *args, **kwargs):
     super(LeadFilterForm, self).__init__(*args, **kwargs)
 
     self.fields['contact'].queryset = Object.filter_permitted(user, Contact.objects)
     self.fields['contact'].widget.attrs.update({'class': 'autocomplete', 
                                                 'callback': reverse('identities_ajax_contact_lookup')})
     self.fields['contact'].required = False
     self.fields['contact'].label = _("Contact")
 
     self.fields['products_interested'].queryset = Object.filter_permitted(user, Product.objects)
     self.fields['products_interested'].required = False
     self.fields['products_interested'].help_text = ""
     self.fields['products_interested'].label = _("Products interested")
     
     self.fields['source'].queryset = Object.filter_permitted(user, 
                                                              SaleSource.objects.filter(active=True))
     self.fields['source'].required = False
     self.fields['source'].label = _("Source")
             
     self.fields['status'].queryset = Object.filter_permitted(user, 
                                                              SaleStatus.objects.filter(use_leads=True))
     self.fields['status'].required = False
     self.fields['status'].label = _("Status")
     
     self.fields['contact_method'].required = False
     self.fields['contact_method'].label = _("Contact method")
Exemplo n.º 11
0
def queue_view(request, queue_id, response_format='html'):
    "Queue view"
    
    queue = get_object_or_404(TicketQueue, pk=queue_id)
    if not request.user.get_profile().has_permission(queue):
        return user_denied(request, message="You don't have access to this Queue")
    
    query = Q(queue=queue)
    if request.GET:
        if 'status' in request.GET and request.GET['status']:
            query = query & _get_filter_query(request.GET)
        else:
            query = query & Q(status__hidden=False) & _get_filter_query(request.GET)
    else:
        query = query & Q(status__hidden=False)
    tickets = Object.filter_by_request(request, Ticket.objects.filter(query))
    
    filters = FilterForm(request.user.get_profile(), 'queue', request.GET)
    subqueues = Object.filter_by_request(request, TicketQueue.objects.filter(parent=queue))
    
    context = _get_default_context(request)
    context.update({'queue': queue, 
                    'subqueues': subqueues,
                    'filters': filters,
                    'tickets': tickets})
    
    return render_to_response('services/queue_view', context,
                              context_instance=RequestContext(request), response_format=response_format)
Exemplo n.º 12
0
    def __init__(self, user, *args, **kwargs):
        super(SubscriptionForm, self).__init__(*args, **kwargs)

        del self.fields['cycle_end']
        
        self.fields['product'].queryset = Object.filter_permitted(user, Product.objects)
        self.fields['product'].label = _("Product")
        
        self.fields['client'].queryset = Object.filter_permitted(user, Contact.objects)
        self.fields['client'].widget.attrs.update({'class': 'autocomplete', 
                                                   'callback': reverse('identities_ajax_contact_lookup')})
        self.fields['client'].widget.attrs.update({'popuplink': reverse('identities_contact_add')})
        self.fields['client'].label = _("Client")
        
        self.fields['start'].widget.attrs.update({'class': 'datepicker'})
        self.fields['start'].label = _("Start")
        self.fields['expiry'].widget.attrs.update({'class': 'datepicker'})
        self.fields['expiry'].label = _("Expiry")

        if 'instance' in kwargs:
            self.instance = kwargs['instance']
            self.fields['start'].widget.attrs['readonly'] = True
            del kwargs['instance']
                
        self.fields['active'].initial = True
        self.fields['active'].label = _("Active")
        self.fields['cycle_period'].label = _("Cycle period")
        self.fields['details'].label = _("Details")
Exemplo n.º 13
0
 def __init__(self, user, skip=[], *args, **kwargs):
     super(OrderFilterForm, self).__init__(*args, **kwargs)
     
     if 'status' in skip:
         del self.fields['status']
     else:
         self.fields['status'].queryset = Object.filter_permitted(user, 
                                                         SaleStatus.objects.filter(use_sales=True))
         self.fields['status'].required = False
         self.fields['status'].label = _("Status")
         
     self.fields['paid'].label = _("Payment Status")
 
     self.fields['client'].queryset = Object.filter_permitted(user, Contact.objects)
     self.fields['client'].widget.attrs.update({'class': 'autocomplete', 
                                                'callback': reverse('identities_ajax_contact_lookup')})   
     self.fields['client'].required = False
     self.fields['client'].label = _("Client")
 
     self.fields['source'].queryset = Object.filter_permitted(user, SaleSource.objects.filter(active=True))
     self.fields['source'].required = False
     self.fields['source'].label = _("Source")
             
     self.fields['assigned'].label = _("Assigned")
     self.fields['assigned'].widget.attrs.update({'class': 'multicomplete', 
                                                  'callback': reverse('identities_ajax_user_lookup')})
     if 'assigned' in skip:
         del self.fields['assigned']
     else:
         self.fields['assigned'].help_text = ""
Exemplo n.º 14
0
 def __init__(self, user, order, *args, **kwargs):
     
     super(OrderedProductForm, self).__init__(*args, **kwargs)
     
     self.fields['subscription'].queryset = Object.filter_permitted(user, Subscription.objects)
     self.fields['subscription'].widget.attrs.update({'class': 'autocomplete',
                                                      'callback': reverse('sales_ajax_subscription_lookup')})
     self.fields['subscription'].widget.attrs.update({'popuplink': reverse('sales_subscription_add')})
     self.fields['subscription'].label = _("Subscription")
     
     self.fields['product'].queryset = Object.filter_permitted(user, Product.objects.filter(active=True))
     if user.is_admin('maker.sales'):
         self.fields['product'].widget.attrs.update({'popuplink': reverse('sales_product_add')})
         self.fields['product'].label = _("Product")
     
     try:
         conf = ModuleSetting.get_for_module('maker.sales', 'default_order_product')[0]
         # AJAX to set the initial rate as the currency converted value of product sell price 
         self.fields['product'].initial = long(conf.value)
     except:
         pass
     
     # Tax
     self.fields['tax'].widget.attrs.update({'popuplink': reverse('finance_tax_add')})
     
     # TODO: rate
     #  self.fields['rate_display'].label = _("Rate")
     #  self.fields['rate_display'].help_text = order.currency.code
     
     self.fields['quantity'].label = _("Quantity")
     self.fields['quantity'].initial = 1
     self.fields['discount'].label = _("Discount")
     self.fields['discount'].help_text = "%"
Exemplo n.º 15
0
 def __init__(self, user, parent=None, *args, **kwargs):
     super(ProductForm, self).__init__(*args, **kwargs)
     
     self.fields['supplier'].queryset = Object.filter_permitted(user, Contact.objects)
     self.fields['supplier'].widget.attrs.update({'class': 'autocomplete', 
                                                  'callback': reverse('identities_ajax_contact_lookup')})
     self.fields['supplier'].widget.attrs.update({'popuplink': reverse('identities_contact_add')})
     self.fields['supplier'].label = _("Supplier")
     self.fields['active'].initial = True
     self.fields['active'].label = _("Active")
     
     manager = Product.objects.filter(active=True)
     if 'instance' in kwargs:
         instance = kwargs['instance']
         manager = manager.exclude(Q(parent=instance) & Q(pk=instance.id))
     self.fields['parent'].queryset = Object.filter_permitted(user, manager, mode='x')
     
     if parent:
         self.fields['parent'].initial = get_object_or_404(Product, pk=parent)
         self.fields['parent'].label = _("Parent")
         
     self.fields['product_type'].label = _("Product type")
     self.fields['code'].label = _("Code")
     self.fields['supplier_code'].label = _("Supplier code")
     self.fields['buy_price'].label = _("Buy price")
     self.fields['sell_price'].label = _("Sell price")
     self.fields['stock_quantity'].label = _("Stock quantity")
     self.fields['runout_action'].label = _("Runout action")
     self.fields['details'].label = _("Details")
Exemplo n.º 16
0
    def __init__(self, user, *args, **kwargs):
        "Sets choices and initial value"
        super(SettingsForm, self).__init__(*args, **kwargs)
        
        self.fields['my_company'].queryset = Object.filter_permitted(user, Contact.objects)
        self.fields['my_company'].widget.attrs.update({'class': 'autocomplete', 
                                                       'callback': reverse('identities_ajax_contact_lookup')})
        self.fields['default_account'].queryset = Object.filter_permitted(user, Account.objects)

        # Translation
        self.fields['default_currency'].label=_('Base Currency')
        self.fields['my_company'].label=_('My Company')
        self.fields['default_account'].label=_('Default Account')

        try:
            self.fields['default_currency'].widget.attrs.update({'popuplink': reverse('finance_currency_add')})
            self.fields['default_currency'].queryset = Currency.objects.all()
            self.fields['default_currency'].initial = Currency.objects.get(is_default=True)
        except Exception:
            pass
        
        try:
            conf = ModuleSetting.get_for_module('maker.finance', 'my_company')[0]
            my_company = Contact.objects.get(pk=long(conf.value))
            self.fields['my_company'].initial = my_company.id
        except Exception:
            pass

        try:
            conf = ModuleSetting.get_for_module('maker.finance', 'default_account')[0]
            default_account = Account.objects.get(pk=long(conf.value))
            self.fields['default_account'].initial = default_account.id
        except Exception:
            pass
Exemplo n.º 17
0
    def __init__(self, user, lead, *args, **kwargs):
        super(OpportunityForm, self).__init__(*args, **kwargs)
              
        self.fields['lead'].queryset = Object.filter_permitted(user, Lead.objects)
        self.fields['contact'].queryset = Object.filter_permitted(user, Contact.objects)
        self.fields['contact'].widget.attrs.update({'popuplink': reverse('identities_contact_add')})
        self.fields['contact'].widget.attrs.update({'class': 'autocomplete', 
                                                    'callback': reverse('identities_ajax_contact_lookup')})
        self.fields['products_interested'].queryset = Object.filter_permitted(user, Product.objects)
        self.fields['products_interested'].widget.attrs.update({'popuplink': reverse('sales_product_add')})
        try:
            conf = ModuleSetting.get_for_module('maker.sales', 'default_order_product')[0]
            self.fields['products_interested'].initial = [long(conf.value)]
        except:
            pass 
        self.fields['source'].queryset = Object.filter_permitted(user, 
                                                                 SaleSource.objects.filter(active=True))
        self.fields['status'].queryset = Object.filter_permitted(user, 
                                                        SaleStatus.objects.filter(use_opportunities=True))
        self.fields['assigned'].widget.attrs.update({'class': 'multicomplete', 
                                                     'callback': reverse('identities_ajax_user_lookup')})
        
        try:
            conf = ModuleSetting.get_for_module('maker.sales', 'default_opportunity_status')[0]
            self.fields['status'].initial = long(conf.value)
        except:
            pass 
        
        if lead:
            self.fields['lead'].initial = lead.id
            self.fields['contact'].initial = lead.contact_id
            self.fields['products_interested'].initial = [i.id for i in lead.products_interested.only('id')]
            self.fields['source'].initial = lead.source_id
            self.fields['assigned'].initial = [i.id for i in lead.assigned.only('id')]
        else:
            del self.fields['lead']
        
        self.fields['products_interested'].help_text = ""
        self.fields['assigned'].help_text = ""
        
        self.fields['expected_date'].widget.attrs.update({'class': 'datepicker'})
        self.fields['closed_date'].widget.attrs.update({'class': 'datepicker'})

        self.fields['contact'].label = _("Contact")
        self.fields['products_interested'].label = _("Products interested")
        self.fields['source'].label = _("Source")
        self.fields['expected_date'].label = _("Expected date")
        self.fields['closed_date'].label = _("Closed date")
        self.fields['assigned'].label = _("Assigned to")
        self.fields['amount_display'].label = _("Amount")
        self.fields['amount_currency'].label = _("Currency")
        self.fields['amount_currency'].widget.attrs.update({'popuplink': reverse('finance_currency_add')})
        self.fields['amount_currency'].initial = Currency.objects.get(is_default=True)
        
        self.fields['probability'].label = _("Probability")
        self.fields['status'].label = _("Status")
        self.fields['details'].label = _("Details")
Exemplo n.º 18
0
def _get_default_context(request):
    "Returns default context as a dict()"
    
    projects = Object.filter_by_request(request, Project.objects)
    statuses = Object.filter_by_request(request, TaskStatus.objects)
    massform = MassActionForm(request.user.get_profile())
    
    context = {'projects': projects,
               'statuses': statuses,
               'massform': massform}
    
    return context
Exemplo n.º 19
0
def _find_duplicates(resource_id, item, user):
    "Finds matching items"
    
    dups = []
    item_id = None
    if 'id' in item.raw:
        item_id = item.id.raw
    
    # Finding previously syncd items
    if item_id:
        key = '#' + unicode(resource_id) + '.' + unicode(item_id) + '#' 
        dups = Object.filter_permitted(user, Contact.objects).filter(nuvius_resource__contains=key)
        if dups:
            return dups
    
    # Finding equivalent items
    # If name and (email or phone) are the same - it's same person
    if item.name:
        candidates = Object.filter_permitted(user, Contact.objects).filter(name=item.name.raw).distinct()
        dups = []
        if candidates and (item.email or item.phone):
            for candidate in candidates:
                matching_emails = []
                emails = candidate.contactvalue_set.filter(field__field_type='email')
                if item.email.raw and emails:
                    matching_emails = emails.filter(value__in=item.email.raw)
                phones = candidate.contactvalue_set.filter(field__field_type='phone')
                matching_phones = []
                if item.phone.raw and phones:
                    matching_phones = phones.filter(value__in=item.phone.raw)
                # If anything matches or if we have no emails or no phones at all - add to duplicates
                if matching_emails or matching_phones or (not emails and not phones):
                    dups.append(candidate)
        elif not candidates and (item.email or item.phone):
            query = Q()
            if item.email:
                query = query & Q(contactvalue__value__in=item.email.raw)
            if item.phone:
                query = query | Q(contactvalue__value__in=item.phone.raw)
            dups = Object.filter_permitted(user, Contact.objects).filter(query).distinct()
        else:
            dups = candidates
    elif item.email or item.phone:
        query = Q()
        if item.email:
            query = query & Q(contactvalue__value__in=item.email.raw)
        if item.phone:
            query = query & Q(contactvalue__value__in=item.phone.raw)
        dups = Object.filter_permitted(user, Contact.objects).filter(query)
        
        
    return dups
Exemplo n.º 20
0
    def __init__(self, user, skip=[], *args, **kwargs):
        super(LiabilityFilterForm, self).__init__(*args, **kwargs)
        
        if 'due_date_from' in skip:
            del self.fields['due_date_from']
        else:
            self.fields['due_date_from'] = forms.DateField(label=_("Due Date From:"), required = False)
            self.fields['due_date_from'].widget.attrs.update({'class': 'datepicker'})
            
        if 'due_date_to' in skip:
            del self.fields['due_date_to']
        else:
            self.fields['due_date_to'] = forms.DateField(label=_("Due Date To:"), required = False)
            self.fields['due_date_to'].widget.attrs.update({'class': 'datepicker'})
            
        if 'category' in skip:
            del self.fields['category']
        else:
            self.fields['category'].queryset = Object.filter_permitted(user, Category.objects)
            self.fields['category'].label = _("Category")
            self.fields['category'].help_text = ""
            self.fields['category'].required = False
        
        if 'source' in skip:
            del self.fields['source']
        else:
            self.fields['source'].queryset = Object.filter_permitted(user, Contact.objects)
            self.fields['source'].label = _("Source")
            self.fields['source'].help_text = ""
            self.fields['source'].required = False
            self.fields['source'].widget.attrs.update({'class': 'autocomplete', 
                                                       'callback': reverse('identities_ajax_contact_lookup')})

        
        if 'target' in skip:
            del self.fields['target']
        else:
            self.fields['target'].queryset = Object.filter_permitted(user, Contact.objects)
            self.fields['target'].required = False
            self.fields['target'].label = _("Target")
            self.fields['target'].help_text = ""
            self.fields['target'].widget.attrs.update({'class': 'autocomplete', 
                                                       'callback': reverse('identities_ajax_contact_lookup')})
            
        if 'account' in skip:
            del self.fields['account']
        else:
            self.fields['account'].queryset = Object.filter_permitted(user, Account.objects)
            self.fields['account'].required = False
            self.fields['account'].label = _("Account")
            self.fields['account'].help_text = ""            
Exemplo n.º 21
0
 def __init__(self, user, *args, **kwargs):        
        
     super(ItemTypeForm, self).__init__(*args, **kwargs)
     
     self.fields['name'].label = _("Name")
     self.fields['parent'].label = _("Parent")
     self.fields['fields'].label = _("Fields")
     self.fields['details'].label = _("Details")
         
     self.fields['fields'].queryset = Object.filter_permitted(user, ItemField.objects.all(), mode='x')
     self.fields['fields'].help_text = ''
     self.fields['parent'].queryset = Object.filter_permitted(user, 
                                                 ItemType.objects.all().exclude(pk=self.instance.id), 
                                                              mode='x')
Exemplo n.º 22
0
def group_view(request, group_id, response_format="html"):
    "Group view"

    group = get_object_or_404(Group, pk=group_id)
    contacts = Object.filter_by_request(request, Contact.objects.filter(related_user=group).order_by("name"))
    members = User.objects.filter(Q(default_group=group) | Q(other_groups=group)).distinct()
    subgroups = Group.objects.filter(parent=group)
    types = Object.filter_by_request(request, ContactType.objects.order_by("name"))

    return render_to_response(
        "identities/group_view",
        {"group": group, "subgroups": subgroups, "members": members, "contacts": contacts, "types": types},
        context_instance=RequestContext(request),
        response_format=response_format,
    )
Exemplo n.º 23
0
 def __init__(self, user, *args, **kwargs):
     if 'instance' in kwargs:
         self.instance = kwargs['instance']
         del kwargs['instance']
     
     super(MassActionForm, self).__init__(*args, **kwargs)
     
     self.fields['status'].queryset = Object.filter_permitted(user, ItemStatus.objects, mode='x')
     self.fields['location'].queryset = Object.filter_permitted(user, Location.objects, mode='x')
     
     self.fields['status'].label = _('Status')
     self.fields['location'].label = _('Location')
     
     self.fields['delete'] = forms.ChoiceField(label=_("Delete"), choices=(('', '-----'),
                                                                           ('delete', _('Delete Completely')), 
                                                                           ('trash', _('Move to Trash'))), required=False)
Exemplo n.º 24
0
def category_delete(request, knowledgeCategory_id, response_format='html'):
    "Knowledge Category delete"

    category = get_object_or_404(KnowledgeCategory, pk=knowledgeCategory_id)
    items = Object.filter_permitted(manager=KnowledgeItem.objects, user=request.user.get_profile(), mode='r')
    
    if not request.user.get_profile().has_permission(category, mode="w"):
        return user_denied(request, message="You don't have access to this Knowledge Category")
    
    if request.POST:
        if 'delete' in request.POST:
            if 'trash' in request.POST:
                category.trash = True
                category.save()
            else:
                category.delete()
            return HttpResponseRedirect(reverse('knowledge_index'))
        elif 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('knowledge_category_view', args=[category.treepath]))
        
    context = _get_default_context(request)
    context.update({'category': category, 
                    'items':items})
        
    return render_to_response('knowledge/category_delete', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
Exemplo n.º 25
0
def folder_edit(request, knowledgeType_id, response_format='html'):
    "Knowledge folder edit page"
    
    folder = get_object_or_404(KnowledgeFolder, pk=knowledgeType_id)
    items = Object.filter_by_request(request, manager=KnowledgeItem.objects.filter(folder=folder)) 
    
    if not request.user.get_profile().has_permission(folder, mode="w"):
        return user_denied(request, message="You don't have access to this Knowledge Type")
    
    if request.POST:
        if not 'cancel' in request.POST:
            form = KnowledgeFolderForm(request.user.get_profile(), None, request.POST, instance=folder)
            if form.is_valid():
                folder = form.save()
                return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath]))
        else:
            return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath]))
    else:
        form = KnowledgeFolderForm(request.user.get_profile(), None, instance=folder)       

    context = _get_default_context(request)
    context.update({'items': items,
                    'folder': folder,
                    'form': form})
        
    return render_to_response('knowledge/folder_edit', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
Exemplo n.º 26
0
def category_edit(request, knowledgeCategory_id, response_format='html'):
    "Knowledge category edit page"
    category = get_object_or_404(KnowledgeCategory, pk=knowledgeCategory_id)
    items = Object.filter_permitted(manager=KnowledgeItem.objects, user=request.user.get_profile(), mode='r')
    
    if not request.user.get_profile().has_permission(category, mode="w"):
        return user_denied(request, message="You don't have access to this Knowledge Category")
    
    if request.POST:
        if not 'cancel' in request.POST:
            form = KnowledgeCategoryForm(request.POST, instance=category)
            if form.is_valid():
                category = form.save()
                return HttpResponseRedirect(reverse('knowledge_category_view', args=[category.treepath]))
        else:
            return HttpResponseRedirect(reverse('knowledge_category_view', args=[category.treepath]))
    else:
        form = KnowledgeCategoryForm(instance=category)
        
    context = _get_default_context(request)
    context.update({'form': form, 
                    'category': category, 
                    'items':items})
        
    return render_to_response('knowledge/category_edit', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
Exemplo n.º 27
0
def item_edit(request, knowledgeItem_id, response_format='html'):
    "Knowledge item edit page"
    item = get_object_or_404(KnowledgeItem, pk=knowledgeItem_id)
    items = Object.filter_permitted(manager=KnowledgeItem.objects, user=request.user.get_profile(), mode='r')
    
    if not request.user.get_profile().has_permission(item, mode="w"):
        return user_denied(request, message="You don't have access to this Knowledge Item")
    
    if request.POST:
        if not 'cancel' in request.POST:
            form = KnowledgeItemForm(request.user.get_profile(), None, request.POST, instance=item)
            if form.is_valid():
                item = form.save()
                return HttpResponseRedirect(reverse('knowledge_item_view', 
                                                    args=[item.folder.treepath, item.treepath]))
        else:
            return HttpResponseRedirect(reverse('knowledge_item_view', 
                                                    args=[item.folder.treepath, item.treepath]))
    else:
        form = KnowledgeItemForm(request.user.get_profile(), None, instance=item)
        
    context = _get_default_context(request)
    context.update({'form': form,
                    'item':item,
                    'items':items})
        
    return render_to_response('knowledge/item_edit', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
Exemplo n.º 28
0
def item_add_folder(request, folderPath, response_format='html'):
    "Add new knowledge item to preselected folder"
    items = Object.filter_permitted(manager=KnowledgeItem.objects, user=request.user.get_profile(), mode='r')
    
    try:
        folder = KnowledgeFolder.by_path(folderPath)
        knowledgeType_id = folder.id
    except KnowledgeFolder.DoesNotExist:
        raise Http404    
            
    if request.POST:
        if not 'cancel' in request.POST:
            item = KnowledgeItem()
            form = KnowledgeItemForm(request.user.get_profile(), knowledgeType_id, request.POST, instance=item)
            if form.is_valid():
                item = form.save()
                item.set_user_from_request(request)
                return HttpResponseRedirect(reverse('knowledge_item_view', 
                                                    args=[item.folder.treepath, item.treepath]))
        else:
            return HttpResponseRedirect(reverse('knowledge'))
    else:   
        form = KnowledgeItemForm(request.user.get_profile(), knowledgeType_id)
        
    context = _get_default_context(request)
    context.update({'items': items,
                    'form':form,
                    'folder':folder})
    
    return render_to_response('knowledge/item_add_folder', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
Exemplo n.º 29
0
def item_add(request, response_format='html'):
    "Add new knowledge item"
    items = Object.filter_permitted(manager=KnowledgeItem.objects, user=request.user.get_profile(), mode='r')
    
    if request.POST:
        if not 'cancel' in request.POST:
            item = KnowledgeItem()
            form = KnowledgeItemForm(request.user.get_profile(), None, request.POST, instance=item)
            if form.is_valid():
                item = form.save()
                item.set_user_from_request(request)
                return HttpResponseRedirect(reverse('knowledge_item_view', 
                                                    args=[item.folder.treepath, item.treepath]))
        else:
            return HttpResponseRedirect(reverse('knowledge'))
    else:   
        form = KnowledgeItemForm(request.user.get_profile(), None)
        
    context = _get_default_context(request)
    context.update({'items': items,
                    'form':form})
    
    return render_to_response('knowledge/item_add', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
Exemplo n.º 30
0
def folder_delete(request, knowledgeType_id, response_format='html'):
    "Type delete"
     
    folder = get_object_or_404(KnowledgeFolder, pk=knowledgeType_id)
    items = Object.filter_by_request(request, manager=KnowledgeItem.objects.filter(folder=folder))
    
    if not request.user.get_profile().has_permission(folder, mode='w'):
        return user_denied(request, message="You don't have access to this Knowledge Type")
    
    if request.POST:
        if 'delete' in request.POST:
            if 'trash' in request.POST:
                folder.trash = True
                folder.save()
            else:
                folder.delete()
            return HttpResponseRedirect(reverse('knowledge_index'))
        elif 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath]))
        
    context = _get_default_context(request)
    context.update({'items': items,
                    'folder':folder})
        
    return render_to_response('knowledge/folder_delete', context,
                              context_instance=RequestContext(request),
                              response_format=response_format)