/// <summary> /// Save Purchase Order /// </summary> public void PurchaseOrder_Click(object sender) { CollectionViewSource purchase_invoicepurchase_invoice_detailViewSource = FindResource("purchase_invoicepurchase_invoice_detailViewSource") as CollectionViewSource; purchase_invoice purchase_invoice = (purchase_invoice)purchase_invoiceViewSource.View.CurrentItem; foreach (purchase_order purchase_order in pnlPurchaseOrder.selected_purchase_order) { purchase_invoice.contact = purchase_order.contact; purchase_invoice.id_contact = purchase_order.id_contact; purchase_invoice.app_department = purchase_order.app_department; purchase_invoice.id_department = purchase_order.id_department; purchase_invoice.app_condition = purchase_order.app_condition; purchase_invoice.id_condition = purchase_order.id_condition; purchase_invoice.app_contract = purchase_order.app_contract; purchase_invoice.id_contract = purchase_order.id_contract; if (purchase_order.project != null) { purchase_invoice.project = purchase_order.project; purchase_invoice.id_project = purchase_order.id_project; } foreach (purchase_order_detail _purchase_order_detail in purchase_order.purchase_order_detail) { if (purchase_invoice.purchase_invoice_detail.Where(x => x.id_item == _purchase_order_detail.id_item).Count() == 0) { purchase_invoice_detail purchase_invoice_detail = new purchase_invoice_detail(); purchase_invoice.State = EntityState.Modified; purchase_invoice_detail.purchase_invoice = purchase_invoice; purchase_invoice_detail.id_purchase_order_detail = _purchase_order_detail.id_purchase_order_detail; purchase_invoice_detail.id_vat_group = _purchase_order_detail.id_vat_group; purchase_invoice_detail.app_cost_center = _purchase_order_detail.app_cost_center; purchase_invoice_detail.id_cost_center = _purchase_order_detail.id_cost_center; purchase_invoice_detail.item = _purchase_order_detail.item; purchase_invoice_detail.id_item = _purchase_order_detail.id_item; purchase_invoice_detail.item_description = _purchase_order_detail.item_description; purchase_invoice_detail.quantity = _purchase_order_detail.quantity - PurchaseInvoiceDB.purchase_invoice_detail .Where(x => x.id_purchase_order_detail == _purchase_order_detail.id_purchase_order_detail) .GroupBy(x => x.id_purchase_order_detail).Select(x => x.Sum(y => y.quantity)).FirstOrDefault(); purchase_invoice_detail.unit_cost = _purchase_order_detail.unit_cost; foreach (purchase_order_dimension purchase_order_dimension in _purchase_order_detail.purchase_order_dimension) { purchase_invoice_dimension purchase_invoice_dimension = new purchase_invoice_dimension(); purchase_invoice_dimension.id_dimension = purchase_order_dimension.id_dimension; purchase_invoice_dimension.value = purchase_order_dimension.value; purchase_invoice_dimension.id_measurement = purchase_order_dimension.id_measurement; //Add Dimension to Detail purchase_invoice_detail.purchase_invoice_dimension.Add(purchase_invoice_dimension); } //Add Detail to Header purchase_invoice.purchase_invoice_detail.Add(purchase_invoice_detail); } } } PurchaseInvoiceDB.Entry(purchase_invoice).Entity.State = EntityState.Added; purchase_invoicepurchase_invoice_detailViewSource.View.Refresh(); crud_modal.Children.Clear(); crud_modal.Visibility = Visibility.Collapsed; }
private void SelectProduct_Thread(object sender, EventArgs e, purchase_invoice purchase_invoice, item item, contact contact) { purchase_invoice_detail purchase_invoice_detail = new purchase_invoice_detail(); purchase_invoice_detail.purchase_invoice = purchase_invoice; Cognitivo.Purchase.InvoiceSetting InvoiceSetting = new Cognitivo.Purchase.InvoiceSetting(); //ItemLink if (item != null) { purchase_invoice_detail detail_withitem = purchase_invoice.purchase_invoice_detail.Where(a => a.id_item == item.id_item).FirstOrDefault(); if (detail_withitem != null && InvoiceSetting.AllowDuplicateItems) { //Item Exists in Context, so add to sum. purchase_invoice_detail _purchase_invoice_detail = detail_withitem; _purchase_invoice_detail.quantity += 1; //Return because Item exists, and will +1 in Quantity return; } else { //If Item Exists in previous purchase... then get Last Cost. Problem, will get in stored value, in future we will need to add logic to convert into current currency. purchase_invoice_detail _purchase_invoice_detail = PurchaseInvoiceDB.purchase_invoice_detail .Where(x => x.id_item == item.id_item && x.purchase_invoice.id_contact == purchase_invoice.id_contact) .OrderByDescending(y => y.purchase_invoice.trans_date) .FirstOrDefault(); if (_purchase_invoice_detail != null) { purchase_invoice_detail.unit_cost = _purchase_invoice_detail.unit_cost; } //Item DOES NOT Exist in Context purchase_invoice_detail.item = item; purchase_invoice_detail.id_item = item.id_item; purchase_invoice_detail.item_description = item.name; purchase_invoice_detail.quantity = 1; } foreach (item_dimension item_dimension in item.item_dimension) { purchase_invoice_dimension purchase_invoice_dimension = new purchase_invoice_dimension(); purchase_invoice_dimension.id_dimension = item_dimension.id_app_dimension; purchase_invoice_dimension.app_dimension = item_dimension.app_dimension; purchase_invoice_dimension.id_measurement = item_dimension.id_measurement; purchase_invoice_dimension.app_measurement = item_dimension.app_measurement; purchase_invoice_dimension.purchase_invoice_detail = purchase_invoice_detail; purchase_invoice_dimension.value = item_dimension.value; purchase_invoice_detail.purchase_invoice_dimension.Add(purchase_invoice_dimension); } } else { Dispatcher.BeginInvoke((Action)(() => { purchase_invoice_detail.item_description = sbxItem.Text; })); } //Cost Center if (contact != null && contact.app_cost_center != null) { app_cost_center app_cost_center = contact.app_cost_center; if (app_cost_center.id_cost_center > 0) { purchase_invoice_detail.id_cost_center = app_cost_center.id_cost_center; } } else { Dispatcher.BeginInvoke((Action)(() => { //If Contact does not exist, and If product exist, then take defualt Product Cost Center. Else, bring Administrative if (item != null) { int id_cost_center = 0; if (item.item_product != null) { app_cost_center app_cost_center = PurchaseInvoiceDB.app_cost_center.Where(a => a.is_product && a.is_active && a.id_company == CurrentSession.Id_Company).FirstOrDefault(); if (app_cost_center != null) { id_cost_center = Convert.ToInt32(app_cost_center.id_cost_center); } if (id_cost_center > 0) { purchase_invoice_detail.id_cost_center = id_cost_center; } } else if (item.item_asset != null) { app_cost_center app_cost_center = PurchaseInvoiceDB.app_cost_center.Where(a => a.is_fixedasset == true && a.is_active == true && a.id_company == CurrentSession.Id_Company).FirstOrDefault(); if (app_cost_center != null) { id_cost_center = Convert.ToInt32(app_cost_center.id_cost_center); } if (id_cost_center > 0) { purchase_invoice_detail.id_cost_center = id_cost_center; } } } else { int id_cost_center = 0; app_cost_center app_cost_center = PurchaseInvoiceDB.app_cost_center.Where(a => a.is_administrative == true && a.is_active == true && a.id_company == CurrentSession.Id_Company).FirstOrDefault(); if (app_cost_center != null) { id_cost_center = Convert.ToInt32(app_cost_center.id_cost_center); } if (id_cost_center > 0) { purchase_invoice_detail.id_cost_center = id_cost_center; } } })); } //VAT if (item != null) { if (item.id_vat_group > 0) { purchase_invoice_detail.id_vat_group = item.id_vat_group; } } else if (PurchaseInvoiceDB.app_vat_group.Where(x => x.is_active && x.is_default && x.id_company == CurrentSession.Id_Company).Any()) { purchase_invoice_detail.id_vat_group = PurchaseInvoiceDB.app_vat_group.Where(x => x.is_active && x.is_default && x.id_company == CurrentSession.Id_Company).FirstOrDefault().id_vat_group; } Dispatcher.BeginInvoke((Action)(() => { purchase_invoice.purchase_invoice_detail.Add(purchase_invoice_detail); purchase_invoicepurchase_invoice_detailViewSource.View.Refresh(); calculate_vat(null, null); })); }