Geçenlerde Microsoft Crm kullanan eski bir müşterimizden güzel bir istek geldi.Verdikleri servis hizmetlerinin takibini yaptıkları incident entitiy içerisine açılan kayıtların oluşturulma ve kapanma zamanları arasındaki farkı bilmek istiyorlardı.Bunun için ilgili formun içerisine yeni bir attribute ekledim.
Buna göre hangi tipte vaka kaydı ne kadar süre alıyor hangi personel daha verimli çalışıyor gibi raporlarında önünü açabilecek duruma gelmiş olacaklardı.Biraz kastırdıkdan sonra aşağıdaki gibi bir fonksiyonla durumu aştım.Fomun onsave eventine yazıyoruz.
17 /* Begin of Eralp , 1 Mart 2010 between days functions.*/
18
19 function DateDiff(firstdate,seconddate,firsttime,secondtime)
20 {
21 date1 = new Date();
22 date2 = new Date();
23 diff = new Date();
24
25 date1temp = new Date(firstdate + " " + firsttime);
26 date1.setTime(date1temp.getTime());
27
28 date2temp = new Date(seconddate + " " + secondtime);
29 date2.setTime(date2temp.getTime());
30
31 diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
32 timrrediff = diff.getTime();
33 weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
34 timediff -= weeks * (1000 * 60 * 60 * 24 * 7);
35 days = Math.floor(timediff / (1000 * 60 * 60 * 24));
36 timediff -= days * (1000 * 60 * 60 * 24);
37 hours = Math.floor(timediff / (1000 * 60 * 60));
38 timediff -= hours * (1000 * 60 * 60);
39 mins = Math.floor(timediff / (1000 * 60));
40 timediff -= mins * (1000 * 60);
41 secs = Math.floor(timediff / 1000);
42 timediff -= secs * 1000;
43 return weeks + " hafta, " + days + " gün, " + hours + " saat, " + mins + " dakika, ve " + secs + " saniye";
44 }
45
46 Date.prototype.toFormattedString = function(format)
47 {
48 var d = this;
49 var f = "";
50 f = f + format.replace( /dd|mm|yyyy|MM|hh|ss|ms|APM|\s|\/|\-|,|\./ig ,
51 function match()
52 {
53 switch(arguments[0])
54 {
55 case "dd":
56 var dd = d.getDate();
57 return (dd < 10)? "0" + dd : dd;
58 case "mm":
59 var mm = d.getMonth() + 1;
60 return (mm < 10)? "0" + mm : mm;
61 case "yyyy": return d.getFullYear();
62 case "hh":
63 var hh = d.getHours();
64 return (hh < 10)? "0" + hh : hh;
65 case "MM":
66 var MM = d.getMinutes();
67 return (MM < 10)? "0" + MM : MM;
68 case "ss":
69 var ss = d.getSeconds();
70 return (ss < 10)? "0" + ss : ss;
71 case "ms": return d.getMilliseconds();
72 case "APM":
73 var apm = d.getHours();
74 return (apm < 12)? "am" : "pm"; /* else durumunda pm olabilir.*/
75 default: return arguments[0];
76 }
77 });
78 return f;
79 }
80 /* Begin of Eralp , 1 Mart 2010 between days functions.*/
81
82 if (!IsNull(crmForm.all.createdon.DataValue) && !IsNull(crmForm.all.followupby.DataValue))
83 {
84 var d1 = new Date(crmForm.all.createdon.DataValue);
85 var d2 = new Date(crmForm.all.followupby.DataValue);
86 var temp1 = d1.toFormattedString("mm/dd/yyyy hh:MM APM");
87 var t1 = temp1.substring(temp1.indexOf(" ")+1,temp1.indexOf(" ")+10);
88 var temp2 = d2.toFormattedString("mm/dd/yyyy hh:MM APM");
89 var t2 = temp2.substring(temp2.indexOf(" ")+1,temp2.indexOf(" ")+10);
90 crmForm.all.new_totalopentime.ForceSubmit = true;
91 crmForm.all.new_totalopentime.Disabled = false;
92 if (t2.substring(0,5)=='00:00')
93 {
94 t2 = t1 ;
95 }
96 var d1t = d1.toFormattedString("mm/dd/yyyy");
97 var d2t = d2.toFormattedString("mm/dd/yyyy");
98 var t2Proc = (parseInt(t2.substring(0,2).toString())>12?parseInt(t2.substring(0,2).toString())-12:
99 parseInt(t2.substring(0,2).toString())).toString()+""+t2.substring(2,8);
100 crmForm.all.new_totalopentime.DataValue = DateDiff(d1t,d2t,t1,t2Proc);
101 crmForm.all.new_totalopentime.Disabled = true;
102 } else
103 {
104 crmForm.all.new_totalopentime.Disabled = false;
105 crmForm.all.new_totalopentime.DataValue = null;
106 crmForm.all.new_totalopentime.Disabled = true;
107 }