Django 开发收银系统四

6 篇文章 0 订阅
6 篇文章 0 订阅

写在前面
前三篇已经写到了收银的大致的功能都已经基本实现,但是缺少的是将数据提交到数据库中。

本章目标

先从最简单的取消订单开始,也就是将订单页面清空。
在这里插入图片描述
清空的内容包含流水单号,购物车内的商品,商品总价金额置零等。首先完成前端的取消事件。

<div class="form-group">
                    <input type="button" class="btn btn-success" value="完成" id="submit" style="width:120px;height: 50px;font-size: 28px">
                    <input type="button" class="btn btn-default" value="取消" id="cancel"
                           style="width:120px;height: 50px;margin-left: 90px;background-color: gray;color:white;font-size: 28px">
                </div>
           
$('#cancel').on('click',function () {
                location.href = "{% url 'cashier_cancel' %}"
            });

views.py里创建取消功能的函数,cashier_cancel

def cashier_cancel(request):
    """
    取消当前订单
    :param request: 
    :return: 
    """
    current_customer.buy_list.clear() # 清空当前的列表
    current_customer.serialnum = ""  # 清空当前的单号
    current_customer.total_number = 0  # 存储商品总量
    current_customer.total_money = 0.0  # 存储总金额
    current_customer.receive_money = 0.0  # 存储收款金额
    current_customer.return_money = 0.0  # 存储找零金额
    # 跳转
    return redirect(reverse('cashier') + "?username=" + login_obj.current_username)

在urls.py下写入路径。

path('cashier/get_return/', shop_views.get_return_money, name="get_return"),
path('cashier/cancel/', shop_views.cashier_cancel, name="cashier_cancel"),

效果如下

点击取消
在这里插入图片描述
实现点击完成提交到数据库
1.完成js事件,并且关联函数

$('#submit').on('click',function () {
                location.href = "{% url 'cashier_submit' %}"
            });

在views.py下添加完成该功能的函数,然后在urls.py下添加路径

def cashier_submit(request):
    """
    提交到数据库
    :param request: 
    :return: 
    """
    pass
path('cashier/submit/', shop_views.cashier_submit, name="cashier_submit"),

先把这个功能的实现结构写出来,按照这个结构添加代码
假设我们的功能已经实现,在cashier_submit函数里直接把写好的函数引用,减少views.py的代码行数,订单完成后对顾客的购买信息清空,所以,把cashier_submit函数写成如下:

def cashier_submit(request):
    """
    提交到数据库
    :param request: 
    :return: 
    """
    # 提交到数据库
    current_customer.submit(login_obj.loginId)
    # 重新初始化顾客
    current_customer.buy_list.clear()  # 清空当前的列表
    current_customer.serialnum = ""  # 清空当前的单号
    current_customer.total_number = 0  # 存储商品总量
    current_customer.total_money = 0.0  # 存储总金额
    current_customer.receive_money = 0.0  # 存储收款金额
    current_customer.return_money = 0.0  # 存储找零金额
    # 跳转
    return redirect(reverse('cashier') + "?username=" + login_obj.current_username)

这样关键的代码就在current_customer.submit(login_obj.loginId)这个语句里了,下面要完成的是submit函数的内容
首先按照之前的sql执行的语句,把执行的sql语句置空,复制之前的代码

def submit(self, loginId):
        """
        提交到数据库
        :return: 
        """
        # 实例化数据库连接
        mysql_db = pymysql.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        # 定义一个指针
        cursor = mysql_db.cursor()
        # 准备SQL语句 --- 插入SalesList,插入到SalesListDetail ,更新Product ,通过List
        sql_list = []
        # 插入到SalesList --- 一条
        sql=""
        try:
            # 遍历sql_list
            for sql in sql_list:
                # 执行SQL获取结果
                cursor.execute(sql)
            # 使用提交更改
            mysql_db.commit()
            # username = request.GET.get("username")
            sql_pay = "UPDATE Login SET ispay='ture' WHERE LoginId='%s'" % loginId
            print(sql)
            cursor.execute(sql_pay)
            mysql_db.commit()
        except Exception as e:
            # rollback -- 回滚
            mysql_db.rollback()
            # 报错
            return HttpResponse("提交出现异常,具体原因:" + str(e))
        finally:
            mysql_db.close()

这样,我们下一步就是考虑sql语句怎么写
首先写的是销售概况写入SalesList表,SalesList表包含了SerialNumber,TotalNumber,TotalPrice,ReceiveMoney,ReturnMoney,LoginId,BuyTime(流水单号,商品总数,商品总价,收钱,应找回钱,登陆人,订单时间)内容。

sql = "Insert Into SalesList (SerialNumber,TotalNumber,TotalPrice,ReceiveMoney,ReturnMoney,LoginId,BuyTime) " \
              "Values('%s',%d,%.2f,%.2f,%.2f,'%s','%s')" % (self.serialnum, self.total_number, self.total_money, self.receive_money, self.return_money, loginId, datetime.now())
        sql_list.append(sql)

可以先不执行sql语句,先把语句的输出情况打印出来,然后在sql工具里面看看生成的sql语句是否出错,这样更容易发现错误。

然后是商品明细表,SerialNumber, ProductId, ProductName, Unit, UnitPrice, Number, Money (流水单号,商品id,商品的名称,单价,单位,数量,金额)
有多少种商品,就添加多少个,所以可以用for循环。

for product in self.buy_list:
            # 插入到SalesListDetail
            sql01 = "Insert Into SalesListDetail(SerialNumber, ProductId, ProductName, Unit, UnitPrice, Number, Money) " \
                    "Values('%s','%s','%s','%s',%.2f,%d,%.2f)" % (self.serialnum, product['ProductId'], product['ProductName'],
                                                                  product['Unit'], product['UnitPrice'], product['Number'], product['Money'])

修改库存量,用现有的库存数减去商品的售出量

sql02 = "Update Product Set Inventory=Inventory-%d  where ProductId='%s'" % (product['Number'], product['ProductId'])
            sql_list.append(sql02)

测试结果:
销售商品表

销售明细表
在这里插入图片描述
库存表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值