Skip to content

Instantly share code, notes, and snippets.

View hasokeric's full-sized avatar
👋

Haso Keric hasokeric

👋
View GitHub Profile
@hasokeric
hasokeric / company-ownership.md
Created July 5, 2016 18:22 — forked from jdmaturen/company-ownership.md
Who pays when startup employees keep their equity?

Who pays when startup employees keep their equity?

JD Maturen, 2016/07/05, San Francisco, CA

As has been much discussed, stock options as used today are not a practical or reliable way of compensating employees of fast growing startups. With an often high strike price, a large tax burden on execution due to AMT, and a 90 day execution window after leaving the company many share options are left unexecuted.

There have been a variety of proposed modifications to how equity is distributed to address these issues for individual employees. However, there hasn't been much discussion of how these modifications will change overall ownership dynamics of startups. In this post we'll dive into the situation as it stands today where there is very near 100% equity loss when employees leave companies pre-exit and then we'll look at what would happen if there were instead a 0% loss rate.

What we'll see is that employees gain nearly 3-fold, while both founders and investors – particularly early investors – get dilute

Erp.Proxy.Rpt.SalesOrderAckImpl rptSOAck = WCFServiceSupport.CreateImpl<Erp.Proxy.Rpt.SalesOrderAckImpl>((Session)oTrans.Session,Erp.Proxy.Rpt.SalesOrderAckImpl.UriPath);
Erp.Rpt.SalesOrderAckDataSet rptDSSOAck =null;
rptDSSOAck = rptSOAck.GetNewParameters();
EpiDataView edvCallContextBpmData = ((EpiDataView)(this.oTrans.EpiDataViews["CallContextBpmData"]));
System.Data.DataRow edvCallContextBpmDataRow = edvCallContextBpmData.CurrentDataRow;
rptDSSOAck.Tables["SalesOrderAckParam"].Rows[0]["OrderNum"] = edvCallContextBpmDataRow["ShortChar02"];
rptDSSOAck.Tables["SalesOrderAckParam"].Rows[0]["OrderList"] = edvCallContextBpmDataRow["ShortChar02"];
@hasokeric
hasokeric / E10-BAQ-Sample.cs
Created August 11, 2016 03:33
Epicor 10.1 Call BAQ From Code
// Execute a BAQ by Calling the Business Object via WCF
private void CallBAQUsingBO()
{
try
{
// Declare and Initialize Variables
string BAQName = "DIEN-HASO";
Ice.BO.QueryExecutionDataSet ds = new Ice.BO.QueryExecutionDataSet();
// Add Parameter Rows
@hasokeric
hasokeric / 0_reuse_code.js
Created August 12, 2016 19:50
Here are some things you can do with Gists in GistBox.
// Use Gists to store code you would like to remember later on
console.log(window); // log the "window" object to the console
@hasokeric
hasokeric / e10_baq_sample_adapter_bo.cs
Created August 31, 2016 15:22
E10 - Call BAQ From Code (Adapter & BO)
//
// Epicor 10.1 Calling BAQ from C# Sample by Haso Keric
//
// If you have seen and are using the following in your BAQ Call:
// QueryExecutionDataSet q = dynamicQuery.GetQueryExecutionParametersByID("BAQ_NAME");
// q.ExecutionParameter.Clear();
//
// There is really no need. That is if you are working with multiple methods or you would like to check for possible params
// It makes absolutely no sense to Get The Params only to Clear them. Because you end up adding Param // Rows again anyways.
//
@hasokeric
hasokeric / Quote.GetNewQuoteHed.POST.p
Created August 31, 2016 15:24
Epicor's System sets an Automatic Due Date from your Company Config table... But if you say +3 days... it doesnt care if its a weekend or a holiday... Lets check the Production Calendar and assign a proper DueDate.
/* Specify the DueDate */
def var newDate as Date init Today no-undo.
def var totalDays as Integer init 0 no-undo.
def var validDateFound AS LOGICAL init false no-undo.
def var calName as Character init "MAIN" no-undo.
for each ttQuoteHed where ttQuoteHed.RowMod = "A".
if (ttQuoteHed.Quoted eq false) THEN DO:
/* Initialize */
@hasokeric
hasokeric / ToolClick
Created August 31, 2016 15:25
Invoke Tool Click on Any EpiBaseForm
MethodInfo mi = typeof(EpiBaseForm).GetMethod("handleToolClick", BindingFlags.Instance | BindingFlags.NonPublic);
mi.Invoke(MasterPackPrintForm, new object[]{"PrintClientTool",new Infragistics.Win.UltraWinToolbars.ToolClickEventArgs(MasterPackPrintForm.MainToolManager.Tools["RefreshTool"],null)});
@hasokeric
hasokeric / CleanUD01Form.cs
Created August 31, 2016 15:26
UD01 Hide tree and menu.
// Hides the tree and the menu bar.
// Leaves you with a nice blank slate.
private void UD01Form_Load(object sender, EventArgs args) {
// Hide tree view
EpiTreeViewPanel tvp = (EpiTreeViewPanel)csm.GetNativeControlReference("ff47e708-60d7-4586-9708-91a5d57fb7a6");
tvp.Parent.Parent.Visible = false;
// Hide tool bars
//Get a Handle on the Main Tool Manager for the Form
@hasokeric
hasokeric / bpm.cs
Created August 31, 2016 15:27
Get Current Instance of Running BO within a BPM
this.defaultImpl
//This will give you access to the current instance of the BO within BPM.
//For example on Order Update BPM you need to run a GetByID You woudl do as follows
SalesOrderTableset sots = this.defaultImpl.GetByID(5555);
//No need to instanciate another Sales Order BO
@hasokeric
hasokeric / cs.cs
Created August 31, 2016 15:29
Set Invoice Selected in AR Cash Receipt Entry
public void selectInv(int invc)
{
EpiDataView edv = oTrans.Factory("InvcHead");
for(int i =0; i < edv.dataView.Count; i++)
{
if((int)edv.dataView[i]["InvoiceNum"] == invc)
{
//edv.Row =i;
edv.RaiseRowChanged(i,edv.Row);