Skip to content

Commit 4bc7376

Browse files
committed
Added monthly stock report
1 parent e2a0ceb commit 4bc7376

File tree

6 files changed

+202
-4
lines changed

6 files changed

+202
-4
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Generated by Django 2.0.7 on 2018-08-01 13:55
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('works', '0012_meltreport'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='meltreport',
15+
name='end_pieces',
16+
field=models.CharField(blank=True, max_length=100, null=True),
17+
),
18+
migrations.AddField(
19+
model_name='meltreport',
20+
name='scrap_weight',
21+
field=models.CharField(blank=True, max_length=100, null=True),
22+
),
23+
migrations.AddField(
24+
model_name='meltreport',
25+
name='total_weight',
26+
field=models.CharField(blank=True, max_length=100, null=True),
27+
),
28+
migrations.AddField(
29+
model_name='meltreport',
30+
name='weight',
31+
field=models.CharField(blank=True, max_length=100, null=True),
32+
),
33+
migrations.AlterField(
34+
model_name='hscnumber',
35+
name='hsc_number',
36+
field=models.CharField(max_length=200, verbose_name='HSN Code'),
37+
),
38+
]

inventory_management/works/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ class MeltReport(models.Model):
4949
quantity = models.FloatField()
5050
rate = models.FloatField()
5151
amount = models.FloatField()
52+
weight = models.CharField(max_length=100, blank=True, null=True)
53+
scrap_weight = models.CharField(max_length=100, blank=True, null=True)
54+
end_pieces = models.CharField(max_length=100, blank=True, null=True)
55+
total_weight = models.CharField(max_length=100, blank=True, null=True)
5256

5357
class QuantityRate(models.Model):
5458
report = models.ManyToManyField(Report)
@@ -87,5 +91,9 @@ class AssemblyReportForm(forms.Form):
8791
year = forms.ChoiceField(choices=YEAR_CHOICES)
8892

8993
class MeltReportForm(forms.Form):
94+
month = forms.ChoiceField(choices=MONTHS_CHOICES)
95+
year = forms.ChoiceField(choices=YEAR_CHOICES)
96+
97+
class StockReportForm(forms.Form):
9098
month = forms.ChoiceField(choices=MONTHS_CHOICES)
9199
year = forms.ChoiceField(choices=YEAR_CHOICES)

inventory_management/works/templates/admin_sidepanel.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@
1414
<li class="nav-item">
1515
<a class="nav-link {% if request.resolver_match.url_name == 'report_melt' %} active {% endif %}" href="{% url 'report_melt' %}">Melt Report</a>
1616
</li>
17+
<li class="nav-item">
18+
<a class="nav-link {% if request.resolver_match.url_name == 'stock_report_monthly' %} active {% endif %}" href="{% url 'stock_report_monthly' %}">Stock Report Report</a>
19+
</li>
1720
</ul>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{% extends 'base.html' %}
2+
3+
{% block title %}Stock Report | Melt{% endblock %}
4+
5+
{% block content %}
6+
{% load staticfiles %}
7+
{% load crispy_forms_tags %}
8+
<div class="row">
9+
<div class="col-lg-3 col-md-3" style="margin-top: 2%">
10+
{% include 'admin_sidepanel.html' %}
11+
</div>
12+
13+
<div class="col-lg-9 col-md-9">
14+
{% include 'messages.html' %}
15+
<form method="POST" action="{% url 'stock_report_monthly' %}" style="margin-top: 2%; margin-bottom: 3%">
16+
{% csrf_token %}
17+
<div class="container">
18+
{% csrf_token %}
19+
{{ form|crispy }}
20+
<div>
21+
<button type="submit" id="export" name="export" class="btn btn-success" style="margin-top: 2%; border-radius: 0">Export to Excel</button>
22+
</div>
23+
</div>
24+
</form>
25+
</div>
26+
</div>
27+
{% endblock %}

inventory_management/works/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@
3838
path('export/excel/melt/', views.excel_export_melt, name='excel_export_melt'),
3939
path('report/assembly/', views.report_assembly, name='report_assembly'),
4040
path('report/melt/', views.report_melt, name='report_melt'),
41+
path('report/stock/melt/', views.stock_report_monthly, name='stock_report_monthly'),
4142
path('', views.admin, name='homepage'),
4243
]

inventory_management/works/views.py

Lines changed: 125 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from django.shortcuts import render, redirect
22
from .models import Work, HSCNumber, ChallanNumber, MeltChallanNumber, Report, QuantityRate, MeltReport
3-
from .models import AddHSCForm, AddChallanForm, AddWorkForm, AssemblyReportForm, MeltReportForm, AddMeltChallanForm
3+
from .models import AddHSCForm, AddChallanForm, AddWorkForm, AssemblyReportForm, MeltReportForm, AddMeltChallanForm, StockReportForm
44
from django.contrib import messages
55
from django.shortcuts import get_object_or_404
66
from django.http import JsonResponse, HttpResponse
@@ -38,6 +38,10 @@ def generate_pdf(request):
3838
quantity = request.GET.get('quantity1')
3939
rate = request.GET.get('rate1')
4040
amount = request.GET.get('amount1')
41+
weight = request.GET.get('weight1')
42+
scrap_weight = request.GET.get('weight2')
43+
end_pieces = request.GET.get('weight3')
44+
total_weight = request.GET.get('total_weight')
4145

4246
# If user enters the same challan number then the previous record for that paricular challan number
4347
# is deleted and new record is overriden onto the old one
@@ -48,7 +52,11 @@ def generate_pdf(request):
4852
date=date,
4953
quantity=quantity,
5054
rate=rate,
51-
amount=amount
55+
amount=amount,
56+
weight=weight,
57+
scrap_weight=scrap_weight,
58+
end_pieces=end_pieces,
59+
total_weight=total_weight
5260
)
5361
report.save()
5462

@@ -526,7 +534,7 @@ def excel_export_melt(reports, filename):
526534
total += report.amount
527535
col = 0
528536
row += 2
529-
sheet.write(row, col, index, data)
537+
sheet.write(row, col, index + 1, data)
530538
col += 1
531539
sheet.merge_range(row, col, row, col + 2, report.particular, data)
532540
col += 3
@@ -583,4 +591,117 @@ def report_melt(request):
583591
return excel_export_melt(report, 'Report_' + calendar.month_name[int(request.POST.get('month'))] + '_' + request.POST.get('year'))
584592
else:
585593
form = MeltReportForm()
586-
return render(request, 'report_melt.html', {'form': form})
594+
return render(request, 'report_melt.html', {'form': form})
595+
596+
597+
def stock_report(reports, filename, month, year):
598+
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
599+
response['Content-Disposition'] = "attachment; filename=" + filename + ".xlsx"
600+
601+
book = Workbook(response, {'in_memory': True})
602+
sheet = book.add_worksheet('Report')
603+
604+
for col in range(50):
605+
sheet.set_column(col, col, 10)
606+
607+
merge_format = book.add_format({
608+
'bold': 3,
609+
'border': 1,
610+
'align': 'center',
611+
'valign': 'vcenter',
612+
})
613+
614+
heading = book.add_format({
615+
'bold': 1,
616+
'border': 1,
617+
'align': 'center',
618+
'valign': 'vcenter',
619+
})
620+
621+
data = book.add_format({
622+
'border': 1,
623+
'align': 'center',
624+
'valign': 'vcenter',
625+
})
626+
627+
heading2 = book.add_format({
628+
'bold': 1,
629+
'border': 1
630+
})
631+
632+
# Table headings
633+
sheet.merge_range(
634+
'A1:M5',
635+
'Mob:9423222798, 9881212348\n\
636+
VAIBHAV ENGINEERING WORKS\nS.No.15/11/3,\
637+
Old Warje Jakat Naka, Behind Kakde City, Karvanagar,\
638+
Pune-411052.\n \
639+
MONTHLY STOCK STATEMENTS FOR THE MONTH ' + month + ' ' + year,
640+
merge_format)
641+
642+
sheet.merge_range(
643+
'A6:F7',
644+
'REICEVED FROM VANAZ ENG. LTD.',
645+
heading
646+
)
647+
648+
sheet.merge_range(
649+
'G6:M7',
650+
'ISSUED FROM VAIBHAV ENG. WORKS',
651+
heading
652+
)
653+
654+
sheet.merge_range('A8:A9', 'SR\nNO', heading)
655+
sheet.merge_range('B8:B9', 'MELT OF BLANK', heading)
656+
sheet.merge_range('C8:C9', 'CHALLAN\nNUMBER', heading)
657+
sheet.merge_range('D8:D9', 'DATE', heading)
658+
sheet.merge_range('E8:E9', 'WEIGHT (KG)', heading)
659+
sheet.merge_range('F8:F9', 'QUANTITY IN', heading)
660+
sheet.merge_range('G8:G9', 'CHALLAN\nNUMBER', heading)
661+
sheet.merge_range('H8:H9', 'DATE', heading)
662+
sheet.merge_range('I8:I9', 'QUANTITY OUT', heading)
663+
sheet.merge_range('J8:J9', 'WEIGHT (KG)', heading)
664+
sheet.merge_range('K8:K9', 'SCRAP WEIGHT (KG)', heading)
665+
sheet.merge_range('L8:L9', 'END PIECES WEIGHT', heading)
666+
sheet.merge_range('M8:M9', 'TOTAL WEIGHT', heading)
667+
668+
row = 9
669+
for index, report in enumerate(reports):
670+
row += 1
671+
col = 0
672+
sheet.write(row, col, index + 1, data)
673+
col += 1
674+
sheet.write(row, col, report.particular, data)
675+
col += 5
676+
sheet.write(row, col, report.challan_number, data)
677+
col += 1
678+
sheet.write(row, col, report.date, data)
679+
col += 1
680+
sheet.write(row, col, report.quantity, data)
681+
col += 1
682+
sheet.write(row, col, report.weight, data)
683+
col += 1
684+
sheet.write(row, col, report.scrap_weight, data)
685+
col += 1
686+
sheet.write(row, col, report.end_pieces, data)
687+
col += 1
688+
sheet.write(row, col, report.total_weight, data)
689+
690+
sheet.conditional_format(10, 0, row, 8, {'type': 'blanks', 'format' : data})
691+
book.close()
692+
693+
return response
694+
695+
def stock_report_monthly(request):
696+
if request.method == 'POST':
697+
form = StockReportForm(request.POST)
698+
if form.is_valid():
699+
query = Q(
700+
date__year=request.POST.get('year'),
701+
date__month=request.POST.get('month')
702+
)
703+
report = MeltReport.objects.filter(query)
704+
return stock_report(report, 'Stock_Report_' + calendar.month_name[int(request.POST.get('month'))] + '_' + request.POST.get('year'), calendar.month_name[int(request.POST.get('month'))], request.POST.get('year'))
705+
else:
706+
form = StockReportForm()
707+
return render(request, 'stock_report.html', {'form': form})

0 commit comments

Comments
 (0)