/// <summary> /// Вставка записи в Zero /// </summary> public void InsertToZero(FormalizationPosition position) { var drZero = dtZero.NewRow(); var core = position.Offer; drZero["PriceItemId"] = priceItemId; drZero["Name"] = position.PositionName; drZero["FirmCr"] = position.FirmCr; drZero["Code"] = core.Code; drZero["CodeCr"] = core.CodeCr; drZero["Unit"] = core.Unit; drZero["Volume"] = core.Volume; drZero["Quantity"] = core.Quantity; drZero["Note"] = core.Note; drZero["Period"] = core.Period; drZero["Doc"] = core.Doc; dtZero.Rows.Add(drZero); _loggingStat.Zero++; }
public void ResolveProducer(FormalizationPosition position) { if (!position.IsSet(UnrecExpStatus.NameForm)) { return; } //если уже формализован по штрих коду if (position.IsSet(UnrecExpStatus.FirmForm)) { return; } if (String.IsNullOrEmpty(position.FirmCr)) { position.AddStatus(UnrecExpStatus.FirmForm); return; } position.NotCreateUnrecExp = CheckForbiddenProducerName(position); var synonym = Resolve(position); if (synonym == null || synonym["CodeFirmCr"] is DBNull) { var producerId = GetAssortimentOne(position)?["ProducerId"]; if (synonym == null || producerId != null) { synonym = CreateProducerSynonym(position, producerId); } } position.UpdateProducerSynonym(synonym); if (position.SynonymFirmCrCode != null) { _stats.ProducerSynonymUsedExistCount++; } if (position.CodeFirmCr == null && !position.NotCreateUnrecExp) { CheckExclude(position); } }
private void CheckExclude(FormalizationPosition position) { if (position.IsAutomaticProducerSynonym) { return; } DataRow[] dr; using (_stats.ExludeSearch()) dr = _excludes.Select(String.Format("CatalogId = {0} and ProducerSynonym = '{1}'", position.CatalogId, position.FirmCr.Replace("'", "''"))); //если подходящего исключения нет, то значит позиция должна быть //обработана оператором или это не фармацевтика для которой нашелся //только синоним без производителя if (dr.Length == 0) { position.Status &= ~UnrecExpStatus.FirmForm; } }
//Смогли ли мы распознать позицию по коду, имени и оригинальному названию? public void GetProductId(FormalizationPosition position) { DataRow dr = null; if (_priceInfo.FormByCode) { if (!String.IsNullOrWhiteSpace(position.Code)) { var code = position.Code?.Trim().Replace("'", "''"); dr = dtSynonym.Select($"Code = {code}").FirstOrDefault(); } } else { dr = LookupProductSynonym(position)?.FirstOrDefault(); } if (dr != null) { position.UpdateProductSynonym(dr); } }
private DataRow[] LookupProductSynonym(FormalizationPosition position) { DataRow[] result = null; if (!String.IsNullOrWhiteSpace(position.PositionName)) { //var canonical = SpaceReg.Replace(position.PositionName, "").ToLower().Replace("'", "''"); //result = dtSynonym.Select($"Canonical = '{canonical}'"); //if (result.Length == 0) { var name = position.PositionName.ToLower().Replace("'", "''"); result = dtSynonym.Select($"Synonym = '{name}'"); //} } if ((result == null || result.Length == 0) && !String.IsNullOrWhiteSpace(position.OriginalName)) { //var originalName = SpaceReg.Replace(position.OriginalName, "").Replace("'", "''"); //result = dtSynonym.Select($"Canonical = '{originalName}'"); //if (result.Length == 0) { var name = position.OriginalName.ToLower().Replace("'", "''"); result = dtSynonym.Select($"Synonym = '{name}'"); //} } return(result); }