Magento Print Packing slip before shipping - magento

How can I print a packing slip before the order status is "complete" (i.e. before I submit a shipment?)
The current workflow is a bit backwards, especially if you are using the packing slip as a pick list in the warehouse.
Extra: A solution that is upgrade friendly.
Thanks.

http://www.magentocommerce.com/wiki/5_-_modules_and_development/orders/automatic_picklist_printing_with_check_for_order_payment
Get a paid for module if time is money, otherwise muddle through the above link or write your own module. Observe order creation and send an email of the order may be one way to go if you want it customised with attributes not on the normal order email. Otherwise, cc new orders to an account, print them out and take them down the warehouse.

I have spent hours searching the internet for a solution to this problem and finally used
'Print Packingslips (pre shipped)'.
It prints your packingslips/pick lists with any order status. Works perfectly and is the cheapest module I can find.
http://www.magentocommerce.com/magento-connect/print-packing-slips-pre-shipped.html

Here's one that does the same thing, slightly cheaper:
http://www.reddotdevelopment.com/store/magento-order-picklist-extension.html

I haven't bothered to purchase any of these extensions to see how they've implemented the ability to print before shipping, but I've been able to do it myself pretty easily.
Seems there just isn't Admin UI around all of them, but it turns out there are a numerous models that support a getPdf method.
Creditmemo
Invoice
Shipment
Packaging
The difference between calling getPdf on Invoice instead of Shipment is there is no tracking info on the PDF.

You don't need third party add-ons for this. You can just click "Submit Shipment" before you have actually packed it and you will be OK.
You can then print the packing slip, pack it up and actually ship it.
Then you can add the tracking number and send the customer email afterwards by clicking the "Send Tracking Information" button.
That's how I do it.

Related

Need some guidance on how to properly use bot framework SDK

I'm in the process of building a bot and the experience has been challenging for me so far. This is most likely since I'm coming from v1 and I'm trying to rebuild my bot in v4 style, which is pretty much a completely different framework it seems.
I find there's quite a lot of documentation out there, but it's been split up into theory and practice, probably due to the different development frameworks you can use (i.e. Node, C#). But having to go back and forth between these articles is not helping,
After quite a bit of messing around, I got to a point where things are beginning to get a bit more decent, but I still feel there's lots of room for improvement. I can't share the whole project at the moment, but I've created a gist of the most important code here: https://gist.github.com/jsiegmund/831d5337b1a438133991070daba8a27e
So my issues/questions with this code are the following:
The way to add dialogs and mainly the need to add prompts for retrieving the answers is confusing. I get the idea, but not the inner workings. For instance: I now have the prompts named after the same method names of the corresponding dialog step, is that the way it's supposed to work? There seems to be some magic code linking everything together, by convention? It would make much more sense to me when the waterfall steps would also include the prompts.
What's the right way of feeding the dialog with information so it can skip steps? I've got LUIS intents set-up in the main dialog which then open up this dialog for hour booking. Suppose my user says "I'd like to book 8 hours on customer X", I'd like the dialog to pre-populate the amount to 8 and the customer to X.
The customer/project resolving is maybe a not-so-standard requirement here. These come from a third party application, retrieved through API/SDK. So based on the logged-in user I need to go out to that application and retrieve the data for this user. This comes back in key/value pairs, where the key is a GUID. I don't want the user to type in GUIDs, so I have created these action buttons with the names of the customers, but to get the ID value into the next step it now 'writes' the GUID in the chat instead of the customer name. Using the name is tricky as I can't fully rely on those being unique. Also, for selecting the project I need the customer GUID and saving the final entry I also need the ID's. But I don't want the user to see those.
The way I now have the cards built is also weird to me. I first need to add a dialog for the card, and later when calling stepContext.PromptAsync I need to supply the card as an attachment as well. Feels duplicate to me, but removing either one of the steps fails. The normal style prompt doesn't work for me as that doesn't handle key/value but just strings (see number 3).
Okay, so those are some of the things I'm struggling with. I'm getting there and it works for now, but as said I can't escape the feeling that I'm not doing it right. If anyone could shine a light on this that would be highly appreciated.
Yeah, there is a lot of changes from version to version. Do you really mean v1?! 😲 Or v3?
The way to add dialogs and mainly the need to add prompts for retrieving the answers is confusing. I get the idea, but not really
the inner workings. For instance: I now have the prompts named after
the same method names of the corresponding dialog step, is that the
way it's supposed to work? There seems to be some magic code linking
everything together, by convention? It would make much more sense to
me when the waterfall steps would also include the prompts.
Essentially. The steps listed in the waterfall array are the names of the method names you've created. Basically, this is where you are giving the order of the steps that should be done by the bot. Prompts are classes used to retrieve data and are populated into the ("main") dialog using AddDialog() and are stored in dialog state with unique names so that they can be retrieved correctly. I see your point on how it might be simple to have everything setup in one "call" or declaration, and there probably could have been other approaches to how this was implemented; but this is what we got.
What's the right way of feeding the dialog with information so it can skip steps? I've got LUIS intents set-up in a main dialog which
then open up this dialog for hour booking. Suppose my user says "I'd
like to book 8 hours on customer X", I'd like the dialog to
pre-populate the amount to 8 and the customer to X.
Typically, steps use the previous steps value to reply, act or continue. In simple scenarios, skipping steps can be done by checking the state for those values. In the multiturn sample, if the user does not want to supply their age, it goes on to the next step and then it checks for the value and skips the step (it really doesn't skip it, it reports no age given, but you could just continue without any reply). Assuming the LUIS side of things is correct and getting the right intent+entities (let's say 'booking' intent and entities ['time' and 'customer']), then that should be doable. You would populate state info for both of those entities and then the later step (say prompting for the customer step) would just skip/bypass.
But, what you really want to do is look at adaptive dialogs. They are new and make this type of scenarios much more dynamic and flexible. Look here:
https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-adaptive-dialog-introduction?view=azure-bot-service-4.0
https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-dialogs-adaptive?view=azure-bot-service-4.0&tabs=csharp
https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/csharp_dotnetcore/adaptive-dialog
The customer / project resolving is maybe a not-so-standard requirement here. These come from a third party application, retrieved
through API/SDK. So based on the logged in user I need to go out to
that application and retrieve the data for this user. This comes back
in key/value pairs, where the key is a GUID. Obviously I don't want
the user to type in GUIDs, so I have created these action buttons with
the names of the customers, but to get the ID value into the next step
it now 'writes' the GUID in the chat instead of the customer name.
Using the name is tricky as I can't fully rely on those being unique.
I'm not 100% sure on this part. Let me look into it and get back to you.
Also, for selecting the project I need the customer GUID and saving
the final entry I also need the ID's. But I don't want the user to see
those.
State (conversation|user|etc) would be a good place to manage this.
The way I now have the cards built is also weird to me. I first need to add a dialog for the card, and later when calling
stepContext.PromptAsync I need to supply the card as an attachment as
well. Feels duplicate to me, but removing either one of the steps ends
in failure. The normal style prompt doesn't work for me as that
doesn't handle key/value but just strings (see number 3).
Nope, that's correct. I know it feels weird, but that is the way to do it. Basically, anything but simple text will be an attachment. Cards are JSON, therefore an attachment and you need to send that to the user/client.
You're doing it all correct. Again; I would suggest on looking at adaptive dialogs as that's the newer tech and the move forward. But otherwise; you're on the right path!

Taking remote orders via app

I have small food store. I'm working on an app that will allow my customers to download the app, keep up with events, etc., but most importantly, order from my app menu ahead of time, take their CC payment ahead of time and I have their order waiting for them when they walk in. I want the purchase to now show up in my Square system so I can get started on the order and I would like to use Square POS to take and process the order so I don't have to keep up with two POS systems. This does not seem possible with Square? Suggestions, idea, help?
To my knowledge, that isn't currently possible with any of the available Square APIs. The best you can do is probably to set up a Square online store and allow users to make purchases from your site. Masala Wok is a good example of what this looks like.

Magento : How do I create a module for Partial Payments?

How do I create a module for partial payments ?.. means like client can pay Full or "50% now and 50% later". He should have the option at the time of checkout. Invoice will be created for the full amount but payment only 50%
How do i do that?
it should be possible and there is more than one way to do it.
I can suggest you the following solution for instance:
In case you are using a payment provider, you should modify its module in some way in order to take in account the 50% payment. For instance, an extra payment option should be created.
The remaining 50% should be persisted along with the order (custom order attribute)
However, keep in mind that in Magento, an order can only have 1 payment method.
Magento doesn't do this out of the box.Implementing this is a lot of work, because you have to pay attention to a lot of things.For this one I would advice to look at the already existing extensions. First of all because since it's such a tricky thing to build yourself better get something that has been proven to work and second because they're not that expensive. Probably the hours you'll spent on building itself won't weigh up to the cost of the extension.
Milople offer an extension for this where it is possible to pay Full or "50% now and 50% later".

Google checkout shipping in Magento

in our website www.theprinterdepo.com we are going to implement google checkout. However I am not sure in what shipping methods or strategy to use.
In this page:
https://developers.google.com/checkout/developer/Google_Checkout_XML_API_Carrier_Calculated_Shipping#Process
Google says that they calculate based on the total weight of the items, but the thing is if one person buys one printer thats fine, but if he orders 3 printers of 50lbs, the shipping cost is invalid calculating it with 150lbs. It has to be calculated as 3 packages of 50lbs.
How would you do it in this scenario??
I have only had minimal investigation to this, but I don't think this can be handled by default installation. I know that you would need a shipping extension that can support the Google API shipping-packages, but real issue is that not even the Google API can support more than one package, either by API limitation or restriction by choice.
The <shipping-packages> tag encapsulates information about
all of the packages that will be shipped to the buyer.
At this time, merchants may only specify one package per order
I would love to see this come to full use as it would be a great addition to be able to say that anything with a weight over x requires additional packaging but currently I don't think it is possible. While this can be accomplished by separating the order into three orders, but that will over complicate the user experience and possible cause loss of sales.
Source:
https://developers.google.com/checkout/developer/Google_Checkout_XML_API_Carrier_Calculated_Shipping#tag_shipping-packages
The "limitation" mentioned above is only if you will rely on Google to calculate shipping for you using what they call carrier-calculated-shipping.
You do have other options to calculate shipping:
you can pre-calculate using whatever formula (or shipping service/plugin) you have based on the cart contents (you would know this prior to handing off the cart to Google for Checkout), which is essentially sending a flat rate shipping cost to Google, or perhaps;
use the merchant-calculations-api option so you can account for the destination/delivery address (not just cart contents). This option is more complex (you need to handle callbacks from Google), but it does give you critical information to work with when calculating shipping.
hth....

How would you start automating my job?

At my new job, we sell imported stuff. In order to be able to sell said stuff, currently the following things need to happen for every incoming shipment:
Invoice arrives, in the form of an email attachment, Excel spreadsheet
Monkey opens invoice, copy-pastes the relevant part of three columns into the relevant parts of a spreadsheet template, where extremely complex calculations happen, like =B2*550
Monkey sends this new spreadsheet to boss (email if lucky, printer otherwise), who sets the retail price
Monkey opens the reply, then proceeds to input the data into the production database using a client program that is unusable on so many levels it's not even worth detailing
Monkey fires up HyperTerminal, types in "AT", disconnect
Monkey sends text messages and emails to customers using another part of the horrible client program, one at a time
I want to change Monkey from myself to software wherever possible. I've never written anything that interfaces with email, Excel, databases or SMS before, but I'd be more than happy to learn if it saves me from this.
Here's my uneducated wishlist:
Monkey asks Thunderbird (mail server perhaps?) for the attachment
Monkey tells Excel to dump the spreadsheet into a more Jurily-friendly format, like CSV or something
Monkey parses the output, does the complex calculations
Monkey sends a link to the boss with a web form, where he can set the prices
Monkey connects to the database, inserts data
Monkey spams costumers
Is all this feasible? If yes, where do I start reading? How would you improve it? What language/framework do you think would be ideal for this? What would you do about the boss?
There are lots of tools that you could apply here, including Python, Excel macros, VB Script, etc.
In this case, PowerShell seems like an excellent choice, as it naturally combines COM access to Office, .NET, and scripting, and is all-around-awesome. If you already know a suitable technology, you'll get the job done fastest with what you know. Othewise, PowerShell.
(C# 4.0 is also reasonable, although earlier versions suck when interacting with Office's COM interfaces.)
Don't get carried away trying to solve the whole problem at once. Start by picking a small, easy part that gets you a lot of value right away. You are more likely to succeed this way. (To get your boss to agree, you need success fast. If you aren't telling your boss, you need success even faster!). Once you have that done, you can use your new-found free time (maybe only a few minutes per day) to extend your tools and skills to the next bite-sized piece. Success will accelerate success.
In time you will replace monkey with code, and either get a promotion or quit in disgust and get a better job.
The big parts are Excel and email. Excel can be handled with either COM or some sort of interaction with OpenOffice.org. Email, well, there's dozens of ways to do it. My hammer of choice is Python, along with pywin32 or PyUNO, and poplib and smtplib.
Boss... will always be boss. Not always very much you can do about the icky wetware stuff.
I'd start by asking myself the following questions
Does the invoice have to come via email or can there be a web form where the users can enter the data? There is a easy way to put a form on google docs so you can download the response in excel format in a common format set by you. I'm sure there are better ways too.
Does the boss need to create a new spreadsheet of can you provide him with a database app where he can view your form, enter the price, check "approved" and have that fire off the process that puts it in the production db?
Can the interface to the client program be worked around? Can you have some other app call the client
Can the text to the end user be sent by you and not the client app? If so, ca you automate that part
Just some thoughts.
One solution to #1 is to send email to a Unix server (instead of Exchange) and use procmail to dump out attachments (see http://gimpel.ath.cx/howto_fetch_proc_metamail.html for an example of how)
As for boss, have a nice web page which you can email him a link to. And send him a short email (3 lines or less) telling him that using that page will save him 30 mins of work over the course of a month and you 2 hours of work in a month. Just be prepared to back up the #s.
However, very high level, un less you're prepared to do the whole automation thing on your own time, you better be able to sell your boss that overall time savings x6 months are less than time to develop this. 'cause may be monkey salary in his eyes is low enough that the cost of software is just not worth it - and sadly he just may be right depending on how complicated a bulletproof robust solution is.
As I noted above, your last question is probably the most salient. It is probably best approached as a personal skunkwork project where you show the boss a completed product one day, collect your innovation bonus and then get fired because a stupider monkey can now do your job instead of you.

Resources