예제 #1
0
    def form_valid(self, form):
        context = self.get_context_data()
        contract = context['contract']

        appointment = form.save()
        appointment.contract = contract
        appointment.created_by = self.request.user
        appointment.save()

        #Update states
        projects = contract.project_set.all()
        for project in projects:
            state = ProjectState(
                project=project,
                state="photographer",
                user=self.request.user,
            )
            state.save()
        projects.update(current_state="photographer")

        #Notifications
        users = []
        for user in TrackUser.objects.filter(groups__name__in=("management",)):
            users.append(user)

        #Photographer
        users.append(appointment.photographer)

        self.send_notification(
            message="%(user)s created a new appointment" % {'user': self.request.user.get_full_name()},
            users=users,
        )

        return super(PhotoshootContractMixin, self).form_valid(form)
예제 #2
0
    def form_valid(self, form):
        context = self.get_context_data()
        contract = context['contract']

        #Shoot is over --> set to inactive
        self.object = form.save()
        self.object.active = False
        self.object.save()

        #Update states
        projects = contract.project_set.all()
        for project in projects:
            state = ProjectState(
                project=project,
                state="production",
                user=self.request.user,
            )
            state.save()
        projects.update(current_state="production", notes=self.request.POST['description'])

        #Notifications
        users = []
        for user in TrackUser.objects.filter(groups__name__in=("management", "production")):
            users.append(user)

        self.send_notification(
            message="%(user)s uploaded pictures for contract %(contract)d" % {
                'user': self.object.photographer,
                'contract': self.object.contract.contract_number,
            },
            users=users,
        )

        return super(PhotoshootDoneView, self).form_valid(form)
예제 #3
0
    def form_valid(self, form):
        self.object = form.save()

        # Update amount paid
        self.object.contract.amount_paid += self.object.amount

        #Check if total amount due is fulfilled
        if self.object.contract.amount_paid >= self.object.contract.total_cost:
            self.object.contract.is_paid = True
            self.object.contract.date_is_paid = datetime.now

            users = []
            for user in TrackUser.objects.filter(groups__name__in=("management",)):
                users.append(user)

            self.send_notification(
                users=users,
                message="A Contract has been fully paid.",
            )

            self.object.contract.project_set.all().update(current_state="finished")
            for project in self.object.contract.project_set.all():
                state = ProjectState(
                    project=project,
                    state="production",
                    user=self.request.user,
                )
                state.save()

        self.object.contract.save()

        return super(InsertPayment, self).form_valid(form)
예제 #4
0
    def form_valid(self, form):
        context = self.get_context_data()
        contractproject_form = context['contractproject_form']

        existing_client = self.request.POST.get('existing_client')
        if existing_client != "on":
            client_contact_form = context['client_contact_form']
            new_client_form = context['new_client_form']

            if new_client_form.is_valid() and client_contact_form.is_valid() and contractproject_form.is_valid():
                new_client_form.instance.account_manager = self.request.user
                client = new_client_form.save()
                role = self.request.POST["role"]
                notes = self.request.POST["notes"]
                client_contact = client_contact_form.save()

                # Create a new contact
                contact_person = ContactPerson(
                    client=client,
                    user=client_contact,
                    role=role,
                    notes=notes
                )
                contact_person.save()
                self.object = form.save(commit=False)
                self.object.client = client
                self.object.save()
            else:
                return self.render_to_response(self.get_context_data(form=form))

        if contractproject_form.is_valid():
            if existing_client:
                self.object = form.save()

            contractproject_form.instance = self.object
            contractproject_form.save()

            # add options
            projects = self.object.project_set.all()
            for project in projects:
                product = project.product
                options = self.request.POST.getlist(product.slug + "_option")
                flow = product.flow.splitlines()

                try:
                    position = flow.index(settings.FLOW_OPTIONS_PLACEHOLDER)
                    for option in options:
                        #insert options after the placeholder
                        flow.insert(position + 1, option)
                    #Remove placeholder
                    flow.pop(position)
                except ValueError:
                    pass

                #Convert back to TextField
                workflow = ""
                for todo in flow:
                    workflow += todo + "\n"
                project.flow = workflow
                project.save()

                #Create states
                state = ProjectState(
                    project=project,
                    user=self.request.user,
                    notes="Sales created contract",
                )
                state.save()
        else:
            return self.render_to_response(self.get_context_data(form=form))

        users = []
        for user in TrackUser.objects.filter(groups__name__in=("management",)):
            users.append(user)

        self.send_notification(
            message="%(user)s created a contract" % {'user': self.request.user.get_full_name()},
            users=users,
        )

        """
        Create folders on Google drive
        """
        file_user = TrackUser.objects.get(pk=settings.USER_ID_GOOGLE_OAUTH)
        drive_service = build('drive', 'v2', http=file_user.credentials.authorize(httplib2.Http()))
        folder_body = {
            "title": "%(contract)d-%(client)s-%(city)s" % {
                "contract": self.object.contract_number,
                "client": self.object.client,
                "city": self.object.shoot_city
            },
            "parents": [{"id": self.object.client.country.drive_folder_id}],
            "mimeType": "application/vnd.google-apps.folder"
        }
        folder = drive_service.files().insert(body=folder_body).execute()

        #Save folder in Contract
        self.object.drive_folder_id = folder['id']
        self.object.save()

        sub_folders = ['Combi', 'Compressed', 'Other', 'Panos', 'Poi']
        for sub_folder in sub_folders:
            sub_folder_body = {
                "title": sub_folder,
                "parents": [{"id": folder['id']}],
                "mimeType": "application/vnd.google-apps.folder"
            }
            drive_service.files().insert(body=sub_folder_body).execute()

        return super(CreateContract, self).form_valid(form)