crm_quote.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. from datetime import datetime, date
  2. from decimal import Decimal
  3. from typing import Optional
  4. from sqlalchemy import BigInteger, String, DateTime, Integer, Text, Date, Numeric, SmallInteger, Boolean
  5. from sqlalchemy.orm import Mapped, mapped_column
  6. from app.database import Base
  7. class CrmQuote(Base):
  8. __tablename__ = "crm_quote"
  9. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  10. quote_no: Mapped[Optional[str]] = mapped_column(String(50), comment="报价单编号")
  11. quote_title: Mapped[Optional[str]] = mapped_column(String(200), comment="报价单标题")
  12. quote_type: Mapped[Optional[str]] = mapped_column(String(20), comment="报价类型")
  13. customer_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="客户ID")
  14. customer_name: Mapped[Optional[str]] = mapped_column(String(200), comment="客户名称")
  15. opportunity_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="商机ID")
  16. contact_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="联系人ID")
  17. contact_name: Mapped[Optional[str]] = mapped_column(String(50), comment="联系人姓名")
  18. contact_mobile: Mapped[Optional[str]] = mapped_column(String(20), comment="联系人手机")
  19. contact_email: Mapped[Optional[str]] = mapped_column(String(100), comment="联系人邮箱")
  20. version: Mapped[Optional[str]] = mapped_column(String(20), comment="版本号标签")
  21. parent_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="父版本ID")
  22. is_latest: Mapped[Optional[int]] = mapped_column(Integer, default=1, comment="是否最新版本")
  23. total_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="总金额")
  24. discount_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("0"), comment="折扣率")
  25. discount_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="折扣金额")
  26. final_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="最终金额")
  27. validity_days: Mapped[Optional[int]] = mapped_column(Integer, comment="报价有效天数")
  28. quote_date: Mapped[Optional[date]] = mapped_column(Date, comment="报价日期")
  29. expire_date: Mapped[Optional[date]] = mapped_column(Date, comment="过期日期")
  30. status: Mapped[Optional[str]] = mapped_column(String(20), default="0", comment="状态(0草稿 1审批中 2已通过 3已拒绝 4已撤回)")
  31. reject_reason: Mapped[Optional[str]] = mapped_column(String(500), comment="拒绝原因")
  32. pdf_url: Mapped[Optional[str]] = mapped_column(String(500), comment="PDF地址")
  33. pdf_generated: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="是否已生成PDF")
  34. share_link: Mapped[Optional[str]] = mapped_column(String(500), comment="分享链接")
  35. share_code: Mapped[Optional[str]] = mapped_column(String(50), comment="分享码")
  36. share_password: Mapped[Optional[str]] = mapped_column(String(100), comment="分享密码")
  37. share_expire_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="分享过期时间")
  38. view_count: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="浏览次数")
  39. last_view_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="最后浏览时间")
  40. owner_user_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="负责人ID")
  41. owner_user_name: Mapped[Optional[str]] = mapped_column(String(50), comment="负责人姓名")
  42. supplier_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="供应商ID")
  43. supplier_name: Mapped[Optional[str]] = mapped_column(String(200), comment="供应商名称")
  44. contract_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="关联合同ID")
  45. payment_terms: Mapped[Optional[str]] = mapped_column(String(500), comment="付款条件")
  46. delivery_terms: Mapped[Optional[str]] = mapped_column(String(500), comment="交货条件")
  47. freight: Mapped[Optional[Decimal]] = mapped_column(Numeric(18, 2), default=Decimal("0"), comment="运费")
  48. attachments: Mapped[Optional[str]] = mapped_column(String(1000), comment="附件")
  49. template_content: Mapped[Optional[str]] = mapped_column(Text, comment="模板内容")
  50. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  51. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  52. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  53. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  54. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  55. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  56. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志(0存在 1删除)")
  57. version_no: Mapped[Optional[int]] = mapped_column(Integer, default=1, comment="版本序号")
  58. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  59. class CrmQuoteProduct(Base):
  60. __tablename__ = "crm_quote_product"
  61. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  62. quote_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="报价单ID")
  63. product_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="产品ID")
  64. product_name: Mapped[Optional[str]] = mapped_column(String(200), comment="产品名称")
  65. product_no: Mapped[Optional[str]] = mapped_column(String(50), comment="产品编号")
  66. category_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="分类ID")
  67. category_name: Mapped[Optional[str]] = mapped_column(String(100), comment="分类名称")
  68. model: Mapped[Optional[str]] = mapped_column(String(100), comment="规格型号")
  69. unit: Mapped[Optional[str]] = mapped_column(String(20), comment="单位")
  70. quantity: Mapped[Optional[Decimal]] = mapped_column(Numeric(20, 4), default=Decimal("0"), comment="数量")
  71. price: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="单价")
  72. discount: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("0"), comment="折扣")
  73. subtotal: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="小计")
  74. tax_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="税额")
  75. tax_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("0"), comment="税率")
  76. package_spec: Mapped[Optional[str]] = mapped_column(String(200), comment="包装规格")
  77. delivery_method: Mapped[Optional[str]] = mapped_column(String(200), comment="交货方式")
  78. description: Mapped[Optional[str]] = mapped_column(String(1000), comment="描述")
  79. sort: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="排序")
  80. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  81. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  82. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  83. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  84. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  85. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  86. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志(0存在 1删除)")
  87. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  88. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  89. class CrmQuoteApproval(Base):
  90. __tablename__ = "crm_quote_approval"
  91. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  92. quote_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="报价单ID")
  93. quote_no: Mapped[Optional[str]] = mapped_column(String(50), comment="报价单编号")
  94. step: Mapped[Optional[int]] = mapped_column(Integer, comment="审批步骤")
  95. approver_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="审批人ID")
  96. approver_name: Mapped[Optional[str]] = mapped_column(String(50), comment="审批人姓名")
  97. approval_result: Mapped[Optional[str]] = mapped_column(String(20), comment="审批结果(pass/reject)")
  98. approval_opinion: Mapped[Optional[str]] = mapped_column(Text, comment="审批意见")
  99. approval_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="审批时间")
  100. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  101. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  102. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  103. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  104. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  105. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  106. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志(0存在 1删除)")
  107. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  108. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  109. class CrmQuoteShareLog(Base):
  110. __tablename__ = "crm_quote_share_log"
  111. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  112. quote_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="报价单ID")
  113. share_code: Mapped[Optional[str]] = mapped_column(String(50), comment="分享码")
  114. visit_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="访问时间")
  115. ip_address: Mapped[Optional[str]] = mapped_column(String(50), comment="IP地址")
  116. location: Mapped[Optional[str]] = mapped_column(String(200), comment="地理位置")
  117. device_type: Mapped[Optional[str]] = mapped_column(String(50), comment="设备类型")
  118. browser: Mapped[Optional[str]] = mapped_column(String(100), comment="浏览器")
  119. stay_duration: Mapped[Optional[int]] = mapped_column(Integer, comment="停留时长(秒)")
  120. page_views: Mapped[Optional[int]] = mapped_column(Integer, comment="浏览页数")
  121. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  122. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")