# La Chariotte | 0.4.1

## Présentation

<img src="la_chariotte/static/img/logos/logo_la_chariotte.png" title="logo la Chariotte" height="150"/>

La Chariotte est une application web sous licence libre Affero GPL, développée et maintenue par [Hashbang](https://hashbang.fr/).

## Contribuer

Si vous souhaitez contribuer au projet de la Chariotte, merci beaucoup !

Pour cela, une fois que vous avez cloné le projet et obtenu le statut de développeur sur le projet GitLab, vous pouvez :

- choisir une tâche dans le board que vous voulez réaliser, et vous l'assigner - si vous ne savez pas quelle tâche faire, n'hésitez pas à écrire à laetitia@chariotte.fr
- créer une nouvelle branche **à partir de develop** dont le nom dira ce que vous voulez faire
- réaliser la tâche, sans oublier d'écrire et de lancer les tests (voir plus bas)
- créer une Merge Request, contenant le plus de détails possible sur ce que vous avez fait

Ensuite, un mainteneur de la Chariotte pourra relire votre code et proposer des améliorations/poser des questions si nécessaire. Seuls les mainteneurs peuvent merger dans develop et main.

Encore merci, et bon code !

## Versions - semantic versionning

Les fonctionnalités développées dans les différentes versions sont listées dans le fichier [CHANGELOG.md](https://gitlab.com/hashbangfr/la_chariotte/-/blob/main/CHANGELOG.md). Les versions sont de la forme vX.Y.Z

Quand on merge sur develop, on incrémente Z.

Quand on merge sur main, on incrémente Y.

Quand une nouvelle version majeure de la Chariotte sort, avec la communication liée, on incrémente X.

La version est à mettre à jour dans le README, dans le pyproject.toml et dans le footer (base.html).

## Développement

Cloner le projet :
```bash
git clone https://gitlab.com/hashbangfr/la_chariotte.git
```

Installer les dépendances :
```bash
pip install -r requirements.txt
pip install -r dev-requirements.txt
```

## Travailler sur le frontend

install bulma
```bash
npm install bulma
```

check sass version
```bash
sass --version
# used for developement: 1.59.3 compiled with dart2js 2.19.4
```

watch for changes when updating scss files (from project root)
```bash
sass --watch --no-source-map ./la_chariotte/static/sass/style.sass:./la_chariotte/static/css/app.css
```

OR compile css only once (from project root)
```bash
sass --no-source-map ./la_chariotte/static/sass/style.sass:./la_chariotte/static/css/app.css
```

## Lancer les tests

Lancer les tests avec pytest :
```bash
pytest
```

Si il y a des erreurs ISORT, on peut lancer isort pour trier les fichiers :
```bash
isort .
```

Si il y a des erreurs BLACK, on peut lancer black pour linter le code :
```bash
black .
```

## Architecture de l'application

Les différentes applications Django créées sont :

- ``Order``, pour gérer tout ce qui tourne autour des commandes
- ``Accounts``, pour gérer la création de comptes. Pour la connexion, la déconnexion et le changement de mot de passe, on utilise l'application auth intégrée à Django.

A l'état actuel, le diagramme de classes est le suivant :

```mermaid
classDiagram
    GroupedOrder "item_set" <-- Item
    GroupedOrder "order_set" <-- Order
    Order "ordered_items" <-- OrderedItem 
    Item "orders" <-- OrderedItem 
    OrderAuthor "author" <-- Order
    CustomUser "grouped_orders" <-- GroupedOrder

    class GroupedOrder{
      name
      deadline : DateTime
      delivery_date : Date
      place
      description
      orga : CustomUser
      total_price
    }
    class Item{
      name
      grouped_order : GroupedOrder
      ordered_nb
      total_price
      max_limit
    }
    class Order{
        grouped_order : GroupedOrder
        author : OrderAuthor
        price
    }
    class OrderedItem{
        order : Order
        nb 
        item : Item
    }
    class OrderAuthor {
        first_name
        last_name
        phone
        email
    }
    class CustomUser{
        first_name
        last_name
        email
    }
```
