2012-04-12 9 views
38

का उपयोग करके फ्लेक्सटाइम ट्रैकिंग, तो काम पर हम flexitime (flex hours, flexi hours ...) का उपयोग करते हैं जो कि अच्छा है लेकिन ट्रैक रखना मुश्किल हो सकता है। मैं वर्तमान में अपने घंटों (org-clock-(out|in)) का ट्रैक रखने के लिए ऑर्ग-मोड का उपयोग कर रहा हूं, लेकिन अगर मैं 8 घंटे से अधिक समय से काम करता हूं तो स्वचालित रूप से गणना करने के लिए मैं इसे विस्तारित करना चाहता हूं (अधिशेष समय को मेरे flexitime 'खाते में जोड़ा जाना चाहिए) या कम (इस पर निर्भर करता है कि मैंने कितना लंच ब्रेक ब्रेक लिया था), मेरे फ्लेक्सटाइम 'अकाउंट' और इस तरह के संतुलन।Emacs (& org-mode)

क्या कोई और इसके लिए Emacs का उपयोग करता है?

मैं वर्तमान में एक बहुत ही बुनियादी सेटअप का उपयोग कर रहा अपने समय को ट्रैक करने के:

(defun check-in() 
    (interactive) 
    (let (pbuf (current-buffer)) 
    (find-file (convert-standard-filename "whatnot")) 
    (goto-char (point-max)) 
    (insert "\n") 
    (org-insert-heading) 
    (org-insert-time-stamp (current-time)) 
    (org-clock-in) 
    (save-buffer) 
    (switch-to-buffer pbuf))) 

(defun check-out() 
    (interactive) 
    (let (pbuf (current-buffer)) 
    (find-file (convert-standard-filename "whatnot")) 
    (goto-char (point-max)) 
    (org-clock-out) 
    (save-buffer) 
    (switch-to-buffer pbuf))) 
+2

आपका कोड 'चयनित-विंडो 'में प्रदर्शित बफर के साथ' वर्तमान-बफर 'को भ्रमित करता है। एलिसप से 'स्विच-टू-बफर' को कॉल करना आम तौर पर ऐसी समस्याओं का संकेत है। वर्तमान-बफर + खोजने-फ़ाइल + स्विच-टू-बफर के बजाय, आप '(with-current-buffer (find-file-noselect ...) ...) का उपयोग करना चाहते हैं। एक और नोट: कॉलिंग 'कन्वर्ट-स्टैंडर्ड-फाइलनाम' को परेशान न करें क्योंकि संभवतया आप जो भी सोचते हैं वह वास्तव में नहीं करता है, और आपका कोड इसके बिना भी काम करेगा। – Stefan

उत्तर

4

यह मानते हुए कि मैं आपकी समस्या को सही ढंग से समझ में आया, मैं एक साथ एक त्वरित समाधान हैक कर लिया। सबसे पहले, आपको यह सुनिश्चित करना चाहिए कि आप प्रति दिन केवल एक रूपरेखा प्रविष्टि बनाएं, यदि आप कई बार चेक आउट और आउट कर रहे हैं। निम्न फ़ंक्शन को परिभाषित करें जो किसी दिए गए दिन के लिए ओवरटाइम की गणना करेगा।

(defun compute-overtime (duration-string) 
    "Computes overtime duration string for the given time DURATION-STRING." 
    (let (minutes-in-a-workday 
     work-minutes 
     overtime-minutes) 
    (defconst minutes-in-a-workday 480) 
    (setq work-minutes (org-duration-string-to-minutes duration-string) 
      overtime-minutes (- work-minutes minutes-in-a-workday)) 
    (if (< overtime-minutes 0) (setq overtime-minutes 0)) 
    (org-minutes-to-hh:mm-string overtime-minutes))) 

फिर, फ़ाइल whatnot में एक घड़ी तालिका सूत्र में इस का उपयोग करें।

#+BEGIN: clocktable :maxlevel 1 :emphasize nil :scope file :formula "$3='(compute-overtime $2)::@2$3=string(\"Overtime\")"  
#+END: clocktable 

मारो सी सी सी सी जब आप इसे पुनर्जीवित करने के लिए घड़ी मेज पर कर रहे हैं।

आप किसी अन्य सूत्र का उपयोग करके ओवरटाइम को जोड़कर कुल ओवरटाइम प्राप्त कर सकते हैं। लेकिन, मैंने यह काम नहीं किया है।

+0

मैं निश्चित रूप से इसे बाहर निकालने का प्रयास करूंगा। –

+0

हाय! मैं अब पार्टी के लिए बहुत देर हो चुकी हूं, लेकिन धन्यवाद! एक अंतिम सवाल, अगर मैं बाद में इसके लिए तैयार हूं तो मुझे 8 घंटे से भी कम समय तक काम करने की अनुमति है। उपरोक्त कोड के परिणाम उन दिनों में होते हैं जहां मेरा ओवरटाइम (मुझे '(if) '-स्टेटमेंट) को हटाना था, -1 -1: -1' (6:59 काम करने के बाद) हो सकता है। मैंने निश्चित रूप से '(org-minutes-to-hh: mm-string)' को निश्चित रूप से देखा लेकिन यह पता नहीं लगा कि इसे कैसे किया जाए। – monotux

+0

मैंने अंततः इसे समझ लिया। धन्यवाद! – monotux