WEBVTT 00:10.290 --> 00:22.480 What is an invoice? 00:22.480 --> 00:25.630 Invoice is a document 00:25.630 --> 00:28.660 that you give it to your customer 00:28.660 --> 00:30.416 so that they can pay you 00:30.416 --> 00:31.450 for your service or your goods. 00:31.450 --> 00:35.720 But you are a professor and consultant. 00:35.720 --> 00:38.730 Why do you need to generate invoices? 00:38.730 --> 00:39.730 Well... 00:39.730 --> 00:46.640 I do a service for my clients 00:46.640 --> 00:47.884 if I'm a consultant, 00:47.884 --> 00:48.999 and when I'm a professor, 00:48.999 --> 00:51.530 I'm teaching students, 00:51.530 --> 00:54.910 so I have to generate an invoice. 00:54.910 --> 00:58.420 Why not use Excel or something simple 00:58.420 --> 01:00.079 to generate your invoices? 01:00.079 --> 01:01.079 I've tried that. 01:01.079 --> 01:04.609 It's no good, when it... particularly, 01:04.609 --> 01:07.150 when there are many clients, 01:07.150 --> 01:09.035 managing Excels and templates 01:09.035 --> 01:10.799 becomes very very tricky. 01:10.799 --> 01:15.725 Why don't you hire someone, you know, professional 01:15.725 --> 01:17.350 to do these for you? 01:17.350 --> 01:18.428 I've tried it. 01:18.428 --> 01:22.381 I have to give them lots of information. 01:22.381 --> 01:25.140 Not that there's anything wrong with them, 01:25.140 --> 01:30.130 just that I found it to be a bit too tricky. 01:30.130 --> 01:31.250 Professional software? 01:31.250 --> 01:33.902 Good point. I've tried that too. 01:33.902 --> 01:36.900 But, what's the fun in that, right? 01:36.900 --> 01:38.850 So what did you do? 01:38.850 --> 01:40.869 Haa.. this is the interesting part! 01:40.869 --> 01:45.600 I took a software called Emacs Org mode 01:45.600 --> 01:50.640 and with that, I added Python code to it. 01:50.640 --> 01:52.418 I added so many other things to it, 01:52.418 --> 01:56.168 and then it became a really nice 01:56.168 --> 01:59.640 customizable way to generate invoices. 01:59.640 --> 02:04.549 Whoa whoa whoa... Just slow it down, bro. 02:04.549 --> 02:06.659 Give me the story. 02:06.659 --> 02:10.170 Hey. Okay... Okay... I will. 02:10.170 --> 02:11.170 Story. 02:11.170 --> 02:14.620 Uh.. Story is simple. 02:14.620 --> 02:16.590 The client wanted an invoice. 02:16.590 --> 02:19.900 So, I generated an invoice. 02:19.900 --> 02:21.419 It wasn't good enough. 02:21.419 --> 02:24.959 So, I hacked some little bit of it. 02:24.959 --> 02:28.480 I changed every time a new client came. 02:28.480 --> 02:29.848 I had to do it all over again. 02:29.848 --> 02:30.989 I did that. I did it. 02:30.989 --> 02:33.110 Then I got really tired of it. 02:33.110 --> 02:36.760 And that's what led me to all these customizations. 02:36.760 --> 02:38.632 I want features. 02:38.632 --> 02:43.249 So, rapid fire questions. Ready? Yep. 02:43.249 --> 02:46.079 Project management? Yep. 02:46.079 --> 02:48.079 Format customization? Yes. 02:48.079 --> 02:50.079 PDF export? Yes. 02:50.079 --> 02:52.079 Multi-client support? Yes. 02:52.079 --> 02:53.579 Washing my clothes? 02:53.579 --> 02:54.959 Yes... No. 02:54.959 --> 02:57.013 Haa. I was just testing you, 02:57.013 --> 03:00.900 if you're paying attention or not. 03:00.900 --> 03:04.659 Logo and signature customization? Yes. 03:04.659 --> 03:06.730 Multi-currency support? Yes. 03:06.730 --> 03:08.930 Okay, enough talky or it's just... 03:08.930 --> 03:10.930 Can you show me a demo that you did? 03:10.930 --> 03:12.950 Or is it just talky. 03:12.950 --> 03:15.239 Yes, of course. Demo. 03:15.239 --> 03:16.969 Okay, demo time. 03:16.969 --> 03:18.909 Some ingredients for invoicing. 03:18.909 --> 03:21.069 Org mode, of course. 03:21.069 --> 03:23.849 Python environment and libraries for Python: 03:23.849 --> 03:25.930 pandas, tabulate, numbers. 03:25.930 --> 03:28.260 yasnippet package, very useful. 03:28.260 --> 03:30.969 And I use for LaTeX, MikTeX packages. 03:30.969 --> 03:34.090 So, I have a project already set up. 03:34.090 --> 03:36.540 This is what we have. 03:36.540 --> 03:38.673 The project is Teaching 2021 03:38.673 --> 03:41.239 and you can set all this up. 03:41.239 --> 03:43.819 So let's start with the first and foremost. 03:43.819 --> 03:46.849 Okay, so we're going to use 03:46.849 --> 03:49.209 the yasnippet package. 03:49.209 --> 03:52.219 uh.. um.. sorry, the invoice, okay. 03:52.219 --> 03:54.550 This one introduced, it gives you this whole... 03:54.550 --> 03:56.377 generates this whole bunch of code 03:56.377 --> 03:57.150 based on a template. 03:57.150 --> 03:58.371 All you're going to do 03:58.371 --> 04:00.939 is to type out the client's name. 04:00.939 --> 04:02.797 Okay and that's it. 04:02.797 --> 04:04.469 That's all there is to it. 04:04.469 --> 04:06.446 Okay there's a whole bunch of instructions 04:06.446 --> 04:07.199 that you can follow. 04:07.199 --> 04:09.284 If it's for the first time, 04:09.284 --> 04:10.549 use bankinfo.org. 04:10.549 --> 04:14.409 Let's check out what bankinfo.org involves. 04:14.409 --> 04:16.819 Okay so you can copy this template 04:16.819 --> 04:19.269 from my GitHub repository. 04:19.269 --> 04:24.300 It's basically setup of the LaTeX tags, 04:24.300 --> 04:26.854 and particularly this text file, 04:26.854 --> 04:28.620 which is a template. 04:28.620 --> 04:30.469 There's some personal info 04:30.469 --> 04:32.125 for all the details that you want. 04:32.125 --> 04:33.814 Bank information. 04:33.814 --> 04:35.580 You can look at it in detail 04:35.580 --> 04:40.330 from my repo. The tax invoice... 04:40.330 --> 04:42.840 There are some basic constructs. 04:42.840 --> 04:45.809 You can totally change any of these 04:45.809 --> 04:47.620 to your liking. 04:47.620 --> 04:50.320 Okay, so that's bank info. 04:50.320 --> 04:52.200 Go back. That's the first part. 04:52.200 --> 04:55.540 The second part is creating a client name. 04:55.540 --> 04:58.420 So let's look at this setup, 04:58.420 --> 05:00.710 and I have one created already. 05:00.710 --> 05:02.804 So, in order to create this, 05:02.804 --> 05:03.880 all you need to do 05:03.880 --> 05:06.610 is to use the inv-setup 05:06.610 --> 05:10.300 invoice setup for your client, 05:10.300 --> 05:12.230 and it will give you all the information. 05:12.230 --> 05:14.790 All you need to do is type in here 05:14.790 --> 05:16.410 and then type in the client's name, 05:16.410 --> 05:18.785 exactly the same that you see 05:18.785 --> 05:20.210 as the file name. 05:20.210 --> 05:22.620 Okay, client one. And that's it. 05:22.620 --> 05:24.250 You're all set for you. 05:24.250 --> 05:26.218 Okay, so that's what it looks like. 05:26.218 --> 05:28.043 All the address and stuff 05:28.043 --> 05:29.710 filled out here. 05:29.710 --> 05:32.131 Okay. And then the next one 05:32.131 --> 05:37.010 is to use the... One time, 05:37.010 --> 05:38.890 you're going to do the invoice item, 05:38.890 --> 05:40.590 which is the rate table. 05:40.590 --> 05:42.490 So let's do the invoice. 05:42.490 --> 05:44.400 Invoice item... 05:44.400 --> 05:47.080 This is item master. 05:47.080 --> 05:50.320 So here again, another place 05:50.320 --> 05:53.060 where you have to enter the client name, 05:53.060 --> 05:56.780 and your rate table is ready for use. 05:56.780 --> 05:58.891 Okay. So that was... 05:58.891 --> 06:00.749 Now we go to step two, 06:00.749 --> 06:02.510 which is clock table for reference. 06:02.510 --> 06:04.150 Okay. Let's go to the clock table. 06:04.150 --> 06:09.660 I already set up this for ACMEClient1, 06:09.660 --> 06:12.030 and I give it a tag: billable. 06:12.030 --> 06:13.260 Okay. We will see that... 06:13.260 --> 06:17.470 Where have I done that? 06:17.470 --> 06:23.890 Okay, so that's the client, you know, 06:23.890 --> 06:25.360 ACMEClient1 table teaching 2021. 06:25.360 --> 06:29.090 I've clocked it for the previous month. 06:29.090 --> 06:30.090 That's what you will see. 06:30.090 --> 06:31.090 Let's see it again. 06:31.090 --> 06:34.840 Okay. That's... Let's put the instructions. 06:34.840 --> 06:38.110 And then you go to clock table 06:38.110 --> 06:40.490 to generate the clock table for the client. 06:40.490 --> 06:42.342 Okay. So clock table... 06:42.342 --> 06:44.335 This is only for your reference, 06:44.335 --> 06:45.484 not going to be exported. 06:45.484 --> 06:50.586 Here we get a clock table. All right. 06:50.586 --> 06:53.150 So with this, you get the clock table. 06:53.150 --> 06:55.670 Okay. Now go into the items part. 06:55.670 --> 06:59.810 You will see two Python blocks, 06:59.810 --> 07:01.500 which is what the next instruction says. 07:01.500 --> 07:03.526 Go into the python block 07:03.526 --> 07:06.180 and do Control-c c (C-c c). 07:06.180 --> 07:09.860 Go to the control python source block, 07:09.860 --> 07:12.413 second one, and do Ctrl-c c... 07:12.413 --> 07:14.490 Ctrl-c Ctrl-c (C-c C-c) rather. 07:14.490 --> 07:16.028 and then finally come back 07:16.028 --> 07:18.765 to Raise Invoice and do dispatcher 07:18.765 --> 07:21.270 which is exported into PDF. 07:21.270 --> 07:22.718 Okay, let's do that. 07:22.718 --> 07:27.853 First one is... I just run this code, 07:27.853 --> 07:30.950 and it generated this table for me. 07:30.950 --> 07:34.160 Okay. So it has all the details. 07:34.160 --> 07:35.253 Now we go in 07:35.253 --> 07:39.560 the second source code block, 07:39.560 --> 07:41.700 and does all this... 07:41.700 --> 07:43.530 And it has generated this stuff. 07:43.530 --> 07:46.335 Plus, you should note that for beancount, 07:46.335 --> 07:50.795 it has also generated the block for that. 07:50.795 --> 07:51.775 It's all in the code. 07:51.775 --> 07:53.820 You can customize it if you're on Ledger. 07:53.820 --> 07:54.782 You can customize it 07:54.782 --> 07:55.390 to the way you want, 07:55.390 --> 07:56.978 any accounts that you want to change. 07:56.978 --> 07:58.870 It's all customizable. 07:58.870 --> 08:00.710 Here, even the currency symbols 08:00.710 --> 08:02.840 can be changed from INR and Rupees 08:02.840 --> 08:04.681 to whatever currency you have 08:04.681 --> 08:07.190 can be changed accordingly. 08:07.190 --> 08:11.304 I have org-babel-tangle-append code 08:11.304 --> 08:12.650 that I will share in the... 08:12.650 --> 08:13.872 I've borrowed it 08:13.872 --> 08:14.889 from somebody on the Internet, 08:14.889 --> 08:16.440 so I'll share that as well 08:16.440 --> 08:18.650 in my GitHub repo. 08:18.650 --> 08:20.830 Lastly, I just want to share that 08:20.830 --> 08:23.730 you can fill your GST website 08:23.730 --> 08:24.988 with these info, 08:24.988 --> 08:26.171 so you can... You can even put in 08:26.171 --> 08:27.590 as many entries as you want 08:27.590 --> 08:29.370 in your yasnippet. 08:29.370 --> 08:30.560 Customize it the way you want. 08:30.560 --> 08:32.590 I also added a month later 08:32.590 --> 08:33.820 due date reminder, 08:33.820 --> 08:36.239 saying if the invoice is paid or not. 08:36.239 --> 08:37.209 Okay. 08:37.209 --> 08:42.051 So, a few tips to end this demo. 08:42.051 --> 08:44.990 You can customize currency symbol 08:44.990 --> 08:45.860 and currency words 08:45.860 --> 08:47.540 according to your own currency. 08:47.540 --> 08:51.269 I use the European/Indian date format 08:51.269 --> 08:54.980 which is %d-%m-%Y. You can also... 08:54.980 --> 08:56.816 The language is Indian English, 08:56.816 --> 08:57.998 so it will change according-- 08:57.998 --> 08:59.860 the numerals change according to the 08:59.860 --> 09:02.180 Indian format. Numbering format 09:02.180 --> 09:04.959 for invoice number is today's date 09:04.959 --> 09:06.620 followed by client name. 09:06.620 --> 09:07.959 That's my default. 09:07.959 --> 09:11.120 You can customize that as well. 09:11.120 --> 09:13.574 Let's try and export this 09:13.574 --> 09:17.325 to the subtree. Ctrl-s. 09:17.325 --> 09:20.579 So that's step number seven. 09:20.579 --> 09:22.029 And there it is, 09:22.029 --> 09:23.339 the tax invoice 09:23.339 --> 09:25.870 for Dr. Wile E. Coyote, 09:25.870 --> 09:27.810 and with a lovely signature as well. 09:27.810 --> 09:29.990 [Interviewer:] Well, that's great! 09:29.990 --> 09:34.309 If I were to try this out, what do I do? 09:34.309 --> 09:36.779 Go to github.com, into my repository. 09:36.779 --> 09:38.915 I'll leave my GitHub URL. 09:38.915 --> 09:42.790 You can download it use it, 09:42.790 --> 09:43.848 and let me know 09:43.848 --> 09:46.829 how it pans out for you. 09:46.829 --> 09:47.632 [Interviewer:] I have spent 00:09:47.632 --> 00:09:49.018 so much time on this. 00:09:49.018 --> 00:09:50.060 May I invoice you?