Exemple #1
0
    def make_time_logs(self, open_new=False):
        """Capacity Planning. Plan time logs based on earliest availablity of workstation after
			Planned Start Date. Time logs will be created and remain in Draft mode and must be submitted
			before manufacturing entry can be made."""

        if not self.operations:
            return

        timesheets = []
        plan_days = dataent.db.get_single_value(
            "Manufacturing Settings", "capacity_planning_for_days") or 30

        timesheet = make_timesheet(self.name, self.company)
        timesheet.set('time_logs', [])

        for i, d in enumerate(self.operations):

            if d.status != 'Completed':
                self.set_start_end_time_for_workstation(d, i)

                args = self.get_operations_data(d)

                add_timesheet_detail(timesheet, args)
                original_start_time = d.planned_start_time

                # validate operating hours if workstation [not mandatory] is specified
                try:
                    timesheet.validate_time_logs()
                except OverlapError:
                    if dataent.message_log: dataent.message_log.pop()
                    timesheet.schedule_for_production_order(d.idx)
                except WorkstationHolidayError:
                    if dataent.message_log: dataent.message_log.pop()
                    timesheet.schedule_for_production_order(d.idx)

                from_time, to_time = self.get_start_end_time(timesheet, d.name)

                if date_diff(from_time, original_start_time) > cint(plan_days):
                    dataent.throw(
                        _("Unable to find Time Slot in the next {0} days for Operation {1}"
                          ).format(plan_days, d.operation))
                    break

                d.planned_start_time = from_time
                d.planned_end_time = to_time
                d.db_update()

        if timesheet and open_new:
            return timesheet

        if timesheet and timesheet.get("time_logs"):
            timesheet.save()
            timesheets.append(getlink("Timesheet", timesheet.name))

        self.planned_end_date = self.operations[-1].planned_end_time
        if timesheets:
            dataent.local.message_log = []
            dataent.msgprint(
                _("Timesheet created:") + "\n" + "\n".join(timesheets))
Exemple #2
0
    def on_submit(self):

        self.make_gl_entries()

        if self.send_payment_request and self.student_email:
            pr = make_payment_request(dt="Fees",
                                      dn=self.name,
                                      recipient_id=self.student_email,
                                      submit_doc=True,
                                      use_dummy_message=True)
            dataent.msgprint(
                _("Payment request {0} created").format(
                    getlink("Payment Request", pr.name)))
Exemple #3
0
 def validate_duplicate(self):
     assessment_result = dataent.get_list("Assessment Result",
                                          filters={
                                              "name":
                                              ("not in", [self.name]),
                                              "student": self.student,
                                              "assessment_plan":
                                              self.assessment_plan,
                                              "docstatus": ("!=", 2)
                                          })
     if assessment_result:
         dataent.throw(
             _("Assessment Result record {0} already exists.".format(
                 getlink("Assessment Result", assessment_result[0].name))))
Exemple #4
0
def invite_guardian(guardian):
    guardian_doc = dataent.get_doc("Guardian", guardian)
    if not guardian_doc.email_address:
        dataent.throw(_("Please set Email Address"))
    else:
        guardian_as_user = dataent.get_value(
            'User', dict(email=guardian_doc.email_address))
        if guardian_as_user:
            dataent.msgprint(
                _("User {0} already exists").format(
                    getlink("User", guardian_as_user)))
            return guardian_as_user
        else:
            user = dataent.get_doc({
                "doctype": "User",
                "first_name": guardian_doc.guardian_name,
                "email": guardian_doc.email_address,
                "user_type": "Website User",
                "send_welcome_email": 1
            }).insert(ignore_permissions=True)
            dataent.msgprint(
                _("User {0} created").format(getlink("User", user.name)))
            return user.name
Exemple #5
0
    def validate_account_details(self):
        if not self.cost_center:
            dataent.throw(
                _("Cost center is required to book an expense claim"))

        if not self.payable_account:
            dataent.throw(
                _("Please set default payable account for the company {0}").
                format(getlink("Company", self.company)))

        if self.is_paid:
            if not self.mode_of_payment:
                dataent.throw(
                    _("Mode of payment is required to make a payment").format(
                        self.employee))
Exemple #6
0
 def as_link(doctype, name):
     if via_console:
         return "{0}: {1}".format(doctype, name)
     else:
         return getlink(doctype, name)