From 056356526871c0e07560c1b349016d8fc68b9e33 Mon Sep 17 00:00:00 2001 From: Bunga Amalia Kurniawati Date: Fri, 4 Jun 2021 21:38:02 +0700 Subject: [PATCH 1/6] [RED] menambahkan test produk hampers --- api/tests.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/api/tests.py b/api/tests.py index 74baddd..c7a56a5 100644 --- a/api/tests.py +++ b/api/tests.py @@ -1,17 +1,21 @@ +import datetime import decimal -from os import name import tempfile +import uuid +from os import name from unittest import mock -import datetime + import jwt -from django import conf, test as django_test, urls +from django import conf +from django import test as django_test +from django import urls from django.core import management -from PIL import Image -from rest_framework import exceptions, status, test as rest_framework_test from django.utils import timezone -from api import models, seeds, utils, views -import uuid +from PIL import Image +from rest_framework import exceptions, status +from rest_framework import test as rest_framework_test +from api import models, seeds, utils, views def create_tmp_image(): @@ -299,6 +303,7 @@ class CartTest(rest_framework_test.APITestCase): # pylint: disable=too-many-inst data = { 'product': self.product.id, 'quantity': 1, + 'hampers_messages': 'Selamat Lebaran', } response = request( 'POST', @@ -333,6 +338,7 @@ class CartTest(rest_framework_test.APITestCase): # pylint: disable=too-many-inst data = { 'product': self.product.id, 'quantity': 1, + 'hampers_messages': 'Selamat Lebaran', } response = request( 'POST', @@ -387,6 +393,7 @@ class CartTest(rest_framework_test.APITestCase): # pylint: disable=too-many-inst data = { 'product': self.product.id, 'quantity': 20, + 'hampers_messages': 'Selamat Lebaran', } request( 'POST', @@ -411,6 +418,7 @@ class CartTest(rest_framework_test.APITestCase): # pylint: disable=too-many-inst data = { 'product': self.product.id, 'quantity': 1, + 'hampers_messages': 'Selamat Lebaran', } request( 'POST', @@ -455,6 +463,7 @@ class CartTest(rest_framework_test.APITestCase): # pylint: disable=too-many-inst data = { 'product': self.product.id, 'quantity': 1, + 'hampers_messages': 'Selamat Lebaran', } request( 'POST', @@ -540,6 +549,7 @@ class CartTest(rest_framework_test.APITestCase): # pylint: disable=too-many-inst data = { 'product': self.product.id, 'quantity': 20, + 'hampers_messages': 'Selamat Lebaran', } request( 'POST', @@ -1226,7 +1236,9 @@ class ProductTest(rest_framework_test.APITestCase): 'name': 'Dummy', 'price':'4000', 'modal':'2000', - 'unit': 'gram' + 'unit': 'gram', + 'is_hampers': True, + 'hampers_price': '500', } response = request( 'PATCH', @@ -1239,6 +1251,7 @@ class ProductTest(rest_framework_test.APITestCase): self.assertEqual(models.Product.objects.get(id=product.id).profit,2000) self.assertEqual(models.Product.objects.get(id=product.id).name, data['name']) self.assertEqual(models.Product.objects.get(id=product.id).unit, data['unit']) + self.assertEqual(models.Product.objects.get(id=product.id).is_hampers, data['is_hampers']) data = dict(seeds.PRODUCT_DATA, subcategory=self.subcategory.id) response = request( 'PUT', -- GitLab From eb44b32171fe301af6801a952e97d7fb14fcb9da Mon Sep 17 00:00:00 2001 From: Bunga Amalia Kurniawati Date: Fri, 4 Jun 2021 21:39:08 +0700 Subject: [PATCH 2/6] [GREEN] implementasi produk hampers dan cart --- api/migrations/0006_auto_20210529_1314.py | 30 +++++++++++++++++++ api/migrations/0007_auto_20210531_1228.py | 25 ++++++++++++++++ .../0008_remove_product_hampers_messages.py | 17 +++++++++++ .../0009_cartitem_hampers_messages.py | 18 +++++++++++ api/models.py | 18 ++++++++++- api/reports_writer.py | 11 +++++-- api/seeds.py | 2 ++ api/serializers.py | 21 +++++++++---- api/signals.py | 9 ++++++ api/views/cart.py | 8 +++-- api/views/product.py | 2 ++ 11 files changed, 149 insertions(+), 12 deletions(-) create mode 100644 api/migrations/0006_auto_20210529_1314.py create mode 100644 api/migrations/0007_auto_20210531_1228.py create mode 100644 api/migrations/0008_remove_product_hampers_messages.py create mode 100644 api/migrations/0009_cartitem_hampers_messages.py diff --git a/api/migrations/0006_auto_20210529_1314.py b/api/migrations/0006_auto_20210529_1314.py new file mode 100644 index 0000000..8274c52 --- /dev/null +++ b/api/migrations/0006_auto_20210529_1314.py @@ -0,0 +1,30 @@ +# Generated by Django 3.0.7 on 2021-05-29 06:14 + +from decimal import Decimal +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0005_auto_20210504_1541'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='hampers_messages', + field=models.TextField(default='', verbose_name='hampers messages'), + ), + migrations.AddField( + model_name='product', + name='hampers_price', + field=models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='hampers price'), + ), + migrations.AddField( + model_name='product', + name='is_hampers', + field=models.BooleanField(default=False, verbose_name='the product is hampers package'), + ), + ] diff --git a/api/migrations/0007_auto_20210531_1228.py b/api/migrations/0007_auto_20210531_1228.py new file mode 100644 index 0000000..658e6bb --- /dev/null +++ b/api/migrations/0007_auto_20210531_1228.py @@ -0,0 +1,25 @@ +# Generated by Django 3.0.7 on 2021-05-31 05:28 + +from decimal import Decimal +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0006_auto_20210529_1314'), + ] + + operations = [ + migrations.AddField( + model_name='transactionitem', + name='hampers_messages', + field=models.CharField(default='', max_length=100, verbose_name='hampers messages'), + ), + migrations.AddField( + model_name='transactionitem', + name='hampers_price', + field=models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='hampers price'), + ), + ] diff --git a/api/migrations/0008_remove_product_hampers_messages.py b/api/migrations/0008_remove_product_hampers_messages.py new file mode 100644 index 0000000..b5f2e07 --- /dev/null +++ b/api/migrations/0008_remove_product_hampers_messages.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.7 on 2021-06-04 14:03 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0007_auto_20210531_1228'), + ] + + operations = [ + migrations.RemoveField( + model_name='product', + name='hampers_messages', + ), + ] diff --git a/api/migrations/0009_cartitem_hampers_messages.py b/api/migrations/0009_cartitem_hampers_messages.py new file mode 100644 index 0000000..52c1cba --- /dev/null +++ b/api/migrations/0009_cartitem_hampers_messages.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2021-06-04 14:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0008_remove_product_hampers_messages'), + ] + + operations = [ + migrations.AddField( + model_name='cartitem', + name='hampers_messages', + field=models.CharField(default='', max_length=100, verbose_name='hampers messages'), + ), + ] diff --git a/api/models.py b/api/models.py index 0528c70..918436a 100644 --- a/api/models.py +++ b/api/models.py @@ -165,6 +165,14 @@ class Product(db_models.Model): validators=[validators.MinValueValidator(decimal.Decimal('0.01'))], verbose_name=_('total profit') ) + is_hampers = db_models.BooleanField(default=False, verbose_name=_('the product is hampers package')) + hampers_price = db_models.DecimalField( + decimal_places=2, + default=decimal.Decimal('0'), + max_digits=12, + validators=[validators.MinValueValidator(decimal.Decimal('0.01'))], + verbose_name=_('hampers price') + ) unit = db_models.CharField(default='buah', max_length=200, verbose_name=_('unit')) class Meta: ordering = ['subcategory', 'name', 'code', 'id'] @@ -203,6 +211,7 @@ class CartItem(db_models.Model): verbose_name=_('product') ) quantity = db_models.PositiveIntegerField(default=0, verbose_name=_('quantity')) + hampers_messages = db_models.CharField(default='', max_length=100, verbose_name=_('hampers messages')) class Meta: ordering = ['shopping_cart', 'product', 'id'] @@ -378,7 +387,14 @@ class TransactionItem(db_models.Model): validators=[validators.MinValueValidator(decimal.Decimal('0.01'))], verbose_name=_('product price') ) - + hampers_price = db_models.DecimalField( + default=decimal.Decimal('0'), + decimal_places=2, + max_digits=12, + validators=[validators.MinValueValidator(decimal.Decimal('0.01'))], + verbose_name=_('hampers price') + ) + hampers_messages = db_models.CharField(default='', max_length=100, verbose_name=_('hampers messages')) quantity = db_models.PositiveIntegerField(verbose_name=_('quantity')) class Meta: diff --git a/api/reports_writer.py b/api/reports_writer.py index 788e4ab..2b650f0 100644 --- a/api/reports_writer.py +++ b/api/reports_writer.py @@ -122,8 +122,8 @@ def transaction_or_donation_user_username_with_hyperlink(worksheet, row, col, ob def transaction_transaction_item_subtotal(worksheet, row, col, obj, cell_format): worksheet.write_number(row, col, sum( - transaction_item.product_price * transaction_item.quantity - for transaction_item in obj.transaction_items.all() + (transaction_item.product_price + transaction_item.hampers_price) + * transaction_item.quantity for transaction_item in obj.transaction_items.all() ), cell_format=cell_format) @@ -246,6 +246,8 @@ def create_transaction_report(filter_params): # pylint: disable=too-many-locals (transaction_item_transaction_transaction_number_with_hyperlink, _('Transaction Number')), ('product_name', _('Product Name')), ('product_price', _('Product Price')), + ('hampers_price', _('Hampers Price')), + ('hampers_messages', _('Hampers Messages')), ('quantity', _('Quantity')), ] write_queryset_data_to_worksheet( @@ -253,7 +255,10 @@ def create_transaction_report(filter_params): # pylint: disable=too-many-locals models.TransactionItem.objects.filter(transaction__in=transactions), transaction_item_fields, header_format=header_format, - data_format={'product_price': money_format}, + data_format={ + 'product_price': money_format, + 'hampers_price': money_format + }, col_width=32 ) product_order_summary_worksheet = workbook.add_worksheet(str(_('Product Order Summary'))) diff --git a/api/seeds.py b/api/seeds.py index 6a7f6b8..54965fa 100644 --- a/api/seeds.py +++ b/api/seeds.py @@ -38,6 +38,8 @@ PRODUCT_DATA = { 'stock': 10, 'modal': '1000', 'unit': 'kg', + 'is_hampers': True, + 'hampers_price': '500', } TRANSACTION_DATA = { diff --git a/api/serializers.py b/api/serializers.py index e2e7d59..92ca586 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -20,6 +20,11 @@ class OTPSerializer(serializers.Serializer): # pylint: disable=abstract-method class CartUpdateSerializer(serializers.Serializer): # pylint: disable=abstract-method product = serializers.UUIDField(label=_('Product')) quantity = serializers.IntegerField(label=_('Quantity'), min_value=0) + hampers_messages = serializers.CharField( + label=_('Hampers Messages'), + max_length=100, + required=False + ) class CartCheckoutSerializer(serializers.Serializer): # pylint: disable=abstract-method @@ -265,7 +270,9 @@ class ProductSerializer(serializers.ModelSerializer): 'profit', 'image', 'total_profit', - 'unit' + 'unit', + 'is_hampers', + 'hampers_price', ] model = models.Product read_only_fields = ['id', 'code'] @@ -277,7 +284,7 @@ class CartItemSerializer(serializers.ModelSerializer): product = ProductSerializer(read_only=True) class Meta: - fields = ['id', 'product', 'quantity'] + fields = ['id', 'product', 'quantity', 'hampers_messages'] model = models.CartItem read_only_fields = ['id', 'quantity'] @@ -294,7 +301,8 @@ class ShoppingCartSerializer(serializers.ModelSerializer): def get_cart_item_subtotal(self, obj): # pylint: disable=no-self-use cart_item_subtotal = sum( - cart_item.product.price * cart_item.quantity for cart_item in obj.cart_items.all() + (cart_item.product.price + cart_item.product.hampers_price) + * cart_item.quantity for cart_item in obj.cart_items.all() ) return str(cart_item_subtotal) @@ -309,6 +317,8 @@ class TransactionItemSerializer(serializers.ModelSerializer): 'product_code', 'product_name', 'product_price', + 'hampers_price', + 'hampers_messages', 'quantity', ] model = models.TransactionItem @@ -317,6 +327,7 @@ class TransactionItemSerializer(serializers.ModelSerializer): 'product', 'product_name', 'product_price', + 'hampers_price', 'quantity', ] @@ -405,8 +416,8 @@ class TransactionSerializer(serializers.ModelSerializer): def get_transaction_item_subtotal(self, obj): # pylint: disable=no-self-use transaction_item_subtotal = sum( - transaction_item.product_price * transaction_item.quantity - for transaction_item in obj.transaction_items.all() + (transaction_item.product_price + transaction_item.hampers_price) + * transaction_item.quantity for transaction_item in obj.transaction_items.all() ) return str(transaction_item_subtotal) diff --git a/api/signals.py b/api/signals.py index 6340fe6..2f93db7 100644 --- a/api/signals.py +++ b/api/signals.py @@ -3,6 +3,7 @@ from django.db.models import signals from api import models, utils + @dispatch.receiver(signals.post_save, sender=models.User) def create_shopping_cart(sender, created, instance, **_kwargs): # pylint: disable=unused-argument if created: @@ -40,6 +41,7 @@ def fill_dependent_transaction_fields(sender, instance, **_kwargs): if instance.bank_account_transfer_destination is None: instance.transfer_destination_bank_name = None instance.transfer_destination_bank_account_name = None + instance.transfer_destination_bank_code_number = None instance.transfer_destination_bank_account_number = None else: instance.transfer_destination_bank_name = ( @@ -51,6 +53,9 @@ def fill_dependent_transaction_fields(sender, instance, **_kwargs): instance.transfer_destination_bank_account_number = ( instance.bank_account_transfer_destination.bank_account_number ) + instance.transfer_destination_bank_code_number = ( + instance.bank_account_transfer_destination.bank_code_number + ) if (instance.transaction_status == '002'): if instance.batch is None: @@ -71,10 +76,14 @@ def fill_dependent_transaction_item_fields(sender, instance, **_kwargs): if instance.product is None: instance.product_name = None instance.product_price = None + instance.hampers_price = None + instance.hampers_messages = None else: instance.product_name = instance.product.name instance.product_price = instance.product.price + instance.hampers_price = instance.hampers_price + instance.hampers_messages = instance.hampers_messages diff --git a/api/views/cart.py b/api/views/cart.py index ddd7545..d132c23 100644 --- a/api/views/cart.py +++ b/api/views/cart.py @@ -40,6 +40,7 @@ class CartUpdate(rest_framework_views.APIView): cart_item.delete() else: cart_item.quantity = serializer.validated_data['quantity'] + cart_item.hampers_messages = serializer.validated_data['hampers_messages'] cart_item.save() return response.Response(status=status.HTTP_204_NO_CONTENT) @@ -51,8 +52,8 @@ class CartOverview(rest_framework_views.APIView): user = request.user shopping_cart = models.ShoppingCart.objects.get(user=user) item_subtotal = sum( - cart_item.product.price * cart_item.quantity - for cart_item in shopping_cart.cart_items.all() + (cart_item.product.price + cart_item.product.hampers_price) + * cart_item.quantity for cart_item in shopping_cart.cart_items.all() ) shipping_costs = api_utils.get_shipping_costs(user) if shipping_costs is None: @@ -121,7 +122,8 @@ class CartCheckout(rest_framework_views.APIView): models.TransactionItem.objects.create( transaction=transaction, product=product, - quantity=cart_item.quantity + quantity=cart_item.quantity, + hampers_messages=cart_item.hampers_messages ) cart_item.delete() if not is_success: diff --git a/api/views/product.py b/api/views/product.py index bd3a357..872c5c5 100644 --- a/api/views/product.py +++ b/api/views/product.py @@ -120,6 +120,8 @@ class ProductList(generics.ListCreateAPIView): name=serializer.validated_data['subcategory']), total_profit=0, unit=serializer.validated_data['unit'], + is_hampers=serializer.validated_data['is_hampers'], + hampers_price=serializer.validated_data['hampers_price'], image=validated_image ) product.profit = (product.price - product.modal) -- GitLab From ec9aa3ed3ee177fd4737487dc280f1fd4995908f Mon Sep 17 00:00:00 2001 From: Bunga Amalia Kurniawati Date: Sun, 6 Jun 2021 19:07:09 +0700 Subject: [PATCH 3/6] [REFACTOR] memperbaiki biaya subtotal produk hampers --- api/migrations/0010_auto_20210606_1556.py | 25 +++++++++++++++++++++++ api/models.py | 8 ++++---- api/views/cart.py | 4 +++- 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 api/migrations/0010_auto_20210606_1556.py diff --git a/api/migrations/0010_auto_20210606_1556.py b/api/migrations/0010_auto_20210606_1556.py new file mode 100644 index 0000000..5751d2a --- /dev/null +++ b/api/migrations/0010_auto_20210606_1556.py @@ -0,0 +1,25 @@ +# Generated by Django 3.0.7 on 2021-06-06 08:56 + +from decimal import Decimal +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0009_cartitem_hampers_messages'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='hampers_price', + field=models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], verbose_name='hampers price'), + ), + migrations.AlterField( + model_name='transactionitem', + name='hampers_price', + field=models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], verbose_name='hampers price'), + ), + ] diff --git a/api/models.py b/api/models.py index 918436a..0c4e9da 100644 --- a/api/models.py +++ b/api/models.py @@ -168,9 +168,9 @@ class Product(db_models.Model): is_hampers = db_models.BooleanField(default=False, verbose_name=_('the product is hampers package')) hampers_price = db_models.DecimalField( decimal_places=2, - default=decimal.Decimal('0'), + default=decimal.Decimal('0.00'), max_digits=12, - validators=[validators.MinValueValidator(decimal.Decimal('0.01'))], + validators=[validators.MinValueValidator(decimal.Decimal('0.00'))], verbose_name=_('hampers price') ) unit = db_models.CharField(default='buah', max_length=200, verbose_name=_('unit')) @@ -388,10 +388,10 @@ class TransactionItem(db_models.Model): verbose_name=_('product price') ) hampers_price = db_models.DecimalField( - default=decimal.Decimal('0'), + default=decimal.Decimal('0.00'), decimal_places=2, max_digits=12, - validators=[validators.MinValueValidator(decimal.Decimal('0.01'))], + validators=[validators.MinValueValidator(decimal.Decimal('0.00'))], verbose_name=_('hampers price') ) hampers_messages = db_models.CharField(default='', max_length=100, verbose_name=_('hampers messages')) diff --git a/api/views/cart.py b/api/views/cart.py index d132c23..b62696c 100644 --- a/api/views/cart.py +++ b/api/views/cart.py @@ -39,8 +39,9 @@ class CartUpdate(rest_framework_views.APIView): if serializer.validated_data['quantity'] == 0: cart_item.delete() else: + if 'hampers_messages' in serializer.validated_data.keys(): + cart_item.hampers_messages = serializer.validated_data['hampers_messages'] cart_item.quantity = serializer.validated_data['quantity'] - cart_item.hampers_messages = serializer.validated_data['hampers_messages'] cart_item.save() return response.Response(status=status.HTTP_204_NO_CONTENT) @@ -123,6 +124,7 @@ class CartCheckout(rest_framework_views.APIView): transaction=transaction, product=product, quantity=cart_item.quantity, + hampers_price=product.hampers_price, hampers_messages=cart_item.hampers_messages ) cart_item.delete() -- GitLab From 0de8e0eef69e3dc55b3c1489305854bf11953774 Mon Sep 17 00:00:00 2001 From: Bunga Amalia Kurniawati Date: Sun, 6 Jun 2021 19:21:44 +0700 Subject: [PATCH 4/6] [REFACTOR] menambahkan validasi data hampers --- api/views/cart.py | 8 ++++++-- api/views/product.py | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/api/views/cart.py b/api/views/cart.py index b62696c..b9d72e4 100644 --- a/api/views/cart.py +++ b/api/views/cart.py @@ -36,11 +36,15 @@ class CartUpdate(rest_framework_views.APIView): product=product, shopping_cart=shopping_cart ) + validated_hampers_messages = '' + try: + validated_hampers_messages = serializer.validated_data['hampers_messages'] + except KeyError: + pass if serializer.validated_data['quantity'] == 0: cart_item.delete() else: - if 'hampers_messages' in serializer.validated_data.keys(): - cart_item.hampers_messages = serializer.validated_data['hampers_messages'] + cart_item.hampers_messages = validated_hampers_messages cart_item.quantity = serializer.validated_data['quantity'] cart_item.save() return response.Response(status=status.HTTP_204_NO_CONTENT) diff --git a/api/views/product.py b/api/views/product.py index 872c5c5..e9f79bb 100644 --- a/api/views/product.py +++ b/api/views/product.py @@ -106,8 +106,12 @@ class ProductList(generics.ListCreateAPIView): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) validated_image = None + validated_is_hampers = False + validated_hampers_price = 0 try: validated_image = serializer.validated_data['image'] + validated_is_hampers=serializer.validated_data['is_hampers'] + validated_hampers_price = serializer.validated_data['hampers_price'] except KeyError: pass product = models.Product.objects.create( @@ -120,8 +124,8 @@ class ProductList(generics.ListCreateAPIView): name=serializer.validated_data['subcategory']), total_profit=0, unit=serializer.validated_data['unit'], - is_hampers=serializer.validated_data['is_hampers'], - hampers_price=serializer.validated_data['hampers_price'], + is_hampers=validated_is_hampers, + hampers_price=validated_hampers_price, image=validated_image ) product.profit = (product.price - product.modal) -- GitLab From 1c52faebe72068a79c1cf4095f47a56cdf8449bf Mon Sep 17 00:00:00 2001 From: Bunga Amalia Kurniawati Date: Sun, 6 Jun 2021 20:07:41 +0700 Subject: [PATCH 5/6] [CHORES] memperbaiki conflict migrations --- api/migrations/0001_initial.py | 35 ++++++++++-- api/migrations/0002_auto_20201229_1028.py | 57 ------------------- api/migrations/0003_product_unit.py | 18 ------ ...unttransferdestination_bank_code_number.py | 18 ------ api/migrations/0004_product_preorder.py | 18 ------ .../0005_product_preorder_duration.py | 20 ------- api/migrations/0006_auto_20210529_1314.py | 30 ---------- api/migrations/0006_auto_20210603_1954.py | 20 ------- api/migrations/0007_auto_20210531_1228.py | 25 -------- api/migrations/0007_auto_20210603_2001.py | 18 ------ api/migrations/0008_auto_20210605_2241.py | 28 --------- .../0008_remove_product_hampers_messages.py | 17 ------ .../0009_cartitem_hampers_messages.py | 18 ------ api/migrations/0010_auto_20210606_1556.py | 25 -------- 14 files changed, 30 insertions(+), 317 deletions(-) delete mode 100644 api/migrations/0002_auto_20201229_1028.py delete mode 100644 api/migrations/0003_product_unit.py delete mode 100644 api/migrations/0004_bankaccounttransferdestination_bank_code_number.py delete mode 100644 api/migrations/0004_product_preorder.py delete mode 100644 api/migrations/0005_product_preorder_duration.py delete mode 100644 api/migrations/0006_auto_20210529_1314.py delete mode 100644 api/migrations/0006_auto_20210603_1954.py delete mode 100644 api/migrations/0007_auto_20210531_1228.py delete mode 100644 api/migrations/0007_auto_20210603_2001.py delete mode 100644 api/migrations/0008_auto_20210605_2241.py delete mode 100644 api/migrations/0008_remove_product_hampers_messages.py delete mode 100644 api/migrations/0009_cartitem_hampers_messages.py delete mode 100644 api/migrations/0010_auto_20210606_1556.py diff --git a/api/migrations/0001_initial.py b/api/migrations/0001_initial.py index 4eaad88..3ce5478 100644 --- a/api/migrations/0001_initial.py +++ b/api/migrations/0001_initial.py @@ -1,9 +1,8 @@ -# Generated by Django 3.0.7 on 2020-10-22 09:08 +# Generated by Django 3.0.7 on 2021-06-06 13:02 import api.utils from decimal import Decimal from django.conf import settings -from django.contrib.postgres import operations as postgres_operations import django.contrib.auth.models import django.contrib.auth.validators import django.contrib.postgres.fields.citext @@ -25,7 +24,6 @@ class Migration(migrations.Migration): ] operations = [ - postgres_operations.CITextExtension(), migrations.CreateModel( name='User', fields=[ @@ -75,6 +73,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='ID')), ('bank_name', models.CharField(max_length=100, verbose_name='bank name')), + ('bank_code_number', models.CharField(default='000', max_length=100, verbose_name='bank code number')), ('bank_account_number', models.CharField(max_length=100, verbose_name='bank account number')), ('bank_account_name', models.CharField(max_length=200, verbose_name='bank account name')), ], @@ -133,8 +132,15 @@ class Migration(migrations.Migration): ('description', models.TextField(verbose_name='description')), ('price', models.DecimalField(decimal_places=2, max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='price')), ('stock', models.PositiveIntegerField(blank=True, null=True, verbose_name='stock')), - ('pre_order', models.BooleanField(default=False, verbose_name='pre-order')), + ('modal', models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='modal')), + ('profit', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='profit')), ('image', models.ImageField(blank=True, null=True, upload_to=api.utils.get_upload_file_path, verbose_name='image')), + ('total_profit', models.DecimalField(blank=True, decimal_places=2, default=Decimal('0'), max_digits=12, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='total profit')), + ('is_hampers', models.BooleanField(default=False, verbose_name='the product is hampers package')), + ('hampers_price', models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], verbose_name='hampers price')), + ('unit', models.CharField(default='buah', max_length=200, verbose_name='unit')), + ('preorder', models.BooleanField(blank=True, default=False, null=True, verbose_name='preorder')), + ('preorder_duration', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='preorder duration')), ], options={ 'verbose_name': 'product', @@ -202,6 +208,7 @@ class Migration(migrations.Migration): ('transfer_destination_bank_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank name')), ('transfer_destination_bank_account_name', models.CharField(blank=True, max_length=200, null=True, verbose_name='transfer destination bank account name')), ('transfer_destination_bank_account_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank account number')), + ('transfer_destination_bank_code_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank code number')), ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created at')), ('updated_at', models.DateTimeField(auto_now=True, db_index=True, verbose_name='updated at')), ('batch_name', models.CharField(max_length=200, verbose_name='batch name')), @@ -222,7 +229,8 @@ class Migration(migrations.Migration): ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='ID')), ('product_name', models.CharField(max_length=200, verbose_name='product name')), ('product_price', models.DecimalField(decimal_places=2, max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='product price')), - ('product_pre_order', models.BooleanField(verbose_name='product pre-order')), + ('hampers_price', models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], verbose_name='hampers price')), + ('hampers_messages', models.CharField(default='', max_length=100, verbose_name='hampers messages')), ('quantity', models.PositiveIntegerField(verbose_name='quantity')), ('product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transaction_items', to='api.Product', verbose_name='product')), ('transaction', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transaction_items', to='api.Transaction', verbose_name='transaction')), @@ -259,6 +267,21 @@ class Migration(migrations.Migration): 'ordering': ['user', 'id'], }, ), + migrations.CreateModel( + name='ProgramProgress', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField(verbose_name='date')), + ('description', django.contrib.postgres.fields.citext.CICharField(max_length=200, verbose_name='description')), + ('image', models.ImageField(blank=True, null=True, upload_to=api.utils.get_upload_file_path, verbose_name='image')), + ('program', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='program', to='api.Program', verbose_name='program')), + ], + options={ + 'verbose_name': 'program progress', + 'verbose_name_plural': 'program progress', + 'ordering': ['-date', 'id'], + }, + ), migrations.CreateModel( name='ProgramDonation', fields=[ @@ -276,6 +299,7 @@ class Migration(migrations.Migration): ('transfer_destination_bank_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank name')), ('transfer_destination_bank_account_name', models.CharField(blank=True, max_length=200, null=True, verbose_name='transfer destination bank account name')), ('transfer_destination_bank_account_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank account number')), + ('transfer_destination_bank_code_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank code number')), ('goods_quantity', models.DecimalField(blank=True, decimal_places=0, max_digits=12, null=True, validators=[django.core.validators.MinValueValidator(Decimal('1'))], verbose_name='goods quantity')), ('goods_description', models.CharField(blank=True, max_length=200, null=True, verbose_name='goods description')), ('delivery_method', models.CharField(blank=True, choices=[('PCK', 'Pick Up'), ('DLV', 'Delivered')], max_length=3, null=True, verbose_name='goods delivery method')), @@ -302,6 +326,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='ID')), ('quantity', models.PositiveIntegerField(default=0, verbose_name='quantity')), + ('hampers_messages', models.CharField(default='', max_length=100, verbose_name='hampers messages')), ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cart_items', to='api.Product', verbose_name='product')), ('shopping_cart', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cart_items', to='api.ShoppingCart', verbose_name='shopping cart')), ], diff --git a/api/migrations/0002_auto_20201229_1028.py b/api/migrations/0002_auto_20201229_1028.py deleted file mode 100644 index cfff947..0000000 --- a/api/migrations/0002_auto_20201229_1028.py +++ /dev/null @@ -1,57 +0,0 @@ -# Generated by Django 3.0.7 on 2020-12-29 03:28 - -import api.utils -from decimal import Decimal -import django.contrib.postgres.fields.citext -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='product', - name='pre_order', - ), - migrations.RemoveField( - model_name='transactionitem', - name='product_pre_order', - ), - migrations.AddField( - model_name='product', - name='modal', - field=models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='modal'), - ), - migrations.AddField( - model_name='product', - name='profit', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='profit'), - ), - migrations.AddField( - model_name='product', - name='total_profit', - field=models.DecimalField(blank=True, decimal_places=2, default=Decimal('0'), max_digits=12, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='total profit'), - ), - migrations.CreateModel( - name='ProgramProgress', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateField(verbose_name='date')), - ('description', django.contrib.postgres.fields.citext.CICharField(max_length=200, verbose_name='description')), - ('image', models.ImageField(blank=True, null=True, upload_to=api.utils.get_upload_file_path, verbose_name='image')), - ('program', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='program', to='api.Program', verbose_name='program')), - ], - options={ - 'verbose_name': 'program progress', - 'verbose_name_plural': 'program progress', - 'ordering': ['-date', 'id'], - }, - ), - ] diff --git a/api/migrations/0003_product_unit.py b/api/migrations/0003_product_unit.py deleted file mode 100644 index 2c92365..0000000 --- a/api/migrations/0003_product_unit.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2021-03-27 05:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0002_auto_20201229_1028'), - ] - - operations = [ - migrations.AddField( - model_name='product', - name='unit', - field=models.CharField(default='buah', max_length=200, verbose_name='unit'), - ), - ] diff --git a/api/migrations/0004_bankaccounttransferdestination_bank_code_number.py b/api/migrations/0004_bankaccounttransferdestination_bank_code_number.py deleted file mode 100644 index c5988cb..0000000 --- a/api/migrations/0004_bankaccounttransferdestination_bank_code_number.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2021-05-04 07:41 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0003_product_unit'), - ] - - operations = [ - migrations.AddField( - model_name='bankaccounttransferdestination', - name='bank_code_number', - field=models.CharField(default='000', max_length=100, verbose_name='bank code number'), - ), - ] diff --git a/api/migrations/0004_product_preorder.py b/api/migrations/0004_product_preorder.py deleted file mode 100644 index f9f3cd5..0000000 --- a/api/migrations/0004_product_preorder.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2021-05-21 15:02 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0003_product_unit'), - ] - - operations = [ - migrations.AddField( - model_name='product', - name='preorder', - field=models.BooleanField(blank=True, default=False, null=True, verbose_name='preorder'), - ), - ] diff --git a/api/migrations/0005_product_preorder_duration.py b/api/migrations/0005_product_preorder_duration.py deleted file mode 100644 index a231557..0000000 --- a/api/migrations/0005_product_preorder_duration.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.0.7 on 2021-05-21 16:37 - -from decimal import Decimal -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0004_product_preorder'), - ] - - operations = [ - migrations.AddField( - model_name='product', - name='preorder_duration', - field=models.DecimalField(blank=True, decimal_places=2, default=Decimal('0'), max_digits=12, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='preorder duration'), - ), - ] diff --git a/api/migrations/0006_auto_20210529_1314.py b/api/migrations/0006_auto_20210529_1314.py deleted file mode 100644 index 8274c52..0000000 --- a/api/migrations/0006_auto_20210529_1314.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.0.7 on 2021-05-29 06:14 - -from decimal import Decimal -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0005_auto_20210504_1541'), - ] - - operations = [ - migrations.AddField( - model_name='product', - name='hampers_messages', - field=models.TextField(default='', verbose_name='hampers messages'), - ), - migrations.AddField( - model_name='product', - name='hampers_price', - field=models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='hampers price'), - ), - migrations.AddField( - model_name='product', - name='is_hampers', - field=models.BooleanField(default=False, verbose_name='the product is hampers package'), - ), - ] diff --git a/api/migrations/0006_auto_20210603_1954.py b/api/migrations/0006_auto_20210603_1954.py deleted file mode 100644 index 1da8d35..0000000 --- a/api/migrations/0006_auto_20210603_1954.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.0.7 on 2021-06-03 12:54 - -from decimal import Decimal -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0005_product_preorder_duration'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='preorder_duration', - field=models.DecimalField(blank=True, decimal_places=2, default=Decimal('0'), max_digits=12, null=True, validators=[django.core.validators.MinValueValidator(Decimal('1'))], verbose_name='preorder duration'), - ), - ] diff --git a/api/migrations/0007_auto_20210531_1228.py b/api/migrations/0007_auto_20210531_1228.py deleted file mode 100644 index 658e6bb..0000000 --- a/api/migrations/0007_auto_20210531_1228.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.0.7 on 2021-05-31 05:28 - -from decimal import Decimal -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0006_auto_20210529_1314'), - ] - - operations = [ - migrations.AddField( - model_name='transactionitem', - name='hampers_messages', - field=models.CharField(default='', max_length=100, verbose_name='hampers messages'), - ), - migrations.AddField( - model_name='transactionitem', - name='hampers_price', - field=models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='hampers price'), - ), - ] diff --git a/api/migrations/0007_auto_20210603_2001.py b/api/migrations/0007_auto_20210603_2001.py deleted file mode 100644 index af9d337..0000000 --- a/api/migrations/0007_auto_20210603_2001.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2021-06-03 13:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0006_auto_20210603_1954'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='preorder_duration', - field=models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='preorder duration'), - ), - ] diff --git a/api/migrations/0008_auto_20210605_2241.py b/api/migrations/0008_auto_20210605_2241.py deleted file mode 100644 index d73c378..0000000 --- a/api/migrations/0008_auto_20210605_2241.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.0.7 on 2021-06-05 15:41 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0007_auto_20210603_2001'), - ] - - operations = [ - migrations.AddField( - model_name='bankaccounttransferdestination', - name='bank_code_number', - field=models.CharField(default='000', max_length=100, verbose_name='bank code number'), - ), - migrations.AddField( - model_name='programdonation', - name='transfer_destination_bank_code_number', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank code number'), - ), - migrations.AddField( - model_name='transaction', - name='transfer_destination_bank_code_number', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='transfer destination bank code number'), - ), - ] diff --git a/api/migrations/0008_remove_product_hampers_messages.py b/api/migrations/0008_remove_product_hampers_messages.py deleted file mode 100644 index b5f2e07..0000000 --- a/api/migrations/0008_remove_product_hampers_messages.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.7 on 2021-06-04 14:03 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0007_auto_20210531_1228'), - ] - - operations = [ - migrations.RemoveField( - model_name='product', - name='hampers_messages', - ), - ] diff --git a/api/migrations/0009_cartitem_hampers_messages.py b/api/migrations/0009_cartitem_hampers_messages.py deleted file mode 100644 index 52c1cba..0000000 --- a/api/migrations/0009_cartitem_hampers_messages.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2021-06-04 14:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0008_remove_product_hampers_messages'), - ] - - operations = [ - migrations.AddField( - model_name='cartitem', - name='hampers_messages', - field=models.CharField(default='', max_length=100, verbose_name='hampers messages'), - ), - ] diff --git a/api/migrations/0010_auto_20210606_1556.py b/api/migrations/0010_auto_20210606_1556.py deleted file mode 100644 index 5751d2a..0000000 --- a/api/migrations/0010_auto_20210606_1556.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.0.7 on 2021-06-06 08:56 - -from decimal import Decimal -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0009_cartitem_hampers_messages'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='hampers_price', - field=models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], verbose_name='hampers price'), - ), - migrations.AlterField( - model_name='transactionitem', - name='hampers_price', - field=models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], verbose_name='hampers price'), - ), - ] -- GitLab From ac68442098fc2e11d2f0c6d6a4dc010ef15a6050 Mon Sep 17 00:00:00 2001 From: Bunga Amalia Kurniawati Date: Sun, 6 Jun 2021 20:17:31 +0700 Subject: [PATCH 6/6] [CHORES] menambahkan citext extension pada database --- api/migrations/0001_initial.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/api/migrations/0001_initial.py b/api/migrations/0001_initial.py index 3ce5478..e61302d 100644 --- a/api/migrations/0001_initial.py +++ b/api/migrations/0001_initial.py @@ -1,18 +1,20 @@ # Generated by Django 3.0.7 on 2021-06-06 13:02 -import api.utils +import re +import uuid from decimal import Decimal -from django.conf import settings + +import api.utils import django.contrib.auth.models import django.contrib.auth.validators import django.contrib.postgres.fields.citext import django.core.validators -from django.db import migrations, models import django.db.models.deletion import django.utils.timezone import phonenumber_field.modelfields -import re -import uuid +from django.conf import settings +from django.contrib.postgres import operations as postgres_operations +from django.db import migrations, models class Migration(migrations.Migration): @@ -24,6 +26,7 @@ class Migration(migrations.Migration): ] operations = [ + postgres_operations.CITextExtension(), migrations.CreateModel( name='User', fields=[ -- GitLab