Exemplo n.º 1
0
	def on_recurring(self, reference_doc, auto_repeat_doc):
		self.set("delivery_date", get_next_schedule_date(reference_doc.delivery_date,
														 auto_repeat_doc.frequency, cint(auto_repeat_doc.repeat_on_day)))

		for d in self.get("items"):
			reference_delivery_date = frappe.db.get_value("Sales Order Item",
				{"parent": reference_doc.name, "item_code": d.item_code, "idx": d.idx}, "delivery_date")

			d.set("delivery_date", get_next_schedule_date(reference_delivery_date,
														  auto_repeat_doc.frequency, cint(auto_repeat_doc.repeat_on_day)))
Exemplo n.º 2
0
		def _get_delivery_date(ref_doc_delivery_date, red_doc_transaction_date, transaction_date):
			delivery_date = get_next_schedule_date(ref_doc_delivery_date,
				auto_repeat_doc.frequency, cint(auto_repeat_doc.repeat_on_day))

			if delivery_date <= transaction_date:
				delivery_date_diff = frappe.utils.date_diff(ref_doc_delivery_date, red_doc_transaction_date)
				delivery_date = frappe.utils.add_days(transaction_date, delivery_date_diff)

			return delivery_date
Exemplo n.º 3
0
		def _get_delivery_date(ref_doc_delivery_date, red_doc_transaction_date, transaction_date):
			delivery_date = get_next_schedule_date(ref_doc_delivery_date,
				auto_repeat_doc.frequency, cint(auto_repeat_doc.repeat_on_day))

			if delivery_date <= transaction_date:
				delivery_date_diff = frappe.utils.date_diff(ref_doc_delivery_date, red_doc_transaction_date)
				delivery_date = frappe.utils.add_days(transaction_date, delivery_date_diff)

			return delivery_date
def execute():
    frappe.reload_doc('accounts', 'doctype', 'subscription')
    fields = [
        "name", "reference_doctype", "reference_document", "start_date",
        "frequency", "repeat_on_day"
    ]

    for d in fields:
        if not frappe.db.has_column('Subscription', d):
            return

    doctypes = ('Purchase Order', 'Sales Order', 'Purchase Invoice',
                'Sales Invoice')
    for data in frappe.get_all('Subscription',
                               fields=fields,
                               filters={
                                   'reference_doctype': ('in', doctypes),
                                   'docstatus': 1
                               }):

        recurring_id = frappe.db.get_value(data.reference_doctype,
                                           data.reference_document,
                                           "recurring_id")
        if recurring_id:
            frappe.db.sql(
                "update `tab{0}` set subscription=%s where recurring_id=%s".
                format(data.reference_doctype), (data.name, recurring_id))

        date_field = 'transaction_date'
        if data.reference_doctype in ['Sales Invoice', 'Purchase Invoice']:
            date_field = 'posting_date'

        start_date = frappe.db.get_value(data.reference_doctype,
                                         data.reference_document, date_field)

        if start_date and getdate(start_date) != getdate(data.start_date):
            last_ref_date = frappe.db.sql(
                """
				select {0}
				from `tab{1}`
				where subscription=%s and docstatus < 2
				order by creation desc
				limit 1
			""".format(date_field, data.reference_doctype), data.name)[0][0]

            next_schedule_date = get_next_schedule_date(
                last_ref_date, data.frequency, data.repeat_on_day)

            frappe.db.set_value("Subscription", data.name, {
                "start_date": start_date,
                "next_schedule_date": next_schedule_date
            }, None)
def execute():
	frappe.reload_doc('accounts', 'doctype', 'subscription')
	fields = ["name", "reference_doctype", "reference_document",
			"start_date", "frequency", "repeat_on_day"]

	for d in fields:
		if not frappe.db.has_column('Subscription', d):
			return

	doctypes = ('Purchase Order', 'Sales Order', 'Purchase Invoice', 'Sales Invoice')
	for data in frappe.get_all('Subscription',
		fields = fields,
		filters = {'reference_doctype': ('in', doctypes), 'docstatus': 1}):

		recurring_id = frappe.db.get_value(data.reference_doctype, data.reference_document, "recurring_id")
		if recurring_id:
			frappe.db.sql("update `tab{0}` set subscription=%s where recurring_id=%s"
				.format(data.reference_doctype), (data.name, recurring_id))

		date_field = 'transaction_date'
		if data.reference_doctype in ['Sales Invoice', 'Purchase Invoice']:
			date_field = 'posting_date'

		start_date = frappe.db.get_value(data.reference_doctype, data.reference_document, date_field)

		if start_date and getdate(start_date) != getdate(data.start_date):
			last_ref_date = frappe.db.sql("""
				select {0}
				from `tab{1}`
				where subscription=%s and docstatus < 2
				order by creation desc
				limit 1
			""".format(date_field, data.reference_doctype), data.name)[0][0]

			next_schedule_date = get_next_schedule_date(last_ref_date, data.frequency, data.repeat_on_day)

			frappe.db.set_value("Subscription", data.name, {
				"start_date": start_date,
				"next_schedule_date": next_schedule_date
			}, None)