How to get today date

@max_morais_dmm Hi I would really appreciate your help with this. Can I fetch the number of days to add in field from a custom field? Let’s say I would like to enter the credit days manually in each sales, so I did this:

  1. add customer field called “credit_days”
  2. fetch it into the field from customer master like this to retrieve the standard credit days;

cur_frm.add_fetch(‘customer’,‘credit_days’,‘credit_days’)

  1. Add this script to calculate, but it adds 20 days as it was intended from your post.

frappe.ui.form.on(‘Sales Invoice’, ‘onload’, function(frm){
frm.set_value(“due_date”, frappe.datetime.add_days(frappe.datetime.nowdate(), 20));
})

Now it would be awesome if you could help change the script to fetch the days to add from the credit days field which is populated automatically from the customer master, but needs to be changed case by case, so when changed it calculates the new due date based on that field.

I am thankful for your help.
Mo

@mrmo this post will provide to you the knowledge for you achive you requirement

1 Like

@max_morais_dmm @nabinhait Hi again, I tried to check that post but I don’t see a way to update the date according to the value in custom field.
What I would like to do is enter for example 40 days in custom field ‘credit_days’ and after that the “payment due date field” should add 40 days to its current date.

frappe.ui.form.on(‘Sales Invoice’, ‘onload’, function(frm){
frm.set_value(“due_date”, frappe.datetime.add_days(frappe.datetime.nowdate(), row.credit_days));
})

I really appreciate your help, thank you.

@mrmo, define your logic based on customer field change!

You can achive this, because you dont have the customer while onload, so you cant call the server to get the credit_days from the customer.

1 Like

@max_morais_dmm I am thankful for your help, maybe I have explained it wrong, let me try again.
I would like to add days based on days that I input in the custom field on the sales invoice document, which I call credit days. I am sorry for the confusion, below is a picture with screenshot for your reference, thank you so much.

frappe.ui.form.on('Sales Invoice', 'credit_days', function(frm){
frm.set_value("due_date", frappe.datetime.add_days(frappe.datetime.nowdate(), frm.doc.credit_days));
})
6 Likes

@max_morais_dmm I am very thankful for your help, you are awesome!
When I am finished with this customization project, I will share all for the rest to enjoy.
Thank you!

2 Likes

Hello,

How to get month’s first date for report module ?

Thanks,
Hardik Gadesha

@Hardik_Gadesha try with frappe.datetime.month_start()

Where can I find documentation on frappe.datetime methods?

2 Likes

Hi, @tmatteson!

frappe.utils.data and frappe.datetime have similar methods. You can find the documentation for frappe.utils in: https://frappe.github.io/frappe/current/api/utils/frappe.utils.data

However, we’re both in the same boat. I haven’t found the documentation for frappe datetime methods. I usually just rely on Pycharm’s autocomplete and code suggestion feature. :slight_smile: Sometimes, I run console on chrome or firefox just to figure out the different frappe methods.

Hope it helps.

Cheers!

Hera

1 Like

hi all

iv done the above steps while im trying to update item delivery date in sales order

i`v created a custom field in item and sales order item called delivery_days and fetched it successfully by

cur_frm.add_fetch(“item_code”,“delivery_days”,“delivery_days”);

and tried the followign script

frappe.ui.form.on(‘Sales Order Item’, ‘delivery_days’, function(frm){
frm.set_value(“delivery_date”, frappe.datetime.add_days(frappe.datetime.nowdate(), frm.doc.delivery_days));
})

it makes the item delivery date today not today + frm.doc.delivery_days

whats wrong with that ??

so sorry about repost

but i really need this script ASAP

Hey @Mahmoud_Ghoneem

The frappe.datetime.nowdate() and frappe.datetime.add_days are python/ server side code, so they won’t work in your javascript. Sorry, and I understand your confusion about it.

Frappe uses the moment library for client side datetime functionality. The documentation you need to do this is there. Moment.js | Docs

Thanks for your reply

but actually its working when i use th following code in custom script for sales order item

frappe.ui.form.on(‘Sales Order Item’, ‘delivery_days’, function(frm){
frm.set_value(“delivery_date”, frappe.datetime.add_days(frappe.datetime.nowdate(), 12);
})

and it works fine Today+12 Day

but actually what i need is to get custom field (delivery_days) instead of 12

what should i do ??

Expected input: delivery days = 12;
Expected output: delivery date = today + delivery_days;

Break this into two lines of code and console.log the intermediate step.

Look for frappe.utils.data.formatdate in the docs, I think that may be where you’re stuck.

They are already on two lines

cur_frm.add_fetch(“item_code”,“delivery_days”,“delivery_days”);

And

frappe.ui.form.on(‘Sales Order Item’, ‘delivery_days’, function(frm){
frm.set_value(“delivery_date”, frappe.datetime.add_days(frappe.datetime.nowdate(), frm.doc.delivery_days));
})

1 Like

Yes, you’re trying to do math inside the setter function, which makes it harder to debug. Pull the math out and log it so you can see where you’re going wrong; that’s what I meant by move it into two statements.

hi, i used your code

  1. when i input days like 10 in credit days, due date will automatically add 10 days;
  2. but if i “save” invoice, due date will become the same as posting date.

Please help.

My system:
Installed Apps
ERPNext: v10.0.4 (master)
Frappe Framework: v10.0.5 (master)

any updates yet !!!