Example #1
0
def update_monthly_report():
    time = datetime.datetime.now()
    for user in User.objects.all():
        if user.user_type in [c.USER_TYPE_DRIVER, c.USER_TYPE_ESCORT]:
            if not m.JobReport.objects.filter(driver=user, month=month.Month(time.year, time.month)).exists():
                m.JobReport.objects.create(driver=user, month=month.Month(time.year, time.month))

        elif user.user_type == c.USER_TYPE_CUSTOMER:
            if not m.OrderReport.objects.filter(
                customer=user.customer_profile, month=month.Month(time.year, time.month)
            ).exists():
                m.OrderReport.objects.create(customer=user.customer_profile, month=month.Month(time.year, time.month))
Example #2
0
def fiches_frais(request):
    usr = Visiteur.objects.get(id=request.user.id)
    dateMinimum = month.Month(datetime.datetime.now().year - 1, 1)

    ficheFrais = FicheFrais\
        .objects\
        .filter(visiteur=usr)\
        .order_by('-mois')\
        .extra(where=['mois>=%s'], params=[str(dateMinimum)])

    context = {
        'fiches': ficheFrais
    }

    return render(request, 'ficheFraisSelect.html', context)
Example #3
0
    def handle(self, *args, **options):
        the_month = month.Month(options['year'], options['month'])

        for budget in Budget.objects.all():
            budget.create_monthly_budget(the_month)
Example #4
0
def calculate_job_report(context):
    job = get_object_or_404(m.Job, id=context['job'])
    # vehicle = get_object_or_404(Vehicle, id=context['vehicle'])
    driver = get_object_or_404(User, id=context['driver'])
    # escort = get_object_or_404(User, id=context['escort'])

    if not job.order.jobs.filter(
        progress__gt=c.JOB_PROGRESS_COMPLETE
    ).exists():
        job.order.status = c.ORDER_STATUS_COMPLETE
        job.order.save()

        order_year = job.order.created.year
        order_month = job.order.created.month

        try:
            order_report = m.OrderReport.objects.get(
                customer=job.order.customer,
                month=month.Month(order_year, order_month)
            )
            order_report.orders += 1
            order_report.weight += job.order.total_weight
            order_report.save()
        except m.OrderReport.DoesNotExist:
            m.OrderReport.objects.create(
                customer=job.order.customer,
                month=month.Month(order_year, order_month),
                orders=1,
                weights=job.order.total_weight
            )

    # # unbind vehicle, driver, escort
    # if not m.VehicleUserBind.binds_by_admin.filter(
    #     vehicle=vehicle,
    #     driver=driver,
    #     escort=escort
    # ).exists():
    #     try:
    #         vehicle_bind = m.VehicleUserBind.objects.get(
    #             vehicle=vehicle,
    #             driver=driver,
    #             escort=escort,
    #             bind_method=c.VEHICLE_USER_BIND_METHOD_BY_JOB
    #         )
    #         vehicle_bind.delete()
    #     except m.VehicleUserBind.DoesNotExist:
    #         pass

    # update job report
    job_year = job.finished_on.year
    job_month = job.finished_on.month
    try:
        job_report = m.JobReport.objects.get(
            driver=driver,
            month=month.Month(job_year, job_month)
        )
        job_report.total_mileage = \
            job_report.total_mileage + job.total_mileage
        job_report.empty_mileage = \
            job_report.empty_mileage + job.empty_mileage
        job_report.heavy_mileage = \
            job_report.heavy_mileage + job.heavy_mileage
        job_report.highway_mileage = \
            job_report.highway_mileage + job.highway_mileage
        job_report.normalway_mileage = \
            job_report.normalway_mileage + job.normalway_mileage

        job_report.save()
    except m.JobReport.DoesNotExist:
        job_report = m.JobReport.objects.create(
            driver=driver,
            month=month.Month(job_year, job_month),
            total_mileage=job.total_mileage,
            empty_mileage=job.empty_mileage,
            heavy_mileage=job.heavy_mileage,
            highway_mileage=job.highway_mileage,
            normalway_mileage=job.normalway_mileage
        )
Example #5
0
 def get_initial(self):
     initial = super(FicheFraisCreate, self).get_initial()
     now = datetime.datetime.now()
     initial['mois'] = month.Month(now.year, now.month)
     return initial
Example #6
0
def current_month():
    a = datetime.utcnow()
    return month.Month(a.year, a.month)
Example #7
0
    def handle(self, *args, **options):
        # Création du visiteur
        date_embauche = date(1999, 12, 31)
        visiteur, vcreated = Visiteur.objects.get_or_create(
            first_name='Jacques',
            last_name='Dupont',
            date_embauche=date_embauche,
        )

        # Création des fiches de frais
        # On fixe la date à partir de laquelle on créé
        # les fiches à janvier de l'année précédente
        now = datetime.now()
        date_debut_fiches = datetime.strptime(str(now.year - 1) + '01', '%Y%m')

        # Une fiche par mois
        for i in range(1, 13 + now.month):
            # Mois
            if i < 13:
                mois_annee = date_debut_fiches.year
                mois_mois = i
                mois = month.Month(mois_annee, mois_mois)
            else:
                mois_annee = date_debut_fiches.year + 1
                mois_mois = i - 12
                mois = month.Month(mois_annee, mois_mois)
            # Etat
            if i == 12 + now.month:
                etat = FicheFrais.Etat.ENCOURS
            elif i == 11 + now.month:
                etat = FicheFrais.Etat.CLOTUREE
            elif i == 10 + now.month:
                etat = FicheFrais.Etat.VALIDEE
            else:
                etat = FicheFrais.Etat.REMBOURSEE

            fiche, fcreated = FicheFrais.objects.get_or_create(
                visiteur=visiteur,
                etat=etat,
                mois=mois,
            )

            if fcreated:
                # Ligne de frais forfaitisés
                quantite = random.randint(0, 999)
                ligne_km = LigneFraisForfait.objects.get(
                    fiche=fiche,
                    frais_forfait=LigneFraisForfait.FraisForfait.FRAISKM,
                )
                ligne_km.quantite = quantite
                ligne_km.save()

                quantite = random.randint(0, 20)
                ligne_etape = LigneFraisForfait.objects.get(
                    fiche=fiche,
                    frais_forfait=LigneFraisForfait.FraisForfait.ETAPE,
                )
                ligne_etape.quantite = quantite
                ligne_etape.save()

                quantite = random.randint(0, 20)
                ligne_restau = LigneFraisForfait.objects.get(
                    fiche=fiche,
                    frais_forfait=LigneFraisForfait.FraisForfait.RESTAU,
                )
                ligne_restau.quantite = quantite
                ligne_restau.save()

                quantite = random.randint(0, 20)
                ligne_hotel = LigneFraisForfait.objects.get(
                    fiche=fiche,
                    frais_forfait=LigneFraisForfait.FraisForfait.NUITHOTEL)
                ligne_hotel.quantite = quantite
                ligne_hotel.save()

                # Lignes de frais hors forfait
                frais = [
                    ('Location véhicule', random.randint(70, 450)),
                    ('Repas avec praticien', random.randint(33, 50)),
                    ('Achat de matériel de papèterie', random.randint(10, 50)),
                    ('Location salle conférence', random.randint(140, 700)),
                    ('Taxi', random.randint(20, 70)),
                    ('Frais vestimentaire / représentation',
                     random.randint(30, 450)),
                    ('Traiteur, alimentation, boisson',
                     random.randint(35, 450)),
                    ('Voyage SNCF', random.randint(30, 150)),
                    ('Rémunération intervenant / spécialiste',
                     random.randint(250, 1200)),
                ]
                # On génère entre 3 et 5 lignes de frais hors forfait par mois
                for j in range(1, random.randint(3, 6)):
                    if mois_mois == 2 and calendar.isleap(mois_annee):
                        jour = random.randint(1, 28)
                    else:
                        if mois in [1, 3, 5, 7, 8, 10, 12]:
                            jour = random.randint(1, 31)
                        else:
                            jour = random.randint(1, 30)

                    ligne_hf = random.randint(1, len(frais)) - 1

                    LigneFraisHorsForfait.objects.create(
                        fiche=fiche,
                        libelle=frais[ligne_hf][0],
                        date=date(mois_annee, mois_mois, jour),
                        montant=frais[ligne_hf][1])

        self.stdout.write(
            self.style.SUCCESS(
                'Données créées avec succès.\n'
                f'Connectez-vous au site avec le compte du visiteur {visiteur.first_name} {visiteur.last_name}.\n'
                f'\tIdentifiant  :  {visiteur.username}\n'
                f'\tMot de passe :  {visiteur.date_embauche:%d%m%Y}'))