//@LibraryID:166,5 //@Name:Next Dividend Date //@Description:Displays the next confirmed ex-dividend and pay dates. //@Returns:Text //@Env:Production //@Width:250 // Care has been taken in preparing this code but it is provided without guarantee. // You are welcome to modify and extend it. Please add your name as a modifier if you distribute it. //Coded by: Richard Chiesa, ShareScript Support var returnType = 0; var outputList = ["1st future Div","2nd future Div","3rd future Div","4th future Div"]; function init(status) { /*if (status == Loading || status == Editing) { returnType = storage.getAt(0); } if (status == Adding || status == Editing) { dlg = new Dialog("Select Output", 180, 45); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("DL1",8,-1,80,-1,outputList,"","",returnType); if (dlg.show()==Dialog.Cancel) return false; returnType = dlg.getValue("DL1"); storage.setAt(0, returnType); }*/ setTitle("Next Dividend"); } function getVal(share) { var exDates = share.getResultArray(0,Result.ExDivDate).concat(share.getResultArray(1,Result.ExDivDate)); var payDates = share.getResultArray(0,Result.DivPayDate).concat(share.getResultArray(1,Result.DivPayDate)); var divAmount = share.getResultArray(0,Result.Dividend).concat(share.getResultArray(1,Result.Dividend)); var divType = share.getResultArray(0,Result.Type).concat(share.getResultArray(1,Result.Type)); for (var i=divAmount.length;i>0;i--) { if (divType[i] == "Announced" || divType[i] == "Final" || divType[i] == "Q3" || (divType[i] == "Interim" && divType[i-1] == "Q1")) { divAmount[i] -= divAmount[i-1]; } } var isEstimated = []; var nextDiv; //array number of the next dividend var outputPay, outputEx; //array number of the output var today = new Date(); //remove any blank ex-div dates for (i=0;itoday) { nextDiv = i; break; } } if (nextDiv == undefined) return; outputPay = nextDiv + returnType; for (i=exDates.length-1;i>=0;i--) { if (exDates[i]payDates.length-1 || exDates[outputEx]==null || payDates[outputPay]==null) return; //return blank if no date is available else { if (outputPay>=divAmount.length) return "Ex-Div "+dateToString(exDates[outputEx])+" - Pay "+dateToString(payDates[outputPay])+isEstimated[outputPay]; else return "Ex-Div "+dateToString(exDates[outputEx])+" - Pay "+dateToString(payDates[outputPay])+" - Div "+divAmount[outputPay].toFixed(2)+"p"+isEstimated[outputPay]; } } function dateToString(date) { var day = String(date.getDate()); var dateStr = (day.length==1) ? ('0'+day) : day; dateStr += '/'; var month = String(1+date.getMonth()); dateStr += (month.length==1) ? ('0'+month) : month; dateStr += '/'; var year = String(date.getFullYear()); dateStr += (year[2]+year[3]); return dateStr; }