示例#1
0
 def handle(self, **options):
     activate(settings.WORKBENCH.PDF_LANGUAGE)
     set_user_name("Fairy tasks")
     create_accruals_for_last_month()
     create_recurring_invoices_and_notify()
     coffee_invites()
     changes_mails()
     annual_working_time_warnings_mails()
     send_unsent_projected_invoices_reminders()
def forwards(apps, schema_editor):
    set_user_name("Migrations")
    LoggedCost = apps.get_model("logbook", "LoggedCost")
    Service = apps.get_model("projects", "Service")

    project_ids_with_costs_without_services = set(
        LoggedCost.objects.filter(service_id__isnull=True).values_list(
            "project_id", flat=True))

    for project_id in project_ids_with_costs_without_services:
        service = Service.objects.create(
            project_id=project_id,
            title="Keine Leistung",
            position=-1,
            allow_logging=False,
        )
        LoggedCost.objects.filter(project=project_id,
                                  service__isnull=True).update(service=service)
示例#3
0
    def test_header(self):
        """Headings of versions contain users' names or primary keys"""
        set_user_name("ballabla")
        user1 = factories.UserFactory.create(_full_name="foo")
        set_user_name("user-%d-%s" % (user1.id, user1.get_short_name()))
        user2 = factories.UserFactory.create(_full_name="bar")
        set_user_name("user-%d-%s" % (user2.id, user2.get_short_name()))
        user3 = factories.UserFactory.create()

        self.client.force_login(user1)

        response = self.client.get("/history/accounts_user/id/{}/".format(
            user1.pk))
        self.assertContains(response,
                            "INSERT accounts_user {}".format(user1.pk))

        response = self.client.get("/history/accounts_user/id/{}/".format(
            user2.pk))
        self.assertContains(response,
                            "INSERT accounts_user {}".format(user2.pk))

        response = self.client.get("/history/accounts_user/id/{}/".format(
            user3.pk))
        self.assertContains(response,
                            "INSERT accounts_user {}".format(user3.pk))
示例#4
0
    def handle(self, **options):
        activate("de")
        set_user_name("Offer importer")

        with io.open(options["dump"][0]) as f:
            data = json.load(f)

        offers = {}

        contacts = {
            row["pk"]: {
                "customer_id": row["fields"]["employer"],
                "contact_id": row["fields"]["person"],
            }
            for row in data if row["model"] == "addressbook.address"
        }
        activities = {
            row["pk"]: row["fields"]
            for row in data if row["model"] == "articles.activity"
        }
        articles = {
            row["pk"]: row["fields"]
            for row in data if row["model"] == "articles.article"
        }

        def article_name(stuff, pk):
            if stuff[pk]["level"] <= 1:
                return stuff[pk]["name"]
            else:
                return "%s - %s" % (
                    stuff[stuff[pk]["parent"]]["name"],
                    stuff[pk]["name"],
                )

        for row in data:
            if row["model"] == "offers.joboffer":
                if row["pk"] not in offers:
                    offers[row["pk"]] = {
                        "project":
                        Project(title=row["fields"]["name"],
                                description="",
                                owned_by_id=row["fields"]["manager"],
                                type=Project.ORDER,
                                created_at=parse_datetime(
                                    row["fields"]["created"]),
                                **contacts[row["fields"]["contact"]]),
                        "offer":
                        Offer(
                            title=row["fields"]["name"],
                            description=dehtml(row["fields"]["description"]),
                            owned_by_id=row["fields"]["manager"],
                            created_at=parse_datetime(
                                row["fields"]["created"]),
                            offered_on=parse_date(row["fields"]["offer_date"]),
                            status=Offer.OFFERED,
                            postal_address="%s\r\n%s %s\r\n%s\r\n%s %s" % (
                                row["fields"]["offer_company"],
                                row["fields"]["offer_first_name"],
                                row["fields"]["offer_last_name"],
                                row["fields"]["offer_address"],
                                row["fields"]["offer_zip_code"],
                                row["fields"]["offer_city"],
                            ),
                            subtotal=Decimal(row["fields"]["subtotal"]),
                            discount=Decimal(row["fields"]["discount"]),
                            liable_to_vat=True,
                            tax_rate=Decimal(row["fields"]["tax"]),
                            total=Decimal(row["fields"]["total"]),
                        ),
                        "services": [],
                    }

            elif row["model"] == "offers.offeredactivity":
                offers[row["fields"]["joboffer"]]["services"].append(
                    Service(
                        created_at=parse_datetime(row["fields"]["created"]),
                        title=article_name(activities,
                                           row["fields"]["activity"]),
                        description=row["fields"]["notes"],
                        position=row["fields"]["ordering"],
                        effort_type=article_name(activities,
                                                 row["fields"]["activity"]),
                        effort_hours=Decimal(row["fields"]["hours"]),
                        effort_rate=Decimal(
                            row["fields"]["invoicing_hourly_rate"]),
                        is_optional=row["fields"]["optional"],
                    ))

            elif row["model"] == "offers.offeredarticle":
                offers[row["fields"]["joboffer"]]["services"].append(
                    Service(
                        created_at=parse_datetime(row["fields"]["created"]),
                        title=article_name(articles, row["fields"]["article"]),
                        description=row["fields"]["notes"],
                        position=1000 + row["fields"]["ordering"],
                        cost=row["fields"]["count"] *
                        Decimal(row["fields"]["cost"]) *
                        (1 + Decimal(row["fields"]["commission"]) / 100),
                    ))

        for offer in offers.values():
            offer["project"].save()
            offer["offer"].project = offer["project"]
            offer["offer"].save()
            for service in offer["services"]:
                service.project = offer["project"]
                service.offer = offer["offer"]
                service.save(skip_related_model=True)

            offer["offer"].save()
示例#5
0
 def handle(self, **options):
     activate("de")
     set_user_name("Fairy tasks")
     create_accruals_for_last_month()
     create_recurring_invoices_and_notify()
     send_accounting_files()
示例#6
0
 def handle(self, **options):
     activate("de")
     set_user_name("GlassFrog")
     update_circles()
示例#7
0
 def set_current_user(self):
     user = factories.UserFactory.create()
     set_user_name(f"user-{user.pk}-{user.get_short_name()}")
     return user