protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.SelectCustomer); Android.Widget.SearchView searchView = FindViewById <Android.Widget.SearchView>(Resource.Id.searchViewCustomers); //get all customers from database customers = DatabaseRequest.GetAllFromTable <Customer>().OrderBy(x => x.Company).ToList(); //populate RecyclerView with all customers customersRecyclerView = FindViewById <RecyclerView>(Resource.Id.customersRecyclerView); customersLayoutManager = new LinearLayoutManager(this); customersRecyclerView.SetLayoutManager(customersLayoutManager); customersAdapter = new CustomersAdapter(customers); customersAdapter.ItemClick += OnItemClick; customersRecyclerView.SetAdapter(customersAdapter); searchView.QueryTextChange += delegate { string currentSearchViewValue = searchView.Query; var currentCustomersSearched = customers.Where(x => x.Company.ToLower().Contains(currentSearchViewValue.ToLower())).ToList(); //repopulate RecyclerView with currentCustomersSearched customersAdapter = new CustomersAdapter(currentCustomersSearched); customersAdapter.ItemClick += OnItemClick; customersRecyclerView.SetAdapter(customersAdapter); }; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ArticlesList); //get all groups from database //using (var connection = new SQLiteConnection(System.IO.Path.Combine(GlobalVariables.databasePath, "MobileSell.db"))) //{ // var allGroups = connection.Table<Group>(); // groups.AddRange(allGroups); //} var allGroups = DatabaseRequest.GetAllFromTable <Group>(); groups.AddRange(allGroups); //fill in spinner with items spinner = FindViewById <MaterialSpinner>(Resource.Id.spinner); adapter = new ArrayAdapter <Group>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, groups); adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); spinner.Adapter = adapter; spinner.Background = Drawable.CreateFromXml(Resources, Resources.GetXml(Resource.Drawable.material_spinner_border)); //on activity start get all articles allArticles = DatabaseRequest.GetAllFromTable <Article>().Select(x => new ArticleViewModel { Id = x.Id, Group = x.Group, Name = x.Name, SellPrice = x.SellPrice, Quantity = x.Quantity }).ToList(); //create line between recyclerview items DividerItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.Vertical); //pass all articles to the RecyclerView articlesRecyclerView = FindViewById <RecyclerView>(Resource.Id.articlesRecyclerView); articlesRecyclerView.AddItemDecoration(itemDecoration); articlesLayoutManager = new LinearLayoutManager(this); articlesRecyclerView.SetLayoutManager(articlesLayoutManager); articlesAdapter = new ArticlesAdapter(allArticles); articlesAdapter.ItemClick += OnItemClick; articlesRecyclerView.SetAdapter(articlesAdapter); //get all articles from selected group spinner.ItemSelected += (s, e) => { if (e.Position != -1) { var groupId = groups.ElementAt(e.Position).Id; //get all articles from group which is currently selected List <ArticleViewModel> articlesFromGroup = allArticles.Where(x => x.Group == groupId).ToList(); //fill in the RecyclerView with articlesFromGroup; articlesAdapter = new ArticlesAdapter(articlesFromGroup); articlesAdapter.ItemClick += OnItemClick; articlesRecyclerView.SetAdapter(articlesAdapter); } else { //if no group is selected display all articles on screen articlesLayoutManager = new LinearLayoutManager(this); articlesRecyclerView.SetLayoutManager(articlesLayoutManager); articlesAdapter = new ArticlesAdapter(allArticles); articlesAdapter.ItemClick += OnItemClick; articlesRecyclerView.SetAdapter(articlesAdapter); } }; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Inventory); //get all groups from database using (var connection = new SQLiteConnection(System.IO.Path.Combine(GlobalVariables.databasePath, "MobileSell.db"))) { var allGroups = connection.Table <Group>(); groups.AddRange(allGroups); } //fill in spinner with items spinner = FindViewById <MaterialSpinner>(Resource.Id.spinner); adapter = new ArrayAdapter <Group>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, groups); adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); spinner.Adapter = adapter; spinner.Background = Drawable.CreateFromXml(Resources, Resources.GetXml(Resource.Drawable.material_spinner_border)); //on activity start get all articles allArticles = DatabaseRequest.GetAllFromTable <Article>().Select(x => new ArticleViewModel { Id = x.Id, Group = x.Group, Name = x.Name, SellPrice = x.SellPrice, Quantity = x.Quantity }).ToList(); //pass all articles to the RecyclerView articlesRecyclerView = FindViewById <RecyclerView>(Resource.Id.articlesRecyclerView); articlesLayoutManager = new LinearLayoutManager(this); articlesRecyclerView.SetLayoutManager(articlesLayoutManager); articlesAdapter = new ArticlesAdapter(allArticles); articlesRecyclerView.SetAdapter(articlesAdapter); TextView totalValue = FindViewById <TextView>(Resource.Id.totalValue); //calculate total sum of all articles in RecyclerView and set it to totalValue TextView decimal totalSumAllArticles = articlesAdapter.listOfArticles.Sum(x => x.Sum); totalValue.Text = String.Format("{0:0.00}", totalSumAllArticles); //get all articles from selected group spinner.ItemSelected += (s, e) => { if (e.Position != -1) { var groupId = groups.ElementAt(e.Position).Id; //get all articles from group which is currently selected List <ArticleViewModel> articlesFromGroup = allArticles.Where(x => x.Group == groupId).ToList(); //fill in the RecyclerView with articlesFromGroup //articlesLayoutManager = new LinearLayoutManager(this); //articlesRecyclerView.SetLayoutManager(articlesLayoutManager); articlesAdapter = new ArticlesAdapter(articlesFromGroup); articlesRecyclerView.SetAdapter(articlesAdapter); //calculate total value of articles //decimal totalSum = 0; //foreach(ArticleViewModel article in articlesFromGroup) //{ // totalSum += article.Sum; //} //calculate total sum of all articles in RecyclerView and set it to totalValue TextView totalSumAllArticles = articlesAdapter.listOfArticles.Sum(x => x.Sum); totalValue.Text = String.Format("{0:0.00}", totalSumAllArticles); } else { //if no group is selected display all articles on screen //articlesLayoutManager = new LinearLayoutManager(this); //articlesRecyclerView.SetLayoutManager(articlesLayoutManager); articlesAdapter = new ArticlesAdapter(allArticles); articlesRecyclerView.SetAdapter(articlesAdapter); //calculate total sum of all articles in RecyclerView and set it to totalValue TextView totalSumAllArticles = articlesAdapter.listOfArticles.Sum(x => x.Sum); totalValue.Text = String.Format("{0:0.00}", totalSumAllArticles); } }; Button btnPrint = FindViewById <Button>(Resource.Id.btnPrint); btnPrint.Click += delegate { StartActivity(typeof(PrintingActivity)); }; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Orders); settings = CurrentSettings.GetSettings(); //isDataFolderEmpty = StateOrdersActivity.IsDataFolderEmpty(); //isCreatingNewOrder = StateOrdersActivity.IsCreatingNewOrder(); //ENABLE-DISABLE BUTTONS //check if orders folder is empty //if orders folder is empty disable all buttons except "Нова" else enable all buttons //btnSelectCustomer.Enabled = (OrdersFolder is not Empty) and (textViewCustomerName is not empty) //btnNewRow.Enabled = OrdersFolder is not Empty) and (textViewCustomerName is not empty) //buttonSave.Enable = (recyclerView is not empty) //leftArrow.Enabled = (OrdersFolder not empty) and (OrderFolder has more than one value) btnLeftArrow = FindViewById <Button>(Resource.Id.btnLeftArrow); btnRightArrow = FindViewById <Button>(Resource.Id.btnRightArrow); btnBon = FindViewById <Button>(Resource.Id.btnBon); btnInvoice = FindViewById <Button>(Resource.Id.btnInvoice); btnSaveOrder = FindViewById <Button>(Resource.Id.btnSaveOrder); btnDatePicker = FindViewById <Button>(Resource.Id.btnDatePicker); btnSelectCustomer = FindViewById <Button>(Resource.Id.btnSelectCustomer); btnNewOrder = FindViewById <Button>(Resource.Id.btnNewOrder); btnNewRow = FindViewById <Button>(Resource.Id.btnNewRow); totalPriceAllArticlesTextView = FindViewById <TextView>(Resource.Id.totalPriceAllArticlesTextView); orderArticlesRecyclerView = FindViewById <RecyclerView>(Resource.Id.orderArticlesRecyclerView); textViewOrderNumber = FindViewById <TextView>(Resource.Id.textViewOrderNumber); textViewOrderDateAndHour = FindViewById <TextView>(Resource.Id.textViewOrderDateAndHour); textViewCustomerName = FindViewById <TextView>(Resource.Id.textViewCustomerName); textViewCustomerId = FindViewById <TextView>(Resource.Id.textViewCustomerId); //TODO: //if currently we are not creating an order display first order if (StateOrdersActivity.creatingNewOrder == false) { //fill in OrdersActivity views with data from xml orders //get all orders from data folder and map them to object OrderViewModel //string xmlFilePath = Android.OS.Environment.ExternalStorageDirectory.ToString() + "/Settings4/settings4.xml"; //XmlSerializer deserializer = new XmlSerializer(typeof(Settings)); //TextReader textReader = new StreamReader(xmlFilePath); //settings = (Settings)deserializer.Deserialize(textReader); //textReader.Close(); EnableDisableButtons(); //get all file names of saved orders in data folder in ascending order var allSavedOrdersFileNames = Directory.GetFiles(GlobalVariables.dataFolderPath, "*.xml").Select(System.IO.Path.GetFileName).OrderBy(f => f); if (allSavedOrdersFileNames.ToList().Count != 0) { foreach (string xmlFileName in allSavedOrdersFileNames) { //map xml files to c# objects and add it to list of StateOrdersActivity.xmlOrders string xmlFullFilePath = GlobalVariables.dataFolderPath + "/" + xmlFileName; XmlSerializer deserializer = new XmlSerializer(typeof(XmlOrder)); TextReader textReader = new StreamReader(xmlFullFilePath); XmlOrder xmlOrder = (XmlOrder)deserializer.Deserialize(textReader); StateOrdersActivity.xmlOrders.Add(xmlOrder); textReader.Close(); } //display first order DisplayOrder(StateOrdersActivity.DisplayOrderPosition); } } else { //set values to widgets again so that we don't loose them when we are navigating throught another activities EnableDisableButtons(); //recieve the customer name and set it to textViewCustomerName textViewCustomerName.Text = CurrentOrder.orderCustomerName; //recieve the customer id and set it to textViewCustomerId textViewCustomerId.Text = CurrentOrder.orderCustomerId; textViewOrderNumber.Text = CurrentOrder.orderNumber; textViewOrderDateAndHour.Text = CurrentOrder.orderDateAndHour; orderArticlesLayoutManager = new LinearLayoutManager(this); orderArticlesRecyclerView.SetLayoutManager(orderArticlesLayoutManager); orderArticlesAdapter = new OrderArticlesAdapter(CurrentOrder.listOfOrderArticles, this); orderArticlesRecyclerView.SetAdapter(orderArticlesAdapter); totalPriceAllArticlesTextView.Text = orderArticlesAdapter.CaltulateTotalPriceOfAllOrderArticles().ToString(); btnDatePicker.Text = CurrentOrder.executionOrderDate.ToString("dd.MM.yyyy"); } //TODO: //if StateOrdersActivity.creatingNewOrder == false display first order //datePickerDialog = new DatePickerDialog(this, this, CurrentOrder.executionOrderDate.Year, CurrentOrder.executionOrderDate.Month, CurrentOrder.executionOrderDate.Day); //datePickerDialog.DatePicker.MinDate = (long)(DateTime.Now.AddDays(1) - new DateTime(1970, 1, 1)).TotalMilliseconds; //set btnDatePicker's text to be DateTime.Now //btnDatePicker.Text = CurrentOrder.executionOrderDate; btnDatePicker.Click += delegate { datePickerDialog = new DatePickerDialog(this, this, CurrentOrder.executionOrderDate.Year, CurrentOrder.executionOrderDate.Month - 1, CurrentOrder.executionOrderDate.Day); datePickerDialog.DatePicker.MinDate = DateTimeOffset.Now.AddDays(1).AddSeconds(-1).ToUnixTimeMilliseconds(); datePickerDialog.Show(); }; btnRightArrow.Click += delegate { StateOrdersActivity.DisplayOrderPosition += 1; //enable disable btnRightArrow depending on if current order is last order or not bool isLastOrder = StateOrdersActivity.DisplayOrderPosition == StateOrdersActivity.xmlOrders.Count - 1; btnRightArrow.Enabled = isLastOrder ? false : true; //enable disable btnLeftArrow depending on if current order is first order or not bool isFirstOrder = StateOrdersActivity.DisplayOrderPosition == 0; btnLeftArrow.Enabled = isFirstOrder ? false : true; DisplayOrder(StateOrdersActivity.DisplayOrderPosition); }; btnLeftArrow.Click += delegate { StateOrdersActivity.DisplayOrderPosition -= 1; //enable disable btnRightArrow depending on if current order is last order or not bool isLastOrder = StateOrdersActivity.DisplayOrderPosition == StateOrdersActivity.xmlOrders.Count - 1; btnRightArrow.Enabled = isLastOrder ? false : true; //enable disable btnLeftArrow depending on if current order is first order or not bool isFirstOrder = StateOrdersActivity.DisplayOrderPosition == 0; btnLeftArrow.Enabled = isFirstOrder ? false : true; DisplayOrder(StateOrdersActivity.DisplayOrderPosition); }; int lastOrderNumber; string orderNumber; btnNewOrder.Click += delegate { //check if user is currently creating new order on clicking "Нова" if (StateOrdersActivity.creatingNewOrder == true) { //ask user if he is sure he wants to start creating new order, //the data of the order he was currently creating will be lost AlertDialog.Builder alertClearCurrentOrderData = new AlertDialog.Builder(this); alertClearCurrentOrderData.SetMessage("Сигурни ли сте че искате да създадете нова поръчка? \nДанните за текущата ще бъдат загубени"); alertClearCurrentOrderData.SetPositiveButton("ДA", delegate { StateOrdersActivity.creatingNewOrder = false; ClearScreenData(); btnNewOrder.PerformClick(); }); alertClearCurrentOrderData.SetNegativeButton("НЕ", delegate { alertClearCurrentOrderData.Dispose(); }); alertClearCurrentOrderData.Create().Show(); } else { //clear screen data from OrdersActivity ClearScreenData(); //Enable-Disable buttons on "Нова" button pressed StateOrdersActivity.creatingNewOrder = true; btnDatePicker.Text = CurrentOrder.executionOrderDate.ToString("dd.MM.yyyy"); EnableDisableButtons(); //create order number if (StateOrdersActivity.dataFolderNumOrders == 0) { //get last order number from MobileSell/object.xml and set it to textViewOrderNumber XmlDocument doc = new XmlDocument(); doc.Load(GlobalVariables.mobileSellFolderPath + "/object.xml"); XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("ab", "http://tempuri.org/DataSet1.xsd"); string f1 = doc.SelectSingleNode("//ab:f1", nsmgr).InnerText.ToString(); lastOrderNumber = Convert.ToInt32(f1); orderNumber = (lastOrderNumber + 1).ToString(); //set order number to global variable CurrentOrder.orderNumber so its value is not lost when going to another activities CurrentOrder.orderNumber = orderNumber.ToString(); //textViewOrderNumber.Text = CurrentOrder.orderNumber; ////get DateTime.Now + Hour and set it to global variable CurrentOrder.orderDateAndHour so its value is not lost when going to another activities //CurrentOrder.orderDateAndHour = DateTime.Now.ToString("dd.MM.yyyy HH:mm"); //textViewOrderDateAndHour.Text = CurrentOrder.orderDateAndHour; } else { //Всеки следващ е името на първия + 1 //get xml file name with the biggest name string biggestXmlFileName = Directory.GetFiles(GlobalVariables.dataFolderPath, "*.xml").Select(System.IO.Path.GetFileNameWithoutExtension). OrderByDescending(f => f).FirstOrDefault(); CurrentOrder.orderNumber = (Convert.ToInt32(biggestXmlFileName) + 1).ToString(); } textViewOrderNumber.Text = CurrentOrder.orderNumber; //set execution date //CurrentOrder.executionOrderDate = DateTime.Now.AddDays(1).ToString("dd.MM.yyyy"); //btnDatePicker.Text = CurrentOrder.executionOrderDate; //get DateTime.Now + Hour and set it to global variable CurrentOrder.orderDateAndHour so its value is not lost when going to another activities CurrentOrder.orderDateAndHour = DateTime.Now.ToString("dd.MM.yyyy HH:mm"); textViewOrderDateAndHour.Text = CurrentOrder.orderDateAndHour; } }; btnSelectCustomer.Click += delegate { //desable btnSelectCustomer so user doesn't press it a second time while activity is loading //because it will throw exception btnSelectCustomer.Enabled = false; StartActivity(typeof(SelectCustomerActivity)); }; btnNewRow.Click += delegate { StartActivity(typeof(ArticlesListActivity)); }; btnSaveOrder.Click += delegate { //check if all data is entered by the user if (textViewCustomerName.Text != "" && btnDatePicker.Text != "" && orderArticlesAdapter.listOfOrderArticles.Count != 0) { string xmlFullFilePath = GlobalVariables.dataFolderPath + "/" + textViewOrderNumber.Text + ".xml"; try { //SAVE ORDER IN XML FILE //get the time when order creation was started string orderCreationStarted = textViewOrderDateAndHour.Text; //set textViewOrderDateAndHour.Text to be Datetime.Now string orderCreationEnded = DateTime.Now.ToString("dd.MM.yyyy HH:mm"); textViewOrderDateAndHour.Text = orderCreationEnded; //get interval between start creating order and end creating order string interval = orderCreationStarted + " - " + textViewOrderDateAndHour.Text; //set textViewOrderDateAndHour to DateTime.Now XmlWriterSettings xmlSettings = new XmlWriterSettings(); xmlSettings.Indent = true; //get name and id from object.xml XmlDocument doc = new XmlDocument(); doc.Load(GlobalVariables.mobileSellFolderPath + "/object.xml"); XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("ab", "http://tempuri.org/DataSet1.xsd"); string id = doc.SelectSingleNode("//ab:id", nsmgr).InnerText.ToString(); string name = doc.SelectSingleNode("//ab:name", nsmgr).InnerText.ToString(); using (XmlWriter writer = XmlWriter.Create(xmlFullFilePath, xmlSettings)) { writer.WriteStartElement("xmlOrder"); writer.WriteStartElement("DemandHeader"); writer.WriteElementString("id", textViewOrderNumber.Text); writer.WriteElementString("sale_id", id); writer.WriteElementString("sell_name", name); writer.WriteElementString("datetime", textViewOrderDateAndHour.Text); writer.WriteElementString("typedoc", "2"); writer.WriteElementString("docname", "ПОРЪЧКА"); writer.WriteElementString("cust_id", textViewCustomerId.Text); writer.WriteElementString("cust_name", textViewCustomerName.Text); writer.WriteElementString("worktime", interval); writer.WriteElementString("tp", settings.Sales.TpId); writer.WriteElementString("km", ""); writer.WriteElementString("paysum", "0"); writer.WriteElementString("f1", ""); writer.WriteElementString("f2", btnDatePicker.Text); writer.WriteElementString("f3", ""); writer.WriteElementString("paytype", "1"); writer.WriteElementString("invoiceid", ""); writer.WriteElementString("bonid", ""); writer.WriteEndElement(); //write articles into xml file foreach (OrderArticleViewModel orderArticle in orderArticlesAdapter.listOfOrderArticles) { //get article price without discount decimal articlePriceWithoutDiscount = DatabaseRequest.GetAllFromTable <Article>() .Where(x => x.Id == orderArticle.ArticleId) .Select(x => x.SellPrice).FirstOrDefault(); writer.WriteStartElement("Demand"); writer.WriteElementString("id", CurrentOrder.orderNumber); writer.WriteElementString("artid", orderArticle.ArticleId); writer.WriteElementString("name", orderArticle.ArticleName); writer.WriteElementString("quantity", orderArticle.ArticleQuantity); writer.WriteElementString("price", articlePriceWithoutDiscount.ToString()); writer.WriteElementString("sum", orderArticle.ArticleTotalPrice); writer.WriteElementString("discount", orderArticle.PriceDiscount); writer.WriteElementString("pprice", orderArticle.ArticlePrice); writer.WriteElementString("certificate", ""); writer.WriteElementString("f1", ""); writer.WriteElementString("f2", ""); writer.WriteElementString("f3", ""); writer.WriteEndElement(); } writer.WriteEndElement(); writer.Flush(); } ////add created order in xmlOrders list //XmlSerializer deserializer = new XmlSerializer(typeof(XmlOrder)); //TextReader textReader = new StreamReader(xmlFullFilePath); //XmlOrder xmlOrder = (XmlOrder)deserializer.Deserialize(textReader); //StateOrdersActivity.xmlOrders.Add(xmlOrder); //textReader.Close(); //Decrease quantity in tables article and sertif DatabaseRequest.UpdateQuantities(orderArticlesAdapter.listOfOrderArticles); //say to user "Записа беще успешен" AlertDialog.Builder alertSaveSuccess = new AlertDialog.Builder(this); alertSaveSuccess.SetMessage("Поръчката беше записана успешно"); alertSaveSuccess.SetPositiveButton("OK", delegate { //clear screen data from OrdersActivity ClearScreenData(); //add created order in xmlOrders list XmlSerializer deserializer = new XmlSerializer(typeof(XmlOrder)); TextReader textReader = new StreamReader(xmlFullFilePath); XmlOrder xmlOrder = (XmlOrder)deserializer.Deserialize(textReader); StateOrdersActivity.xmlOrders.Add(xmlOrder); textReader.Close(); //set state ordersactivity creating new to false StateOrdersActivity.creatingNewOrder = false; //increase number of orders created by 1 StateOrdersActivity.dataFolderNumOrders += 1; //set first order to be displayed StateOrdersActivity.DisplayOrderPosition = 0; //Recreate(); EnableDisableButtons(); DisplayOrder(StateOrdersActivity.DisplayOrderPosition); //Finish(); alertSaveSuccess.Dispose(); }); alertSaveSuccess.Create().Show(); } catch (InsufficientQuantityException ex) { //if error occurs during creating xml or decreasing the data in the database, delete created xml if (File.Exists(xmlFullFilePath)) { File.Delete(xmlFullFilePath); } //display error message "Insuficent quantity" AlertDialog.Builder alertInsufficientQuantity = new AlertDialog.Builder(this); alertInsufficientQuantity.SetMessage(ex.Message); alertInsufficientQuantity.SetPositiveButton("OK", delegate { alertInsufficientQuantity.Dispose(); }); alertInsufficientQuantity.Create().Show(); } catch (Exception ex) { //if error occurs during creating xml or decreasing the data in the database, delete created xml if (File.Exists(xmlFullFilePath)) { File.Delete(xmlFullFilePath); } //display error message "Insuficent quantity" AlertDialog.Builder alertError = new AlertDialog.Builder(this); string errorMessage = "Грешка: " + ex.Message + "\n" + "поръчката не беше записана"; alertError.SetMessage(errorMessage); alertError.SetPositiveButton("OK", delegate { alertError.Dispose(); }); alertError.Create().Show(); } } else { //if some data is missing display error message //create error message string errorMessage = "Моля въведете: "; errorMessage += String.IsNullOrEmpty(textViewCustomerName.Text) ? "име на клиент, " : ""; errorMessage += String.IsNullOrEmpty(btnDatePicker.Text) ? "дата на изпълнение на поръчка, " : ""; errorMessage += orderArticlesAdapter.listOfOrderArticles.Count == 0 ? "артикул" : ""; errorMessage = errorMessage.TrimEnd(',', ' '); //display error message AlertDialog.Builder alertDataMissing = new AlertDialog.Builder(this); alertDataMissing.SetMessage(errorMessage); alertDataMissing.SetPositiveButton("OK", delegate { alertDataMissing.Dispose(); }); alertDataMissing.Create().Show(); } }; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.InputQuantityAndLot); //get id of selected article var articleId = Intent.GetStringExtra("articleId"); //get article name and price from selected article and set it its TextViews var article = DatabaseRequest.GetAllFromTable <Article>() .Where(x => x.Id == articleId).FirstOrDefault(); TextView articleName = FindViewById <TextView>(Resource.Id.articleName); articleName.Text = article.Name; TextView articlePriceTextView = FindViewById <TextView>(Resource.Id.articlePriceTextView); articlePriceTextView.Text = article.SellPriceDisplay; TextView articlePriceAfterDiscountTextView = FindViewById <TextView>(Resource.Id.articlePriceAfterDiscountTextView); articlePriceAfterDiscountTextView.Text = articlePriceTextView.Text; TextView totalPriceTextView = FindViewById <TextView>(Resource.Id.totalPriceTextView); EditText quantityEditText = FindViewById <EditText>(Resource.Id.quantityEditText); EditText discountEditText = FindViewById <EditText>(Resource.Id.discountEditText); discountEditText.SetFilters(new IInputFilter[] { new DecimalFilter(2) }); discountEditText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => { //calculate article price after discount applied and set it to articlePriceAfterDiscountTextView decimal articlePrice = Convert.ToDecimal(articlePriceTextView.Text); decimal discountPercentage; if (!Decimal.TryParse(e.Text.ToString(), out discountPercentage)) { discountPercentage = 0; } decimal articleQuantity; if (!Decimal.TryParse(quantityEditText.Text, out articleQuantity)) { articleQuantity = 0; } ; decimal discountAmount = Math.Round(articlePrice * (discountPercentage / 100), 4); decimal articlePriceAfterDiscount = articlePrice - discountAmount; articlePriceAfterDiscountTextView.Text = articlePriceAfterDiscount.ToString(); //calculate total price decimal totalPrice = Math.Round(articlePriceAfterDiscount * articleQuantity, 2); totalPriceTextView.Text = totalPrice.ToString(); }; //EditText quantityEditText = FindViewById<EditText>(Resource.Id.quantityEditText); quantityEditText.SetFilters(new IInputFilter[] { new DecimalFilter(3) }); quantityEditText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => { //calculate total price and set it to totalPriceTextView decimal articlePriceAfterDiscount = Convert.ToDecimal(articlePriceAfterDiscountTextView.Text); decimal articleQuantity; decimal totalPrice; //if entered value is not a number we set articleQuantity to 0 if (!Decimal.TryParse(e.Text.ToString(), out articleQuantity)) { articleQuantity = 0; } ; totalPrice = Math.Round(articlePriceAfterDiscount * articleQuantity, 2); totalPriceTextView.Text = totalPrice.ToString(); }; //get all lots of selected article lots = DatabaseRequest.GetAllFromTable <Sertif>() .Where(x => x.ArtId == articleId) .Select(x => new LotViewModel { Name = x.Name, ExpireDate = x.ExpireDate, QuantityDisplay = x.QuantityDisplay, LotId = x.Lotid, }).ToList(); //fill in the RecyclerView with articles lotsRecyclerView = FindViewById <RecyclerView>(Resource.Id.lotRecyclerView); lotsLayoutManager = new LinearLayoutManager(this); lotsRecyclerView.SetLayoutManager(lotsLayoutManager); lotsAdapter = new LotsAdapter(lots); lotsRecyclerView.SetAdapter(lotsAdapter); btnSelect = FindViewById <Button>(Resource.Id.btnSelect); btnSelect.Click += delegate { //Check if we have lot selected if not show alert message saying that we have to choose some lot if (!String.IsNullOrEmpty(lotsAdapter.currentLotIdChecked) || lotsAdapter.listOfLots.Count == 0) { //Check if quantity typed from user is equal or greater ot equal to 0 than the quantity of selected lot //if not display alert message saying: "Entered quantity is less that lot quantity" decimal enteredQuantity = !String.IsNullOrEmpty(quantityEditText.Text) ? Convert.ToDecimal(quantityEditText.Text) : 0m; decimal quantity; bool hasLots; if (lotsAdapter.listOfLots.Count != 0) { hasLots = true; decimal selectedLotQuantity = DatabaseRequest.GetAllFromTable <Sertif>() .Where(x => x.Lotid == lotsAdapter.currentLotIdChecked) .Select(x => x.Quantity).FirstOrDefault(); quantity = selectedLotQuantity; } else { hasLots = false; decimal articleQuantity = DatabaseRequest.GetAllFromTable <Article>() .Where(x => x.Id == articleId) .Select(x => x.Quantity).FirstOrDefault(); quantity = articleQuantity; } if (enteredQuantity <= quantity && enteredQuantity > 0) { //redirect to OrdersActivity with articleId, lotid, price after discount, quantity var ordersActivity = new Intent(this, typeof(OrdersActivity)); CurrentOrder.listOfOrderArticles.Add( new OrderArticleViewModel { ArticleId = articleId, LotId = lotsAdapter.currentLotIdChecked, ArticleName = articleName.Text, PriceDiscount = discountEditText.Text, ArticlePrice = articlePriceAfterDiscountTextView.Text, ArticleQuantity = quantityEditText.Text, ArticleTotalPrice = totalPriceTextView.Text }); StartActivity(ordersActivity); } else { AlertDialog.Builder alertQuantityNotValid = new AlertDialog.Builder(this); alertQuantityNotValid.SetMessage("Въведеното количество е невалидно"); alertQuantityNotValid.SetPositiveButton("OK", delegate { alertQuantityNotValid.Dispose(); }); alertQuantityNotValid.Create().Show(); } } else { AlertDialog.Builder alertLotNotChoosen = new AlertDialog.Builder(this); alertLotNotChoosen.SetMessage("Моля изберете партида"); alertLotNotChoosen.SetPositiveButton("OK", delegate { alertLotNotChoosen.Dispose(); }); alertLotNotChoosen.Create().Show(); } //Finish(); }; }