crm_contract.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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, Numeric, SmallInteger, Date
  5. from sqlalchemy.orm import Mapped, mapped_column
  6. from app.database import Base
  7. class CrmContract(Base):
  8. __tablename__ = "crm_contract"
  9. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  10. contract_no: Mapped[Optional[str]] = mapped_column(String(50), comment="合同编号")
  11. contract_name: Mapped[Optional[str]] = mapped_column(String(200), comment="合同名称")
  12. customer_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="客户ID")
  13. customer_name: Mapped[Optional[str]] = mapped_column(String(200), comment="客户名称")
  14. opportunity_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="商机ID")
  15. quote_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="报价ID")
  16. parent_contract_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="父合同ID(续签)")
  17. renewal_count: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="续签次数")
  18. template_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="合同模板ID")
  19. contract_template: Mapped[Optional[str]] = mapped_column(String(50), comment="合同模板")
  20. contact_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="联系人ID")
  21. contact_name: Mapped[Optional[str]] = mapped_column(String(50), comment="联系人姓名")
  22. contact_mobile: Mapped[Optional[str]] = mapped_column(String(20), comment="联系人手机")
  23. contract_type: Mapped[Optional[str]] = mapped_column(String(20), comment="合同类型")
  24. contract_nature: Mapped[Optional[str]] = mapped_column(String(20), comment="合同性质")
  25. amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="合同金额")
  26. currency: Mapped[Optional[str]] = mapped_column(String(10), default="CNY", comment="币种")
  27. tax_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("0"), comment="税率")
  28. amount_with_tax: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="含税金额")
  29. sign_date: Mapped[Optional[date]] = mapped_column(Date, comment="签约日期")
  30. actual_sign_date: Mapped[Optional[date]] = mapped_column(Date, comment="实际签约日期")
  31. start_date: Mapped[Optional[date]] = mapped_column(Date, comment="合同开始日期")
  32. end_date: Mapped[Optional[date]] = mapped_column(Date, comment="合同结束日期")
  33. contract_period: Mapped[Optional[int]] = mapped_column(Integer, comment="合同期限(天)")
  34. status: Mapped[Optional[str]] = mapped_column(String(20), default="0", comment="合同状态")
  35. performance_status: Mapped[Optional[str]] = mapped_column(String(20), default="0", comment="履约状态")
  36. performance_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("0"), comment="履约进度")
  37. customer_satisfaction: Mapped[Optional[int]] = mapped_column(Integer, comment="客户满意度")
  38. approval_status: Mapped[Optional[str]] = mapped_column(String(20), default="0", comment="审批状态(0草稿 1待审 2通过 3驳回)")
  39. approval_flow_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="审批流程ID")
  40. contract_file: Mapped[Optional[str]] = mapped_column(String(500), comment="合同文件")
  41. attachment_files: Mapped[Optional[str]] = mapped_column(String(1000), comment="附件")
  42. owner_user_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="负责人ID")
  43. owner_user_name: Mapped[Optional[str]] = mapped_column(String(50), comment="负责人姓名")
  44. received_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="已收金额")
  45. unreceived_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="未收金额")
  46. invoice_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="已开票金额")
  47. uninvoice_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="未开票金额")
  48. party_a: Mapped[Optional[str]] = mapped_column(String(200), comment="甲方")
  49. party_a_address: Mapped[Optional[str]] = mapped_column(String(255), comment="甲方地址")
  50. party_a_contact: Mapped[Optional[str]] = mapped_column(String(50), comment="甲方联系人")
  51. party_a_mobile: Mapped[Optional[str]] = mapped_column(String(20), comment="甲方电话")
  52. party_a_legal_person: Mapped[Optional[str]] = mapped_column(String(50), comment="甲方法人")
  53. party_a_agent: Mapped[Optional[str]] = mapped_column(String(50), comment="甲方代理人")
  54. party_a_phone_fax: Mapped[Optional[str]] = mapped_column(String(50), comment="甲方传真")
  55. party_a_bank: Mapped[Optional[str]] = mapped_column(String(100), comment="甲方开户行")
  56. party_a_account: Mapped[Optional[str]] = mapped_column(String(50), comment="甲方账号")
  57. party_b: Mapped[Optional[str]] = mapped_column(String(200), comment="乙方")
  58. party_b_address: Mapped[Optional[str]] = mapped_column(String(255), comment="乙方地址")
  59. party_b_contact: Mapped[Optional[str]] = mapped_column(String(50), comment="乙方联系人")
  60. party_b_mobile: Mapped[Optional[str]] = mapped_column(String(20), comment="乙方电话")
  61. party_b_legal_person: Mapped[Optional[str]] = mapped_column(String(100), comment="乙方法人")
  62. party_b_agent: Mapped[Optional[str]] = mapped_column(String(100), comment="乙方代理人")
  63. party_b_phone_fax: Mapped[Optional[str]] = mapped_column(String(100), comment="乙方传真")
  64. party_b_bank: Mapped[Optional[str]] = mapped_column(String(200), comment="乙方开户行")
  65. party_b_account: Mapped[Optional[str]] = mapped_column(String(100), comment="乙方账号")
  66. payment_terms: Mapped[Optional[str]] = mapped_column(Text, comment="付款条款")
  67. delivery_terms: Mapped[Optional[str]] = mapped_column(Text, comment="交付条款")
  68. contract_terms: Mapped[Optional[str]] = mapped_column(Text, comment="合同条款")
  69. invalid_reason: Mapped[Optional[str]] = mapped_column(String(500), comment="作废原因")
  70. invalid_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="作废时间")
  71. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  72. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  73. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  74. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  75. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  76. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  77. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志(0存在 1删除)")
  78. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  79. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  80. template_content: Mapped[Optional[str]] = mapped_column(Text, comment="模板内容")
  81. settlement_clause_drafts: Mapped[Optional[str]] = mapped_column(Text, comment="结算条款草稿")
  82. supplier_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="供应商ID")
  83. settlement_method: Mapped[Optional[str]] = mapped_column(String(50), comment="结算方式")
  84. class CrmContractProduct(Base):
  85. __tablename__ = "crm_contract_product"
  86. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  87. contract_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="合同ID")
  88. product_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="产品ID")
  89. product_name: Mapped[Optional[str]] = mapped_column(String(200), comment="产品名称")
  90. product_no: Mapped[Optional[str]] = mapped_column(String(50), comment="产品编号")
  91. category_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="分类ID")
  92. category_name: Mapped[Optional[str]] = mapped_column(String(100), comment="分类名称")
  93. model: Mapped[Optional[str]] = mapped_column(String(100), comment="规格型号")
  94. unit: Mapped[Optional[str]] = mapped_column(String(20), comment="单位")
  95. quantity: Mapped[Optional[Decimal]] = mapped_column(Numeric(20, 4), default=Decimal("0"), comment="数量")
  96. price: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="单价")
  97. discount: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("100"), comment="折扣")
  98. tax_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("0"), comment="税率")
  99. tax_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="税额")
  100. subtotal: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="小计")
  101. delivery_date: Mapped[Optional[date]] = mapped_column(Date, comment="交付日期")
  102. delivery_status: Mapped[Optional[str]] = mapped_column(String(20), default="0", comment="交付状态")
  103. delivered_quantity: Mapped[Optional[Decimal]] = mapped_column(Numeric(20, 4), default=Decimal("0"), comment="已交付数量")
  104. description: Mapped[Optional[str]] = mapped_column(String(1000), comment="描述")
  105. package_spec: Mapped[Optional[str]] = mapped_column(String(200), comment="包装规格")
  106. delivery_method: Mapped[Optional[str]] = mapped_column(String(100), comment="交付方式")
  107. sort: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="排序")
  108. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  109. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  110. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  111. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  112. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  113. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  114. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志")
  115. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  116. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  117. class CrmContractApproval(Base):
  118. __tablename__ = "crm_contract_approval"
  119. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  120. contract_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="合同ID")
  121. flow_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="审批流程ID")
  122. step: Mapped[Optional[int]] = mapped_column(Integer, comment="审批步骤")
  123. step_name: Mapped[Optional[str]] = mapped_column(String(100), comment="步骤名称")
  124. approver_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="审批人ID")
  125. approver_name: Mapped[Optional[str]] = mapped_column(String(50), comment="审批人姓名")
  126. approver_dept: Mapped[Optional[str]] = mapped_column(String(100), comment="审批人部门")
  127. approval_result: Mapped[Optional[str]] = mapped_column(String(20), comment="审批结果")
  128. approval_opinion: Mapped[Optional[str]] = mapped_column(Text, comment="审批意见")
  129. approval_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="审批时间")
  130. approval_duration: Mapped[Optional[int]] = mapped_column(Integer, comment="审批耗时(分钟)")
  131. attachments: Mapped[Optional[str]] = mapped_column(String(1000), comment="附件")
  132. is_current: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="是否当前步骤")
  133. sort: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="排序")
  134. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  135. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  136. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  137. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  138. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  139. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  140. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志")
  141. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  142. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  143. class CrmContractChange(Base):
  144. __tablename__ = "crm_contract_change"
  145. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  146. contract_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="合同ID")
  147. contract_no: Mapped[Optional[str]] = mapped_column(String(50), comment="合同编号")
  148. change_type: Mapped[Optional[str]] = mapped_column(String(50), comment="变更类型")
  149. change_reason: Mapped[Optional[str]] = mapped_column(String(500), comment="变更原因")
  150. change_content: Mapped[Optional[str]] = mapped_column(Text, comment="变更内容")
  151. old_value: Mapped[Optional[str]] = mapped_column(Text, comment="原值")
  152. new_value: Mapped[Optional[str]] = mapped_column(Text, comment="新值")
  153. change_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="变更金额")
  154. approval_status: Mapped[Optional[str]] = mapped_column(String(20), default="0", comment="审批状态")
  155. approver_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="审批人ID")
  156. approver_name: Mapped[Optional[str]] = mapped_column(String(50), comment="审批人姓名")
  157. approval_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="审批时间")
  158. approval_opinion: Mapped[Optional[str]] = mapped_column(String(500), comment="审批意见")
  159. attachment_files: Mapped[Optional[str]] = mapped_column(String(1000), comment="附件")
  160. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  161. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  162. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  163. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  164. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  165. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  166. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志")
  167. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  168. class CrmContractTemplate(Base):
  169. __tablename__ = "crm_contract_template"
  170. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  171. template_no: Mapped[Optional[str]] = mapped_column(String(50), comment="模板编号")
  172. template_name: Mapped[Optional[str]] = mapped_column(String(200), comment="模板名称")
  173. contract_type: Mapped[Optional[str]] = mapped_column(String(20), comment="合同类型")
  174. template_content: Mapped[Optional[str]] = mapped_column(Text, comment="模板内容")
  175. payment_terms: Mapped[Optional[str]] = mapped_column(Text, comment="付款条款")
  176. delivery_terms: Mapped[Optional[str]] = mapped_column(Text, comment="交付条款")
  177. contract_terms: Mapped[Optional[str]] = mapped_column(Text, comment="合同条款")
  178. party_b: Mapped[Optional[str]] = mapped_column(String(200), comment="乙方")
  179. party_b_address: Mapped[Optional[str]] = mapped_column(String(255), comment="乙方地址")
  180. party_b_contact: Mapped[Optional[str]] = mapped_column(String(50), comment="乙方联系人")
  181. party_b_mobile: Mapped[Optional[str]] = mapped_column(String(20), comment="乙方电话")
  182. default_currency: Mapped[Optional[str]] = mapped_column(String(10), default="CNY", comment="默认币种")
  183. default_tax_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("0"), comment="默认税率")
  184. default_period: Mapped[Optional[int]] = mapped_column(Integer, comment="默认期限(天)")
  185. is_active: Mapped[Optional[int]] = mapped_column(SmallInteger, default=1, comment="是否启用(1是 0否)")
  186. usage_count: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="使用次数")
  187. sort: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="排序")
  188. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  189. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  190. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  191. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  192. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  193. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  194. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志")
  195. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")